diff --git a/.buckconfig.d/external_cells/facebook/buck2-shims-meta/external_cell.buckconfig b/.buckconfig.d/external_cells/facebook/buck2-shims-meta/external_cell.buckconfig index 51665d718950a..f942f46d5f253 100644 --- a/.buckconfig.d/external_cells/facebook/buck2-shims-meta/external_cell.buckconfig +++ b/.buckconfig.d/external_cells/facebook/buck2-shims-meta/external_cell.buckconfig @@ -6,4 +6,4 @@ gh_facebook_buck2_shims_meta = git [external_cell_gh_facebook_buck2_shims_meta] git_origin = https://github.com/facebook/buck2-shims-meta.git -commit_hash = 461a1b10af7eb8af2f6d0eb0129009d60048e6de +commit_hash = 8fc88930320931d4ebe35f2b588dce4c95384d20 diff --git a/CMakeLists.txt b/CMakeLists.txt index 61909288ef5a3..89844019420e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -173,6 +173,7 @@ find_package(fizz CONFIG REQUIRED) find_package(fmt CONFIG REQUIRED) find_package(wangle CONFIG REQUIRED) find_package(FBThrift CONFIG REQUIRED) +find_package(range-v3 REQUIRED) include_directories(${FB303_INCLUDE_DIR}) find_path(FATAL_INCLUDE_DIR NAMES fatal/portability.h) include_directories(${FATAL_INCLUDE_DIR}) @@ -382,6 +383,27 @@ add_fbthrift_cpp_library( phy_cpp2 transceiver_cpp2 ) +add_fbthrift_cpp_library( + cmis_cpp2 + fboss/qsfp_service/module/cmis/cmis.thrift + OPTIONS + json + reflection +) +add_fbthrift_cpp_library( + sff_cpp2 + fboss/qsfp_service/module/sff/sff.thrift + OPTIONS + json + reflection +) +add_fbthrift_cpp_library( + sff8472_cpp2 + fboss/qsfp_service/module/sff/sff8472.thrift + OPTIONS + json + reflection +) add_fbthrift_cpp_library( sensor_service_stats_cpp2 fboss/platform/sensor_service/sensor_service_stats.thrift @@ -703,6 +725,10 @@ find_library(LIBGPIOD gpiod) find_path(LIBGPIOD_INCLUDE_DIR NAMES gpiod.h) include_directories(${LIBGPIOD_INCLUDE_DIR}) +find_library(SYSTEMD systemd) +find_path(SYSTEMD_INCLUDE_DIR NAMES systemd/sd-daemon.h) +include_directories(${SYSTEMD_INCLUDE_DIR}) + # Unit Testing add_definitions (-DIS_OSS=true) find_package(Threads REQUIRED) @@ -816,7 +842,7 @@ if (GITHUB_ACTIONS_BUILD) weutil_crc16_ccitt_test weutil_fboss_eeprom_parser_test sensor_service_sw_test - sensor_service_utils_tests + sensor_service_utils_test rackmon_test fan_service_sw_test data_corral_service_hw_test diff --git a/buck2 b/buck2 index d682ee0594550..5c84145371963 100755 --- a/buck2 +++ b/buck2 @@ -4,62 +4,62 @@ "name": "buck2", "platforms": { "macos-aarch64": { - "size": 24650797, + "size": 24793637, "hash": "blake3", - "digest": "c1d538cde7ac6ad0d8f12671420d09786622a97ae186ce4f8e676861910ae45b", + "digest": "bb0035bb305bf3b6bb381b2c98063ab0912f77fcb3603a891cac4c59d17b2795", "format": "zst", "path": "buck2-aarch64-apple-darwin", "providers": [ { - "url": "https://github.com/facebook/buck2/releases/download/2024-10-15/buck2-aarch64-apple-darwin.zst" + "url": "https://github.com/facebook/buck2/releases/download/2024-11-15/buck2-aarch64-apple-darwin.zst" } ] }, "linux-aarch64": { - "size": 26956137, + "size": 27097669, "hash": "blake3", - "digest": "5bcb0ee9ed84799206d0cffd52e4b5ff4cacc9b1522d984f25e17c94414519c3", + "digest": "70c796a8e7470a497d6251963c1d9da1679266f4ba1fdbf44a252aeac1687d8c", "format": "zst", "path": "buck2-aarch64-unknown-linux-musl", "providers": [ { - "url": "https://github.com/facebook/buck2/releases/download/2024-10-15/buck2-aarch64-unknown-linux-musl.zst" + "url": "https://github.com/facebook/buck2/releases/download/2024-11-15/buck2-aarch64-unknown-linux-musl.zst" } ] }, "macos-x86_64": { - "size": 26405161, + "size": 26566564, "hash": "blake3", - "digest": "e388933ebd3bf8e2f9dcd20dbba33fe033319b1a07a67d92ef33e6c188512cb2", + "digest": "f2d32397d72a0f3d96dd3265a525a9264ecc5aacc01c9f53ef1be7864f792c6c", "format": "zst", "path": "buck2-x86_64-apple-darwin", "providers": [ { - "url": "https://github.com/facebook/buck2/releases/download/2024-10-15/buck2-x86_64-apple-darwin.zst" + "url": "https://github.com/facebook/buck2/releases/download/2024-11-15/buck2-x86_64-apple-darwin.zst" } ] }, "windows-x86_64": { - "size": 21795979, + "size": 21945285, "hash": "blake3", - "digest": "7712324d3e71e487b76860f42f9a0d0e8bc49e692c13ce5053aabe8f1a30be8d", + "digest": "e0ebb882535cc24439025b39a023ae2148fc9f4733ab3552dbce396f964dd549", "format": "zst", "path": "buck2-x86_64-pc-windows-msvc.exe", "providers": [ { - "url": "https://github.com/facebook/buck2/releases/download/2024-10-15/buck2-x86_64-pc-windows-msvc.exe.zst" + "url": "https://github.com/facebook/buck2/releases/download/2024-11-15/buck2-x86_64-pc-windows-msvc.exe.zst" } ] }, "linux-x86_64": { - "size": 27977618, + "size": 28049273, "hash": "blake3", - "digest": "6f611bbf77c9544831405e68607682523f20f22aa55df1c5a3461f9c3a0cfa03", + "digest": "4ce1ccad2e051ac169d165905de2e3de68558a74e90756c71ab04fa78e38d23b", "format": "zst", "path": "buck2-x86_64-unknown-linux-musl", "providers": [ { - "url": "https://github.com/facebook/buck2/releases/download/2024-10-15/buck2-x86_64-unknown-linux-musl.zst" + "url": "https://github.com/facebook/buck2/releases/download/2024-11-15/buck2-x86_64-unknown-linux-musl.zst" } ] } diff --git a/build/deps/github_hashes/facebook/fb303-rev.txt b/build/deps/github_hashes/facebook/fb303-rev.txt index 8e015d90924ae..a75067dc6e180 100644 --- a/build/deps/github_hashes/facebook/fb303-rev.txt +++ b/build/deps/github_hashes/facebook/fb303-rev.txt @@ -1 +1 @@ -Subproject commit 416aa3d1ff335d0dea665989ade77dd9f2a2a99c +Subproject commit 9c2bca662d6b0dade4739b2bbd093c39cd12f8fa diff --git a/build/deps/github_hashes/facebook/fbthrift-rev.txt b/build/deps/github_hashes/facebook/fbthrift-rev.txt index cbd71d447a7cb..4ca0246a737dd 100644 --- a/build/deps/github_hashes/facebook/fbthrift-rev.txt +++ b/build/deps/github_hashes/facebook/fbthrift-rev.txt @@ -1 +1 @@ -Subproject commit 78e5b27861982706b85ff5c9009c68d360f042aa +Subproject commit c2812a8afeddde67ebd9fd8ea275be269e5dc79d diff --git a/build/deps/github_hashes/facebook/folly-rev.txt b/build/deps/github_hashes/facebook/folly-rev.txt index 130acc11a3986..de58e7f75f721 100644 --- a/build/deps/github_hashes/facebook/folly-rev.txt +++ b/build/deps/github_hashes/facebook/folly-rev.txt @@ -1 +1 @@ -Subproject commit b8b1850df06e286ab510dafc1ebe7ab91ecd4141 +Subproject commit dd1de90149f37d91674272e3721620a69ed9841d diff --git a/build/deps/github_hashes/facebook/wangle-rev.txt b/build/deps/github_hashes/facebook/wangle-rev.txt index 0bdab7884f4c5..a0555762c6c78 100644 --- a/build/deps/github_hashes/facebook/wangle-rev.txt +++ b/build/deps/github_hashes/facebook/wangle-rev.txt @@ -1 +1 @@ -Subproject commit 1fc174e3de49c385f33b4fbb4a4e8e0798e15122 +Subproject commit 562c4a1a4c65deb1a2007c4056a885efedbab021 diff --git a/build/deps/github_hashes/facebookincubator/fizz-rev.txt b/build/deps/github_hashes/facebookincubator/fizz-rev.txt index 39b94d8548efe..bcd44fd185fc5 100644 --- a/build/deps/github_hashes/facebookincubator/fizz-rev.txt +++ b/build/deps/github_hashes/facebookincubator/fizz-rev.txt @@ -1 +1 @@ -Subproject commit 787df81d7a579315e35b71500fc358582045c2a5 +Subproject commit 4c3c90f3d01289d44114ecc7cf01139d8c1de6ea diff --git a/build/fbcode_builder/getdeps/builder.py b/build/fbcode_builder/getdeps/builder.py index 65bca2692a882..10bd2a62a62a8 100644 --- a/build/fbcode_builder/getdeps/builder.py +++ b/build/fbcode_builder/getdeps/builder.py @@ -487,6 +487,61 @@ def _build(self, reconfigure) -> None: self._run_cmd(install_cmd, env=env) +class SystemdBuilder(BuilderBase): + # SystemdBuilder assumes that meson build tool has already been installed on + # the machine. + def __init__( + self, + loader, + dep_manifests, + build_opts, + ctx, + manifest, + src_dir, + build_dir, + inst_dir, + ) -> None: + super(SystemdBuilder, self).__init__( + loader, + dep_manifests, + build_opts, + ctx, + manifest, + src_dir, + build_dir, + inst_dir, + ) + + def _build(self, reconfigure) -> None: + env = self._compute_env() + meson = path_search(env, "meson") + if meson is None: + raise Exception("Failed to find Meson") + + # Meson builds typically require setup, compile, and install steps. + # During this setup step we ensure that the static library is built and + # the prefix is empty. + self._run_cmd( + [ + meson, + "setup", + "-Dstatic-libsystemd=true", + "-Dprefix=/", + self.build_dir, + self.src_dir, + ] + ) + + # Compile step needs to satisfy the build directory that was previously + # prepared during setup. + self._run_cmd([meson, "compile", "-C", self.build_dir]) + + # Install step + self._run_cmd( + [meson, "install", "-C", self.build_dir, "--destdir", self.inst_dir] + ) + + class CMakeBuilder(BuilderBase): MANUAL_BUILD_SCRIPT = """\ #!{sys.executable} diff --git a/build/fbcode_builder/getdeps/manifest.py b/build/fbcode_builder/getdeps/manifest.py index d02cfe83f217f..e329da1ee69ce 100644 --- a/build/fbcode_builder/getdeps/manifest.py +++ b/build/fbcode_builder/getdeps/manifest.py @@ -22,6 +22,7 @@ NopBuilder, OpenSSLBuilder, SqliteBuilder, + SystemdBuilder, ) from .cargo import CargoBuilder from .expr import parse_expr @@ -661,6 +662,18 @@ def create_builder( # noqa:C901 inst_dir, ) + if builder == "systemd": + return SystemdBuilder( + loader, + dep_manifests, + build_options, + ctx, + self, + src_dir, + build_dir, + inst_dir, + ) + if builder == "cargo": return self.create_cargo_builder( loader, diff --git a/build/fbcode_builder/manifests/fboss b/build/fbcode_builder/manifests/fboss index ce9b36109e22e..ec199f83110c1 100644 --- a/build/fbcode_builder/manifests/fboss +++ b/build/fbcode_builder/manifests/fboss @@ -39,6 +39,8 @@ CLI11 exprtk nlohmann-json libgpiod +systemd +range-v3 [shipit.pathmap] fbcode/fboss/github = . diff --git a/build/fbcode_builder/manifests/glog b/build/fbcode_builder/manifests/glog index b5d5fa814cc23..2649eaad18054 100644 --- a/build/fbcode_builder/manifests/glog +++ b/build/fbcode_builder/manifests/glog @@ -24,7 +24,8 @@ HAVE_TR1_UNORDERED_SET=OFF [homebrew] glog -[debs] +# on ubuntu glog brings in liblzma-dev, which in turn breaks watchman tests +[debs.not(distro=ubuntu)] libgoogle-glog-dev [rpms.distro=fedora] diff --git a/build/fbcode_builder/manifests/libunwind b/build/fbcode_builder/manifests/libunwind index 0a4f03bc8fefb..fda19209ad323 100644 --- a/build/fbcode_builder/manifests/libunwind +++ b/build/fbcode_builder/manifests/libunwind @@ -5,7 +5,8 @@ name = libunwind libunwind-devel libunwind -[debs] +# on ubuntu this brings in liblzma-dev, which in turn breaks watchman tests +[debs.not(distro=ubuntu)] libunwind-dev [download] diff --git a/build/fbcode_builder/manifests/range-v3 b/build/fbcode_builder/manifests/range-v3 index f96403c83f8c7..e3778a368a558 100644 --- a/build/fbcode_builder/manifests/range-v3 +++ b/build/fbcode_builder/manifests/range-v3 @@ -9,3 +9,6 @@ sha256 = 376376615dbba43d3bef75aa590931431ecb49eb36d07bb726a19f680c75e20c [build] builder = cmake subdir = range-v3-0.11.0 + +[cmake.defines] +RANGE_V3_EXAMPLES=OFF diff --git a/build/fbcode_builder/manifests/systemd b/build/fbcode_builder/manifests/systemd new file mode 100644 index 0000000000000..0fb2a6f5a5198 --- /dev/null +++ b/build/fbcode_builder/manifests/systemd @@ -0,0 +1,15 @@ +[manifest] +name = systemd + +[rpms] +systemd +systemd-devel + +[download] +url = https://github.com/systemd/systemd/archive/refs/tags/v256.7.tar.gz +sha256 = 896d76ff65c88f5fd9e42f90d152b0579049158a163431dd77cdc57748b1d7b0 + + +[build] +builder = systemd +subdir = systemd-256.7 diff --git a/build/fbcode_builder/manifests/xz b/build/fbcode_builder/manifests/xz index 0b27ad63cc91c..e6c0808ff01f9 100644 --- a/build/fbcode_builder/manifests/xz +++ b/build/fbcode_builder/manifests/xz @@ -1,7 +1,8 @@ [manifest] name = xz -[debs] +# ubuntu's package causes watchman's tests to hang +[debs.not(distro=ubuntu)] liblzma-dev [homebrew] diff --git a/cmake/Agent.cmake b/cmake/Agent.cmake index 597d810c8b502..26f839c653deb 100644 --- a/cmake/Agent.cmake +++ b/cmake/Agent.cmake @@ -97,6 +97,16 @@ target_link_libraries(switchinfo_utils agent_config_cpp2 ) +add_library(voq_utils + fboss/agent/VoqUtils.cpp +) + +target_link_libraries(voq_utils + Folly::folly + switch_config_cpp2 + agent_features +) + target_link_libraries(address_utils network_address_cpp2 Folly::folly @@ -255,6 +265,7 @@ set(core_libs switchinfo_utils stats utils + voq_utils asic_utils fb303::fb303 capture @@ -457,6 +468,7 @@ target_link_libraries(switchid_scope_resolver fboss_error hwswitch_matcher state + switchinfo_utils ) add_library(hwagent diff --git a/cmake/AgentHw.cmake b/cmake/AgentHw.cmake index f48167e06c177..57d4b5cdfc699 100644 --- a/cmake/AgentHw.cmake +++ b/cmake/AgentHw.cmake @@ -34,7 +34,6 @@ add_library(hw_port_fb303_stats fboss/agent/hw/HwBasePortFb303Stats.cpp fboss/agent/hw/HwPortFb303Stats.cpp fboss/agent/hw/HwSysPortFb303Stats.cpp - fboss/agent/hw/oss/HwBasePortFb303Stats.cpp ) add_library(hw_cpu_fb303_stats diff --git a/cmake/AgentHwBenchmarks.cmake b/cmake/AgentHwBenchmarks.cmake index 42ba5560999bf..4686e9bf36b80 100644 --- a/cmake/AgentHwBenchmarks.cmake +++ b/cmake/AgentHwBenchmarks.cmake @@ -24,6 +24,7 @@ add_library(hw_stats_collection_speed target_link_libraries(hw_stats_collection_speed config_factory hw_packet_utils + dsf_config_utils voq_test_utils ecmp_helper mono_agent_ensemble @@ -265,6 +266,23 @@ add_library(hw_rx_slow_path_rate fboss/agent/hw/benchmarks/HwRxSlowPathBenchmark.cpp ) +add_library(hw_rx_slow_path_arp_rate + fboss/agent/hw/benchmarks/HwRxSlowPathArpBenchmark.cpp +) + +target_link_libraries(hw_rx_slow_path_arp_rate + config_factory + pkt_factory + copp_test_utils + hw_asic_utils + hw_copp_utils + hw_test_acl_utils + mono_agent_ensemble + mono_agent_benchmarks + Folly::folly + Folly::follybenchmark +) + target_link_libraries(hw_rx_slow_path_rate config_factory copp_test_utils @@ -285,6 +303,7 @@ add_library(hw_init_and_exit_benchmark_helper target_link_libraries(hw_init_and_exit_benchmark_helper config_factory + dsf_config_utils fabric_test_utils voq_test_utils mono_agent_ensemble @@ -396,6 +415,7 @@ add_library(hw_voq_scale_route_add_speed target_link_libraries(hw_voq_scale_route_add_speed fabric_test_utils route_scale_gen + dsf_config_utils voq_test_utils Folly::folly Folly::follybenchmark @@ -408,19 +428,22 @@ add_library(hw_voq_scale_route_del_speed target_link_libraries(hw_voq_scale_route_del_speed fabric_test_utils route_scale_gen + dsf_config_utils voq_test_utils Folly::folly Folly::follybenchmark ) add_library(hw_switch_reachability_change_speed - fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmark.cpp + fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.cpp + fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeVoqBenchmark.cpp ) target_link_libraries(hw_switch_reachability_change_speed mono_agent_ensemble mono_agent_benchmarks config_factory + dsf_config_utils voq_test_utils fabric_test_utils Folly::folly diff --git a/cmake/AgentHwSaiApi.cmake b/cmake/AgentHwSaiApi.cmake index 7d6fb897b770f..82b1364bdf3c4 100644 --- a/cmake/AgentHwSaiApi.cmake +++ b/cmake/AgentHwSaiApi.cmake @@ -93,6 +93,7 @@ if (SAI_TAJO_IMPL) fboss/agent/hw/sai/api/tajo/BufferApi.cpp fboss/agent/hw/sai/api/tajo/QueueApi.cpp fboss/agent/hw/sai/api/tajo/MirrorApi.cpp + fboss/agent/hw/sai/api/tajo/SystemPortApi.cpp ) find_path(SAI_IMPL_DIR NAMES lib/libsai_impl.a) @@ -107,6 +108,7 @@ elseif (SAI_BRCM_IMPL) fboss/agent/hw/sai/api/bcm/BufferApi.cpp fboss/agent/hw/sai/api/bcm/QueueApi.cpp fboss/agent/hw/sai/api/bcm/MirrorApi.cpp + fboss/agent/hw/sai/api/bcm/SystemPortApi.cpp ) find_path(SAI_IMPL_DIR NAMES lib/libsai_impl.a) @@ -121,6 +123,7 @@ elseif (CHENAB_SAI_SDK) fboss/agent/hw/sai/api/oss/BufferApi.cpp fboss/agent/hw/sai/api/oss/QueueApi.cpp fboss/agent/hw/sai/api/oss/MirrorApi.cpp + fboss/agent/hw/sai/api/oss/SystemPortApi.cpp ) find_path(SAI_IMPL_DIR NAMES lib/libsai_impl.a) diff --git a/cmake/AgentHwSaiHwTest.cmake b/cmake/AgentHwSaiHwTest.cmake index 6069031efabf2..6e3f00fdab7da 100644 --- a/cmake/AgentHwSaiHwTest.cmake +++ b/cmake/AgentHwSaiHwTest.cmake @@ -174,6 +174,7 @@ target_link_libraries(agent_hw_test_thrift_handler agent_hw_test_ctrl_cpp2 sai_ecmp_utils diag_shell + wedge_led_utils ) diff --git a/cmake/AgentHwTest.cmake b/cmake/AgentHwTest.cmake index 687bd2d5101ca..368d39d929f04 100644 --- a/cmake/AgentHwTest.cmake +++ b/cmake/AgentHwTest.cmake @@ -194,10 +194,8 @@ add_fbthrift_cpp_library( ) set(hw_switch_test_srcs - fboss/agent/hw/test/HwEcmpTests.cpp fboss/agent/hw/test/HwTestFabricUtils.cpp fboss/agent/hw/test/HwFlexPortTests.cpp - fboss/agent/hw/test/HwIngressBufferTests.cpp fboss/agent/hw/test/HwEcmpTrunkTests.cpp fboss/agent/hw/test/HwLabelEdgeRouteTest.cpp fboss/agent/hw/test/HwLabelSwitchRouteTest.cpp @@ -212,7 +210,6 @@ set(hw_switch_test_srcs fboss/agent/hw/test/HwVlanTests.cpp fboss/agent/hw/test/HwVerifyPfcConfigInHwTest.cpp fboss/agent/hw/test/HwAclStatTests.cpp - fboss/agent/hw/test/HwPortLedTests.cpp fboss/agent/hw/test/HwPortProfileTests.cpp fboss/agent/hw/test/HwPortStressTests.cpp fboss/agent/hw/test/HwResourceStatsTests.cpp @@ -229,6 +226,7 @@ set(hw_switch_test_srcs fboss/agent/hw/test/dataplane_tests/HwMPLSTests.cpp fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTests.cpp fboss/agent/hw/test/dataplane_tests/HwTeFlowTrafficTests.cpp + fboss/agent/hw/test/dataplane_tests/HwTrafficPfcTests.cpp fboss/agent/hw/test/dataplane_tests/HwProdInvariantHelper.cpp fboss/agent/hw/test/dataplane_tests/HwProdInvariantTests.cpp fboss/agent/hw/test/dataplane_tests/HwPacketSendTests.cpp @@ -272,6 +270,7 @@ target_link_libraries(hw_switch_test config_utils aqm_test_utils copp_test_utils + dsf_config_utils dscp_marking_utils ecmp_dataplane_test_util hw_packet_utils diff --git a/cmake/AgentState.cmake b/cmake/AgentState.cmake index 372be074f7c3a..8a81a99d462b9 100644 --- a/cmake/AgentState.cmake +++ b/cmake/AgentState.cmake @@ -67,6 +67,8 @@ add_library(state fboss/agent/state/MatchAction.cpp fboss/agent/state/Mirror.cpp fboss/agent/state/MirrorMap.cpp + fboss/agent/state/MirrorOnDropReport.cpp + fboss/agent/state/MirrorOnDropReportMap.cpp fboss/agent/state/NdpEntry.cpp fboss/agent/state/NdpResponseEntry.cpp fboss/agent/state/NdpResponseTable.cpp diff --git a/cmake/AgentTestAgentHwTests.cmake b/cmake/AgentTestAgentHwTests.cmake index 6ba78b67b1341..f5c870f78efa6 100644 --- a/cmake/AgentTestAgentHwTests.cmake +++ b/cmake/AgentTestAgentHwTests.cmake @@ -10,11 +10,13 @@ add_library(agent_hw_test_src fboss/agent/test/agent_hw_tests/AgentDscpQueueMappingTests.cpp fboss/agent/test/agent_hw_tests/AgentDeepPacketInspectionTests.cpp fboss/agent/test/agent_hw_tests/AgentDiagShellStressTests.cpp + fboss/agent/test/agent_hw_tests/AgentEcmpTests.cpp fboss/agent/test/agent_hw_tests/AgentEmptyTests.cpp fboss/agent/test/agent_hw_tests/AgentEgressForwardingDiscardCounterTests.cpp fboss/agent/test/agent_hw_tests/AgentRouteOverDifferentAddressFamilyNhopTests.cpp fboss/agent/test/agent_hw_tests/AgentAclInDiscardCounterTests.cpp fboss/agent/test/agent_hw_tests/AgentJumboFramesTests.cpp + fboss/agent/test/agent_hw_tests/AgentIngressBufferTests.cpp fboss/agent/test/agent_hw_tests/AgentInNullRouteDiscardsTest.cpp fboss/agent/test/agent_hw_tests/AgentInTrapDiscardsTest.cpp fboss/agent/test/agent_hw_tests/AgentPacketSendTests.cpp @@ -34,6 +36,7 @@ add_library(agent_hw_test_src fboss/agent/test/agent_hw_tests/AgentVoqSwitchInterruptsTests.cpp fboss/agent/test/agent_hw_tests/AgentFabricSwitchTests.cpp fboss/agent/test/agent_hw_tests/AgentPortBandWidthTests.cpp + fboss/agent/test/agent_hw_tests/AgentPortLedTests.cpp fboss/agent/test/agent_hw_tests/AgentPortTests.cpp fboss/agent/test/agent_hw_tests/AgentPrbsTests.cpp fboss/agent/test/agent_hw_tests/AgentAclCounterTests.cpp @@ -47,6 +50,7 @@ add_library(agent_hw_test_src fboss/agent/test/agent_hw_tests/AgentSflowMirrorTest.cpp fboss/agent/test/agent_hw_tests/AgentAclPriorityTests.cpp fboss/agent/test/agent_hw_tests/AgentTrunkLoadBalancerTests.cpp + fboss/agent/test/agent_hw_tests/AgentTrunkTests.cpp fboss/agent/test/agent_hw_tests/AgentRxReasonTests.cpp fboss/agent/test/agent_hw_tests/AgentRouteScaleTests.cpp fboss/agent/test/agent_hw_tests/MultiNodeAgentVoqSwitchTests.cpp @@ -92,6 +96,7 @@ target_link_libraries(agent_hw_test_src route_scale_gen route_test_utils switch_asics + trunk_test_utils resourcelibutil load_balancer_test_utils l2learn_observer_util @@ -101,6 +106,7 @@ target_link_libraries(agent_hw_test_src sflow_shim_utils pktutil mirror_test_utils + dsf_config_utils voq_test_utils fib_updater ) diff --git a/cmake/AgentTestLinkTests.cmake b/cmake/AgentTestLinkTests.cmake index 91ae7a3b2d638..d3d418db2aaad 100644 --- a/cmake/AgentTestLinkTests.cmake +++ b/cmake/AgentTestLinkTests.cmake @@ -4,12 +4,18 @@ # cmake/FooBar.cmake add_library(link_tests + fboss/agent/test/link_tests/DependencyTest.cpp fboss/agent/test/link_tests/EmptyLinkTest.cpp + fboss/agent/test/link_tests/LacpSanityTests.cpp + fboss/agent/test/link_tests/LinkSanityTests.cpp fboss/agent/test/link_tests/LinkTest.cpp fboss/agent/test/link_tests/LinkTestUtils.cpp - fboss/agent/test/link_tests/LinkSanityTests.cpp - fboss/agent/test/link_tests/PtpTests.cpp + fboss/agent/test/link_tests/MacLearningTests.cpp fboss/agent/test/link_tests/OpticsTest.cpp + fboss/agent/test/link_tests/PhyInfoTest.cpp + fboss/agent/test/link_tests/PrbsTest.cpp + fboss/agent/test/link_tests/PtpTests.cpp + fboss/agent/test/link_tests/SpeedChangeTest.cpp ) target_link_libraries(link_tests @@ -29,6 +35,7 @@ target_link_libraries(link_tests packet_snooper pkt_test_utils link_test_production_features_cpp2 + trunk_utils ${GTEST} ${LIBGMOCK_LIBRARIES} ) diff --git a/cmake/AgentTestUtils.cmake b/cmake/AgentTestUtils.cmake index 20f3c3ed03812..55fef6f84112c 100644 --- a/cmake/AgentTestUtils.cmake +++ b/cmake/AgentTestUtils.cmake @@ -106,6 +106,7 @@ add_library(config_utils target_link_libraries(config_utils agent_features asic_test_utils + voq_test_utils fboss_types Folly::folly platform_mapping @@ -138,6 +139,17 @@ target_link_libraries(qos_test_utils Folly::folly ) +add_library(trunk_test_utils + fboss/agent/test/utils/TrunkTestUtils.cpp +) + +target_link_libraries(trunk_test_utils + agent_hw_test_ctrl_cpp2 + fboss_types + state + agent_ensemble +) + add_library(l2learn_observer_util fboss/agent/test/utils/L2LearningUpdateObserverUtil.cpp ) @@ -402,8 +414,6 @@ add_library(voq_test_utils ) target_link_libraries(voq_test_utils - dsf_config_utils - config_factory fboss_types switchid_scope_resolver switch_config_cpp2 diff --git a/cmake/CliFboss2.cmake b/cmake/CliFboss2.cmake index 16e754e6e108f..059cec3b44d4a 100644 --- a/cmake/CliFboss2.cmake +++ b/cmake/CliFboss2.cmake @@ -374,6 +374,7 @@ add_executable(fboss2 fboss/cli/fboss2/commands/show/lldp/CmdShowLldp.h fboss/cli/fboss2/commands/show/ndp/CmdShowNdp.h fboss/cli/fboss2/commands/show/port/CmdShowPort.h + fboss/cli/fboss2/commands/show/port/CmdShowPort.cpp fboss/cli/fboss2/commands/show/port/CmdShowPortQueue.h fboss/cli/fboss2/commands/show/product/CmdShowProduct.h fboss/cli/fboss2/commands/show/product/CmdShowProductDetails.h diff --git a/cmake/PlatformFanService.cmake b/cmake/PlatformFanService.cmake index 9b7db3618b773..921790c624c19 100644 --- a/cmake/PlatformFanService.cmake +++ b/cmake/PlatformFanService.cmake @@ -28,7 +28,7 @@ add_library(fan_service_lib fboss/platform/fan_service/FsdbSensorSubscriber.cpp fboss/platform/fan_service/PidLogic.cpp fboss/platform/fan_service/SensorData.cpp - fboss/platform/fan_service/Utils.cpp + fboss/platform/fan_service/ConfigValidator.cpp fboss/platform/fan_service/oss/FsdbSensorSubscriber.cpp fboss/platform/fan_service/oss/DataFetcher.cpp ) @@ -52,6 +52,7 @@ target_link_libraries(fan_service_lib fsdb_stream_client fsdb_pub_sub fsdb_flags + range-v3 ) add_executable(fan_service diff --git a/cmake/PlatformPlatformManager.cmake b/cmake/PlatformPlatformManager.cmake index 4b9f75399d265..70dcda7db6e70 100644 --- a/cmake/PlatformPlatformManager.cmake +++ b/cmake/PlatformPlatformManager.cmake @@ -71,9 +71,18 @@ add_library(platform_manager_utils ) target_link_libraries(platform_manager_utils + gpiod_line + ${RE2} + Folly::folly +) + +add_library(platform_manager_config_utils + fboss/platform/platform_manager/ConfigUtils.cpp +) + +target_link_libraries(platform_manager_config_utils platform_manager_config_validator platform_manager_config_cpp2 - gpiod_line platform_config_lib platform_name_lib Folly::folly @@ -140,6 +149,7 @@ target_link_libraries(platform_manager_config_validator platform_manager_i2c_explorer platform_manager_config_cpp2 Folly::folly + range-v3 ) add_executable(platform_manager @@ -155,6 +165,7 @@ add_executable(platform_manager fboss/platform/platform_manager/Utils.cpp fboss/platform/platform_manager/PresenceChecker.cpp fboss/platform/platform_manager/ExplorationErrorMap.cpp + fboss/platform/platform_manager/ConfigUtils.cpp ) target_link_libraries(platform_manager @@ -163,6 +174,7 @@ target_link_libraries(platform_manager platform_fs_utils platform_name_lib platform_utils + platform_manager_config_utils platform_manager_config_cpp2 platform_manager_presence_cpp2 platform_manager_service_cpp2 @@ -171,7 +183,9 @@ target_link_libraries(platform_manager ioctl_smbus_eeprom_reader i2c_ctrl ${LIBGPIOD} + ${SYSTEMD} gpiod_line + range-v3 ) install(TARGETS platform_manager) diff --git a/cmake/PlatformSensorService.cmake b/cmake/PlatformSensorService.cmake index ce9579948f842..243e5d68938a1 100644 --- a/cmake/PlatformSensorService.cmake +++ b/cmake/PlatformSensorService.cmake @@ -37,6 +37,7 @@ target_link_libraries(sensor_service_utils platform_name_lib platform_manager_service_cpp2 platform_manager_config_cpp2 + platform_manager_config_validator ${RE2} ) @@ -54,6 +55,7 @@ add_library(sensor_service_lib target_link_libraries(sensor_service_lib log_thrift_call platform_config_lib + platform_manager_config_validator platform_name_lib platform_utils sensor_service_utils diff --git a/cmake/PlatformSensorServiceTest.cmake b/cmake/PlatformSensorServiceTest.cmake index a9fc1adbd9f0e..511baa69d04b1 100644 --- a/cmake/PlatformSensorServiceTest.cmake +++ b/cmake/PlatformSensorServiceTest.cmake @@ -4,9 +4,9 @@ # cmake/FooBar.cmake add_executable(sensor_service_sw_test - fboss/platform/sensor_service/test/SensorServiceImplTest.cpp - fboss/platform/sensor_service/test/SensorServiceThriftHandlerTest.cpp - fboss/platform/sensor_service/test/TestUtils.cpp + fboss/platform/sensor_service/tests/SensorServiceImplTest.cpp + fboss/platform/sensor_service/tests/SensorServiceThriftHandlerTest.cpp + fboss/platform/sensor_service/tests/TestUtils.cpp ) target_link_libraries(sensor_service_sw_test @@ -18,11 +18,11 @@ target_link_libraries(sensor_service_sw_test install(TARGETS sensor_service_sw_test) -add_executable(sensor_service_utils_tests - fboss/platform/sensor_service/test/UtilsTest.cpp +add_executable(sensor_service_utils_test + fboss/platform/sensor_service/tests/UtilsTest.cpp ) -target_link_libraries(sensor_service_utils_tests +target_link_libraries(sensor_service_utils_test sensor_service_utils ${GTEST} ${LIBGMOCK_LIBRARIES} diff --git a/cmake/PlatformWeutil.cmake b/cmake/PlatformWeutil.cmake index 21d730822cc95..0dd78baf68b7e 100644 --- a/cmake/PlatformWeutil.cmake +++ b/cmake/PlatformWeutil.cmake @@ -43,7 +43,6 @@ target_link_libraries(ioctl_smbus_eeprom_reader ) target_link_libraries(weutil_lib - product_info platform_utils Folly::folly weutil_config_cpp2 diff --git a/cmake/QsfpServiceModule.cmake b/cmake/QsfpServiceModule.cmake index 72044fec3953a..1def592feb134 100644 --- a/cmake/QsfpServiceModule.cmake +++ b/cmake/QsfpServiceModule.cmake @@ -9,10 +9,13 @@ add_library(firmware_upgrader ) target_link_libraries(firmware_upgrader + cmis_cpp2 Folly::folly transceiver_cpp2 firmware_storage fboss_i2c_lib + sff_cpp2 + sff8472_cpp2 ) add_library(qsfp_module STATIC diff --git a/common/stats/DynamicStats.h b/common/stats/DynamicStats.h new file mode 100644 index 0000000000000..41c22ddc8a119 --- /dev/null +++ b/common/stats/DynamicStats.h @@ -0,0 +1,5 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include diff --git a/fboss/agent/AgentFeatures.cpp b/fboss/agent/AgentFeatures.cpp index 652ac6bcc3065..e50afaa57a8c6 100644 --- a/fboss/agent/AgentFeatures.cpp +++ b/fboss/agent/AgentFeatures.cpp @@ -164,3 +164,43 @@ DEFINE_bool( conditional_entropy_cpu_seed_test_only, false, "Enable test-only feature for CPU updating conditional entropy seed"); + +DEFINE_bool( + fix_lossless_mode_per_pg, + false, + "Flag to disruptively update lossless mode per pg"); + +DEFINE_int32(fboss_event_base_queue_limit, 10000, "FbossEventBase queue limit"); + +DEFINE_bool( + dual_stage_rdsw_3q_2q, + false, + "Use platform mapping for dual stage RDSW with 3q and 2q model"); + +DEFINE_bool( + dual_stage_edsw_3q_2q, + false, + "Use platform mapping for dual stage EDSW with 3q and 2q model"); + +DEFINE_bool( + dual_stage_3q_2q_qos, + false, + "Use qos setting for dual stage 3q and 2q model"); + +bool isDualStage3Q2QMode() { + return FLAGS_dual_stage_rdsw_3q_2q || FLAGS_dual_stage_edsw_3q_2q; +} + +bool isDualStage3Q2QQos() { + return isDualStage3Q2QMode() || FLAGS_dual_stage_3q_2q_qos; +} + +DEFINE_bool( + enable_hw_update_protection, + false, + "Enable Neighbor/MAC table hw update failure protection"); + +DEFINE_bool( + fw_drained_unrecoverable_error, + false, + "Enable or disable whether firmware drained(isolation) can be unrecoverable error"); diff --git a/fboss/agent/AgentFeatures.h b/fboss/agent/AgentFeatures.h index 6537cc0bbbf62..9ee0f553a3338 100644 --- a/fboss/agent/AgentFeatures.h +++ b/fboss/agent/AgentFeatures.h @@ -66,3 +66,14 @@ DECLARE_bool(qgroup_guarantee_enable); DECLARE_bool(skip_buffer_reservation); // TODO(zecheng): Remove this once firmware support is ready DECLARE_bool(conditional_entropy_cpu_seed_test_only); +DECLARE_bool(fix_lossless_mode_per_pg); +DECLARE_int32(fboss_event_base_queue_limit); +DECLARE_bool(dual_stage_rdsw_3q_2q); +DECLARE_bool(dual_stage_edsw_3q_2q); +DECLARE_bool(dual_stage_3q_2q_qos); + +bool isDualStage3Q2QMode(); +bool isDualStage3Q2QQos(); +DECLARE_bool(enable_hw_update_protection); + +DECLARE_bool(fw_drained_unrecoverable_error); diff --git a/fboss/agent/AgentPreStartExec.h b/fboss/agent/AgentPreStartExec.h index b58e1ad02e386..878778b246c0e 100644 --- a/fboss/agent/AgentPreStartExec.h +++ b/fboss/agent/AgentPreStartExec.h @@ -7,7 +7,7 @@ namespace facebook::fboss { class AgentDirectoryUtil; -class AgentConfig; +struct AgentConfig; class AgentCommandExecutor; class AgentNetWhoAmI; diff --git a/fboss/agent/ApplyThriftConfig.cpp b/fboss/agent/ApplyThriftConfig.cpp index b07732774d917..34ad9a53e24d7 100644 --- a/fboss/agent/ApplyThriftConfig.cpp +++ b/fboss/agent/ApplyThriftConfig.cpp @@ -33,6 +33,7 @@ #include "fboss/agent/SwitchIdScopeResolver.h" #include "fboss/agent/SwitchInfoUtils.h" #include "fboss/agent/Utils.h" +#include "fboss/agent/VoqUtils.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/if/gen-cpp2/mpls_types.h" #include "fboss/agent/platforms/common/PlatformMapping.h" @@ -55,6 +56,8 @@ #include "fboss/agent/state/IpTunnelMap.h" #include "fboss/agent/state/LabelForwardingInformationBase.h" #include "fboss/agent/state/Mirror.h" +#include "fboss/agent/state/MirrorOnDropReport.h" +#include "fboss/agent/state/MirrorOnDropReportMap.h" #include "fboss/agent/state/NdpResponseTable.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortFlowletConfig.h" @@ -101,9 +104,11 @@ using folly::StringPiece; using std::make_shared; using std::shared_ptr; +using namespace facebook::fboss; namespace { const uint8_t kV6LinkLocalAddrMask{64}; +constexpr auto k2StageEdgePodClusterId = 200; // Only one buffer pool is supported systemwide. Variable to track the name // and validate during a config change. @@ -148,6 +153,55 @@ std::shared_ptr toMultiSwitchMap( return multiMap; } +bool haveParallelLinksToInterfaceNodes( + const cfg::SwitchConfig* cfg, + const std::vector& localFabricSwitchIds, + const std::unordered_map>& + switchNameToSwitchIds, + SwitchIdScopeResolver& scopeResolver, + const PlatformMapping* platformMapping) { + for (const auto& fabricSwitchId : localFabricSwitchIds) { + // Determine parallel links on VD level - there are two VDs per R3 ASIC + std::unordered_map> vd2VoqNeighbors; + for (const auto& port : *cfg->ports()) { + // Only process ports belonging to one switchId + if (scopeResolver.scope(port).has(SwitchID(fabricSwitchId)) && + port.expectedNeighborReachability()->size() > 0) { + auto neighborRemoteSwitchId = + getRemoteSwitchID(cfg, port, switchNameToSwitchIds); + const auto& neighborDsfNodeIter = + cfg->dsfNodes()->find(neighborRemoteSwitchId); + CHECK(neighborDsfNodeIter != cfg->dsfNodes()->end()); + if (*neighborDsfNodeIter->second.type() == + cfg::DsfNodeType::INTERFACE_NODE) { + CHECK(port.name().has_value()); + auto localVirtualDeviceId = + platformMapping->getVirtualDeviceID(*port.name()); + if (!localVirtualDeviceId.has_value()) { + throw FbossError( + "Unable to find virtual device id for port: ", + *port.logicalID(), + " virtual device"); + } + + if (vd2VoqNeighbors.find(localVirtualDeviceId.value()) == + vd2VoqNeighbors.end()) { + vd2VoqNeighbors.insert( + {localVirtualDeviceId.value(), + std::unordered_set()}); + } + auto& voqNeighbors = vd2VoqNeighbors[localVirtualDeviceId.value()]; + const auto& [neighborName, _] = getExpectedNeighborAndPortName(port); + if (voqNeighbors.find(neighborName) != voqNeighbors.end()) { + return true; + } + voqNeighbors.insert(neighborName); + } + } + } + } + return false; +}; } // anonymous namespace namespace facebook::fboss { @@ -352,9 +406,11 @@ class ThriftConfigApplier { const std::set& portDescs); std::shared_ptr updateAclTableGroup( cfg::AclStage aclStage, + const cfg::AclTableGroup& cfgAclTableGroup, const std::shared_ptr& origAclTableGroup); std::shared_ptr updateAclTableGroups(); - flat_map getAllAclsByName(); + flat_map getAllAclsByName( + const cfg::AclTableGroup& cfgAclTableGroup); void checkTrafficPolicyAclsExistInConfig( const cfg::TrafficPolicyConfig& policy, flat_map aclByName); @@ -454,6 +510,13 @@ class ThriftConfigApplier { std::shared_ptr updateForwardingInformationBaseContainers(); + std::shared_ptr updateMirrorOnDropReports(); + std::shared_ptr createMirrorOnDropReport( + const cfg::MirrorOnDropReport* config); + std::shared_ptr updateMirrorOnDropReport( + const std::shared_ptr& orig, + const cfg::MirrorOnDropReport* config); + std::shared_ptr createLabelForwardingEntry( MplsLabel label, LabelNextHopEntry::Action action, @@ -755,6 +818,17 @@ shared_ptr ThriftConfigApplier::run() { } } + // MirrorOnDrop must come after interfaces, since it looks up interface IPs. + { + auto newMirrorOnDropReports = updateMirrorOnDropReports(); + if (newMirrorOnDropReports) { + new_->resetMirrorOnDropReports( + toMultiSwitchMap( + newMirrorOnDropReports, scopeResolver_)); + changed = true; + } + } + { LoadBalancerConfigApplier loadBalancerConfigApplier( orig_->getLoadBalancers(), cfg_->get_loadBalancers()); @@ -954,7 +1028,11 @@ void ThriftConfigApplier::processUpdatedDsfNodes() { asicCore = 1; break; case cfg::AsicType::ASIC_TYPE_JERICHO3: - asicCore = 441; + if (isDualStage3Q2QMode()) { + asicCore = 447; + } else { + asicCore = 441; + } break; case cfg::AsicType::ASIC_TYPE_CHENAB: case cfg::AsicType::ASIC_TYPE_TRIDENT2: @@ -993,22 +1071,26 @@ void ThriftConfigApplier::processUpdatedDsfNodes() { auto isInterfaceNode = [](const std::shared_ptr& node) { return node->getType() == cfg::DsfNodeType::INTERFACE_NODE; }; - auto getDsfNodeAsic = - [&isInterfaceNode](const std::shared_ptr& node) { - CHECK(isInterfaceNode(node)) - << " Only expect to be called for Interface nodes"; - auto mac = node->getMac() ? *node->getMac() : folly::MacAddress(); - CHECK(!node->getSystemPortRanges().systemPortRanges()->empty()); - return HwAsic::makeAsic( - node->getAsicType(), - cfg::SwitchType::VOQ, - static_cast(node->getSwitchId()), - 0, /* dummy switchIndex*/ - // TODO - get rid of system port range in HwAsic - *node->getSystemPortRanges().systemPortRanges()->begin(), - mac, - std::nullopt); - }; + auto getDsfNodeAsic = [&isInterfaceNode]( + const std::shared_ptr& node) { + CHECK(isInterfaceNode(node)) + << " Only expect to be called for Interface nodes"; + CHECK(node->getLocalSystemPortOffset().has_value()); + CHECK(node->getGlobalSystemPortOffset().has_value()); + CHECK(node->getInbandPortId().has_value()); + CHECK(node->getMac().has_value()); + cfg::SwitchInfo switchInfo; + switchInfo.asicType() = node->getAsicType(); + switchInfo.switchType() = cfg::SwitchType::VOQ; + switchInfo.switchIndex() = 0; /* dummy switchIndex*/ + switchInfo.switchMac() = node->getMac()->toString(); + switchInfo.systemPortRanges() = node->getSystemPortRanges(); + switchInfo.localSystemPortOffset() = *node->getLocalSystemPortOffset(); + switchInfo.globalSystemPortOffset() = *node->getGlobalSystemPortOffset(); + switchInfo.inbandPortId() = *node->getInbandPortId(); + return HwAsic::makeAsic( + static_cast(node->getSwitchId()), switchInfo, std::nullopt); + }; auto processLoopbacks = [&](const std::shared_ptr& node, const HwAsic* dsfNodeAsic) { auto recyclePortId = getInbandSysPortId(node); @@ -1077,12 +1159,16 @@ void ThriftConfigApplier::processUpdatedDsfNodes() { std::make_optional(RemoteSystemPortType::STATIC_ENTRY)); sysPort->setSwitchId(node->getSwitchId()); sysPort->setName(getRecyclePortName(node)); - const auto& recyclePortInfo = dsfNodeAsic->getRecyclePortInfo(); + const auto& recyclePortInfo = dsfNodeAsic->getRecyclePortInfo( + isDualStage3Q2QMode() && node->getClusterId() >= k2StageEdgePodClusterId + ? HwAsic::InterfaceNodeRole::DUAL_STAGE_EDGE_NODE + : HwAsic::InterfaceNodeRole::IN_CLUSTER_NODE); + CHECK_EQ(recyclePortInfo.inbandPortId, *node->getInbandPortId()); sysPort->setCoreIndex(recyclePortInfo.coreId); sysPort->setCorePortIndex(recyclePortInfo.corePortIndex); - sysPort->setSpeedMbps(recyclePortInfo.speedMbps); // 10G - // TODO(daiweix): do not hardcode 8 - sysPort->setNumVoqs(8); + sysPort->setSpeedMbps(recyclePortInfo.speedMbps); + sysPort->setNumVoqs( + getNumVoqs(cfg::PortType::RECYCLE_PORT, cfg::Scope::GLOBAL)); sysPort->setScope(cfg::Scope::GLOBAL); // TODO(daiweix): use voq config of rcy ports, hardcode rcy portID 1 for now sysPort->resetPortQueues(getVoqConfig(PortID(1))); @@ -1145,45 +1231,44 @@ void ThriftConfigApplier::processReachabilityGroup( const std::vector& localFabricSwitchIds) { std::unordered_map> switchNameToSwitchIds; - // TODO(zecheng): Update to look at DsfNode layer config once available. - - // To determine if Dsf cluster is single stage: - // If there's more than one clusterIds in dsfNode map, it's in multi-stage. - std::unordered_set clusterIds; - for (const auto& [_, dsfNodeMap] : std::as_const(*new_->getDsfNodes())) { - for (const auto& [_, dsfNode] : std::as_const(*dsfNodeMap)) { - std::string nodeName = dsfNode->getName(); - auto iter = switchNameToSwitchIds.find(nodeName); - if (iter != switchNameToSwitchIds.end()) { - iter->second.push_back(dsfNode->getID()); - } else { - switchNameToSwitchIds[nodeName] = {dsfNode->getID()}; - } - if (auto clusterId = dsfNode->getClusterId()) { - clusterIds.insert(*clusterId); - } + bool isSingleStageCluster = true; + for (const auto& [_, dsfNode] : *cfg_->dsfNodes()) { + std::string nodeName = *dsfNode.name(); + auto iter = switchNameToSwitchIds.find(nodeName); + if (iter != switchNameToSwitchIds.end()) { + iter->second.push_back(*dsfNode.switchId()); + } else { + switchNameToSwitchIds[nodeName] = { + static_cast(*dsfNode.switchId())}; + } + if (auto fabricLevel = dsfNode.fabricLevel()) { + isSingleStageCluster &= (fabricLevel.value() < 2); } } - bool isSingleStageCluster = clusterIds.size() <= 1; - - auto updateReachabilityGroupListSize = - [&](const auto fabricSwitchId, const auto reachabilityGroupListSize) { - auto matcher = HwSwitchMatcher(std::unordered_set( - {static_cast(fabricSwitchId)})); - if (new_->getSwitchSettings() - ->getNodeIf(matcher.matcherString()) - ->getReachabilityGroupListSize() != reachabilityGroupListSize) { - auto newMultiSwitchSettings = new_->getSwitchSettings()->clone(); - auto newSwitchSettings = - newMultiSwitchSettings->getNodeIf(matcher.matcherString()) - ->clone(); - newSwitchSettings->setReachabilityGroupListSize( - reachabilityGroupListSize); - newMultiSwitchSettings->updateNode( - matcher.matcherString(), newSwitchSettings); - new_->resetSwitchSettings(newMultiSwitchSettings); - } - }; + + auto updateReachabilityGroups = [&](const auto fabricSwitchId, + const auto& + destinationId2ReachabilityGroup) { + std::vector reachabilityGroups; + for (const auto& [_, groupId] : destinationId2ReachabilityGroup) { + reachabilityGroups.push_back(groupId); + } + + auto matcher = HwSwitchMatcher( + std::unordered_set({static_cast(fabricSwitchId)})); + auto currReachabilityGroups = new_->getSwitchSettings() + ->getNodeIf(matcher.matcherString()) + ->getReachabilityGroups(); + if (currReachabilityGroups != reachabilityGroups) { + auto newMultiSwitchSettings = new_->getSwitchSettings()->clone(); + auto newSwitchSettings = + newMultiSwitchSettings->getNodeIf(matcher.matcherString())->clone(); + newSwitchSettings->setReachabilityGroups(reachabilityGroups); + newMultiSwitchSettings->updateNode( + matcher.matcherString(), newSwitchSettings); + new_->resetSwitchSettings(newMultiSwitchSettings); + } + }; bool parallelVoqLinks = haveParallelLinksToInterfaceNodes( cfg_, @@ -1196,6 +1281,12 @@ void ThriftConfigApplier::processReachabilityGroup( auto newPortMap = new_->getPorts()->modify(&new_); for (const auto& fabricSwitchId : localFabricSwitchIds) { std::unordered_map destinationId2ReachabilityGroup; + + // For reachability groups with parallel links, use index 1-128. + // Else use index for single link groups in range 129-256 + int nextParallelLinkGroup = 1; + int nextSingleLinkGroup = 129; + for (const auto& portCfg : *cfg_->ports()) { if (scopeResolver_.scope(portCfg).has(SwitchID(fabricSwitchId)) && portCfg.expectedNeighborReachability()->size() > 0) { @@ -1205,26 +1296,24 @@ void ThriftConfigApplier::processReachabilityGroup( new_->getDsfNodes()->getNode(neighborRemoteSwitchId); int destinationId; - // For parallel VOQ links, assign links reaching the same VOQ - // switch. - if (parallelVoqLinks && - neighborDsfNode->getType() == cfg::DsfNodeType::INTERFACE_NODE) { + if (neighborDsfNode->getType() == cfg::DsfNodeType::INTERFACE_NODE) { destinationId = neighborRemoteSwitchId; - } else if (neighborDsfNode->getClusterId() == std::nullopt) { - // Assign links based on cluster ID. Note that in dual stage, - // FE2 has no cluster ID: use -1 for grouping purpose. - CHECK_EQ( - static_cast(cfg::DsfNodeType::FABRIC_NODE), - static_cast(neighborDsfNode->getType())); - destinationId = -1; } else { - destinationId = neighborDsfNode->getClusterId().value(); + // Fabric node links: assign links based on cluster ID. Note that in + // dual stage, FE2 has no cluster ID: use -1 for grouping purpose. + destinationId = neighborDsfNode->getClusterId().value_or(-1); } + bool singleLinkGroup = + neighborDsfNode->getType() == cfg::DsfNodeType::INTERFACE_NODE && + !parallelVoqLinks; + int& nextGroupId = + singleLinkGroup ? nextSingleLinkGroup : nextParallelLinkGroup; auto [it, inserted] = destinationId2ReachabilityGroup.insert( - {destinationId, destinationId2ReachabilityGroup.size() + 1}); + {destinationId, nextGroupId}); auto reachabilityGroupId = it->second; if (inserted) { + nextGroupId++; XLOG(DBG2) << "Create new reachability group " << reachabilityGroupId << " towards node " << neighborDsfNode->getName() << " with switchId " @@ -1241,8 +1330,7 @@ void ThriftConfigApplier::processReachabilityGroup( newPort->setReachabilityGroupId(reachabilityGroupId); } } - updateReachabilityGroupListSize( - fabricSwitchId, destinationId2ReachabilityGroup.size()); + updateReachabilityGroups(fabricSwitchId, destinationId2ReachabilityGroup); } } } @@ -1388,15 +1476,11 @@ void ThriftConfigApplier::processInterfaceForPortForVoqSwitches( cfg_->switchSettings()->switchIdToSwitchInfo()->find(switchId); CHECK(switchInfoItr != cfg_->switchSettings()->switchIdToSwitchInfo()->end()); const auto& switchInfo = switchInfoItr->second; - CHECK(dsfNodeItr->second.systemPortRange().has_value()); CHECK(switchInfo.portIdRange().has_value()); CHECK(!switchInfo.systemPortRanges()->systemPortRanges()->empty()); CHECK(switchInfo.localSystemPortOffset().has_value()); CHECK(switchInfo.globalSystemPortOffset().has_value()); CHECK(switchInfo.inbandPortId().has_value()); - auto systemPortRange = dsfNodeItr->second.systemPortRange(); - auto portIdRange = switchInfoItr->second.portIdRange(); - CHECK(systemPortRange); for (const auto& portCfg : *cfg_->ports()) { auto portType = *portCfg.portType(); auto portID = PortID(*portCfg.logicalID()); @@ -1407,29 +1491,11 @@ void ThriftConfigApplier::processInterfaceForPortForVoqSwitches( case cfg::PortType::RECYCLE_PORT: case cfg::PortType::EVENTOR_PORT: case cfg::PortType::MANAGEMENT_PORT: { - /* - * System port is 1:1 with every interface and recycle port. - * Interface is 1:1 with system port. - * InterfaceID is chosen to be the same as systemPortID. Thus: - * For multi ASIC switches, the the port ID range minimum must - * taken into account while computing the interface ID. - * - * For eg: - * - * ---------------------------------------------- - * | config | asic 0 | asic 1 | - * ---------------------------------------------- - * | sys port range | 100-199 | 200-299 | - * ---------------------------------------------- - * | port range | 0-2047 | 2048-4096 | - * ---------------------------------------------- - * - * Interface of recycle port on asic 1 is 201. - * Port ID of a recycle port in platform mapping will be 2049 - * Interface ID of recycle port = 200 + 2049 - 2048 = 201 - */ - auto interfaceID = SystemPortID{ - *systemPortRange->minimum() + portID - *portIdRange->minimum()}; + auto interfaceID = getSystemPortID( + portID, + *portCfg.scope(), + *cfg_->switchSettings()->switchIdToSwitchInfo(), + SwitchID(switchId)); port2InterfaceId_[portID].push_back(interfaceID); } break; case cfg::PortType::FABRIC_PORT: @@ -1576,9 +1642,6 @@ void ThriftConfigApplier::updateVlanInterfaces(const Interface* intf) { shared_ptr ThriftConfigApplier::updateSystemPorts( const std::shared_ptr& ports, const std::shared_ptr& multiSwitchSettings) { - // TODO(daiweix): do not hardcode 8 - const auto kNumVoqs = 8; - static const std::set kCreateSysPortsFor = { cfg::PortType::INTERFACE_PORT, cfg::PortType::RECYCLE_PORT, @@ -1617,7 +1680,8 @@ shared_ptr ThriftConfigApplier::updateSystemPorts( sysPort->setCorePortIndex( platformPort.mapping()->attachedCorePortIndex().value()); sysPort->setSpeedMbps(static_cast(port.second->getSpeed())); - sysPort->setNumVoqs(kNumVoqs); + sysPort->setNumVoqs( + getNumVoqs(port.second->getPortType(), port.second->getScope())); sysPort->setQosPolicy(port.second->getQosPolicy()); sysPort->resetPortQueues(getVoqConfig(port.second->getID())); // TODO(daiweix): remove this CHECK_EQ after verifying scope config is @@ -3072,23 +3136,30 @@ std::shared_ptr ThriftConfigApplier::updateAclTableGroups() { auto origAclTableGroups = orig_->getAclTableGroups(); AclTableGroupMap::NodeContainer newAclTableGroups; - if (!cfg_->aclTableGroup()) { + auto updateAclTableGroupsInternal = + [this, origAclTableGroups, &newAclTableGroups]( + const cfg::AclTableGroup& cfgAclTableGroup) { + auto origAclTableGroup = + origAclTableGroups->getNodeIf(*cfgAclTableGroup.stage()); + auto newAclTableGroup = updateAclTableGroup( + *cfgAclTableGroup.stage(), cfgAclTableGroup, origAclTableGroup); + return updateMap( + &newAclTableGroups, origAclTableGroup, newAclTableGroup); + }; + + bool changed = false; + if (!cfg_->aclTableGroup() && + (!cfg_->aclTableGroups() || cfg_->aclTableGroups()->empty())) { throw FbossError( "ACL Table Group must be specified if Multiple ACL Table support is enabled"); + } else if (auto cfgAclTableGroup = cfg_->aclTableGroup()) { + changed = updateAclTableGroupsInternal(*cfgAclTableGroup); + } else { + for (const auto& entry : *cfg_->aclTableGroups()) { + changed = updateAclTableGroupsInternal(entry); + } } - if (cfg_->aclTableGroup()->stage() != cfg::AclStage::INGRESS) { - throw FbossError("Only ACL Stage INGRESS is supported"); - } - - auto origAclTableGroup = - origAclTableGroups->getNodeIf(cfg::AclStage::INGRESS); - - auto newAclTableGroup = - updateAclTableGroup(*cfg_->aclTableGroup()->stage(), origAclTableGroup); - auto changed = - updateMap(&newAclTableGroups, origAclTableGroup, newAclTableGroup); - if (!changed) { return nullptr; } @@ -3098,12 +3169,12 @@ std::shared_ptr ThriftConfigApplier::updateAclTableGroups() { std::shared_ptr ThriftConfigApplier::updateAclTableGroup( cfg::AclStage aclStage, + const cfg::AclTableGroup& cfgAclTableGroup, const std::shared_ptr& origAclTableGroup) { auto newAclTableMap = std::make_shared(); bool changed = false; int numExistingTablesProcessed = 0; - - auto aclByName = getAllAclsByName(); + auto aclByName = getAllAclsByName(cfgAclTableGroup); // Check for controlPlane traffic acls if (cfg_->cpuTrafficPolicy() && cfg_->cpuTrafficPolicy()->trafficPolicy()) { checkTrafficPolicyAclsExistInConfig( @@ -3115,7 +3186,7 @@ std::shared_ptr ThriftConfigApplier::updateAclTableGroup( } // For each table in the config, update the table entries and priority - for (const auto& aclTable : *cfg_->aclTableGroup()->aclTables()) { + for (const auto& aclTable : *cfgAclTableGroup.aclTables()) { auto newTable = updateAclTable(aclStage, aclTable, &numExistingTablesProcessed); if (newTable) { @@ -3141,17 +3212,18 @@ std::shared_ptr ThriftConfigApplier::updateAclTableGroup( } auto newAclTableGroup = - std::make_shared(*cfg_->aclTableGroup()->stage()); + std::make_shared(*cfgAclTableGroup.stage()); newAclTableGroup->setAclTableMap(newAclTableMap); - newAclTableGroup->setName(*cfg_->aclTableGroup()->name()); + newAclTableGroup->setName(*cfgAclTableGroup.name()); return newAclTableGroup; } flat_map -ThriftConfigApplier::getAllAclsByName() { +ThriftConfigApplier::getAllAclsByName( + const cfg::AclTableGroup& cfgAclTableGroup) { flat_map aclByName; - for (const auto& aclTable : *cfg_->aclTableGroup()->aclTables()) { + for (const auto& aclTable : *cfgAclTableGroup.aclTables()) { auto aclEntries = *(aclTable.aclEntries()); folly::gen::from(aclEntries) | folly::gen::map([](const cfg::AclEntry& acl) { @@ -3770,7 +3842,10 @@ std::shared_ptr ThriftConfigApplier::updateInterfaces() { auto sysPort = new_->getSystemPorts()->getNode(SystemPortID(*interfaceCfg.intfID())); auto dsfNode = cfg_->dsfNodes()->find(sysPort->getSwitchId())->second; - if (!withinRange( + // TODO - [2-stage DSF] Consider adding local sys port ranges + // to DsfNodeConfig as well. + if (interfaceCfg.scope() == cfg::Scope::GLOBAL && + !withinRange( *dsfNode.systemPortRanges(), InterfaceID(*interfaceCfg.intfID()))) { throw FbossError( @@ -3781,6 +3856,10 @@ std::shared_ptr ThriftConfigApplier::updateInterfaces() { } CHECK_EQ((int)sysPort->getScope(), (int)(*interfaceCfg.scope())); } + if (interfaceCfg.type() == cfg::InterfaceType::PORT) { + // TODO(Chenab): Support port router interface + throw FbossError("Port router interface is not supported yet"); + } if (origIntf) { newIntf = updateInterface(origIntf, &interfaceCfg, newAddrs); ++numExistingProcessed; @@ -4554,6 +4633,40 @@ shared_ptr ThriftConfigApplier::updateSwitchSettings( switchSettingsChange = true; } + std::optional newLinkFlowControlCreditThreshold; + if (cfg_->switchSettings()->linkFlowControlCreditThreshold()) { + newLinkFlowControlCreditThreshold = + *cfg_->switchSettings()->linkFlowControlCreditThreshold(); + } + if (newLinkFlowControlCreditThreshold != + origSwitchSettings->getLinkFlowControlCreditThreshold()) { + newSwitchSettings->setLinkFlowControlCreditThreshold( + newLinkFlowControlCreditThreshold); + switchSettingsChange = true; + } + + std::optional newVoqDramBoundThreshold; + if (cfg_->switchSettings()->voqDramBoundThreshold()) { + newVoqDramBoundThreshold = *cfg_->switchSettings()->voqDramBoundThreshold(); + } + if (newVoqDramBoundThreshold != + origSwitchSettings->getVoqDramBoundThreshold()) { + newSwitchSettings->setVoqDramBoundThreshold(newVoqDramBoundThreshold); + switchSettingsChange = true; + } + + std::optional newConditionalEntropyRehashPeriodUS; + if (cfg_->switchSettings()->conditionalEntropyRehashPeriodUS()) { + newConditionalEntropyRehashPeriodUS = + *cfg_->switchSettings()->conditionalEntropyRehashPeriodUS(); + } + if (newConditionalEntropyRehashPeriodUS != + origSwitchSettings->getConditionalEntropyRehashPeriodUS()) { + newSwitchSettings->setConditionalEntropyRehashPeriodUS( + newConditionalEntropyRehashPeriodUS); + switchSettingsChange = true; + } + if (origSwitchSettings->getSwitchDrainState() != *cfg_->switchSettings()->switchDrainState()) { auto numVoqSwtitches = @@ -4716,6 +4829,15 @@ shared_ptr ThriftConfigApplier::updateSwitchSettings( } } + std::optional newFirmwarePath; + if (cfg_->switchSettings()->firmwarePath()) { + newFirmwarePath = *cfg_->switchSettings()->firmwarePath(); + } + if (newFirmwarePath != origSwitchSettings->getFirmwarePath()) { + newSwitchSettings->setFirmwarePath(newFirmwarePath); + switchSettingsChange = true; + } + if (switchSettingsChange) { return newSwitchSettings; } @@ -4805,6 +4927,7 @@ shared_ptr ThriftConfigApplier::updateControlPlane() { // check whether queue setting changed QueueConfig newQueues; + QueueConfig newVoqs; auto switchIds = scopeResolver_.scope(origCPU).switchIds(); CHECK(scopeResolver_.hasL3()); CHECK_GT(switchIds.size(), 0); @@ -4819,6 +4942,16 @@ shared_ptr ThriftConfigApplier::updateControlPlane() { qosMap); newQueues.insert( newQueues.begin(), tmpPortQueues.begin(), tmpPortQueues.end()); + if (cfg_->cpuVoqs()) { + std::vector cfgCpuVoqs = *cfg_->cpuVoqs(); + auto tmpPortVoqs = updatePortQueues( + origCPU->getVoqsConfig(), + cfgCpuVoqs, + getNumVoqs(cfg::PortType::CPU_PORT, cfg::Scope::LOCAL), + streamType, + qosMap); + newVoqs.insert(newVoqs.begin(), tmpPortVoqs.begin(), tmpPortVoqs.end()); + } } bool queuesUnchanged = false; if (origCPU->getQueues()->size() > 0) { @@ -4831,13 +4964,25 @@ shared_ptr ThriftConfigApplier::updateControlPlane() { } } } + bool voqsUnchanged = (newVoqs.size() == origCPU->getVoqs()->size()); + if (origCPU->getVoqs()->size() > 0) { + /* on cold boot original queues are 0 */ + for (int i = 0; i < newVoqs.size() && voqsUnchanged; i++) { + if (*(newVoqs.at(i)) != *(origCPU->getVoqs()->at(i))) { + voqsUnchanged = false; + break; + } + } + } - if (queuesUnchanged && qosPolicyUnchanged && rxReasonToQueueUnchanged) { + if (queuesUnchanged && voqsUnchanged && qosPolicyUnchanged && + rxReasonToQueueUnchanged) { return nullptr; } auto newCPU = origCPU->clone(); newCPU->resetQueues(newQueues); + newCPU->resetVoqs(newVoqs); newCPU->resetQosPolicy(qosPolicy); newCPU->resetRxReasonToQueue(newRxReasonToQueue); auto newMultiSwitchControlPlane = std::make_shared(); @@ -5023,6 +5168,16 @@ std::shared_ptr ThriftConfigApplier::createMirror( "Must provide either egressPort or tunnel with endpoint ip for mirror"); } + for (auto& switchIdAndSwitchInfo : + *cfg_->switchSettings()->switchIdToSwitchInfo()) { + if (switchIdAndSwitchInfo.second.asicType() == + cfg::AsicType::ASIC_TYPE_JERICHO3 && + !mirrorConfig->get_truncate()) { + throw FbossError( + "Jericho3 asic must have truncation enabled on mirror sessions"); + } + } + std::optional mirrorEgressPort; std::optional destinationIp; std::optional srcIp; @@ -5158,6 +5313,98 @@ std::shared_ptr ThriftConfigApplier::updateMirror( return newMirror; } +std::shared_ptr +ThriftConfigApplier::updateMirrorOnDropReports() { + const auto& origReports = orig_->getMirrorOnDropReports(); + auto newReports = std::make_shared(); + + bool changed = false; + size_t numExistingProcessed = 0; + for (const auto& config : *cfg_->mirrorOnDropReports()) { + auto origReport = origReports->getNodeIf(*config.name()); + std::shared_ptr newReport; + if (origReport) { + newReport = updateMirrorOnDropReport(origReport, &config); + ++numExistingProcessed; + } else { + newReport = createMirrorOnDropReport(&config); + } + changed |= updateThriftMapNode(newReports.get(), origReport, newReport); + } + + if (numExistingProcessed != origReports->numNodes()) { + // Some existing MirrorOnDropReports were removed. + CHECK_LT(numExistingProcessed, origReports->numNodes()); + changed = true; + } + + if (!changed) { + return nullptr; + } + + auto newReportWithSwitchIds = std::make_shared(); + for (auto& switchIdAndSwitchInfo : + *cfg_->switchSettings()->switchIdToSwitchInfo()) { + if (switchIdAndSwitchInfo.second.switchType() != cfg::SwitchType::VOQ && + switchIdAndSwitchInfo.second.switchType() != cfg::SwitchType::NPU) { + continue; + } + for (auto& mapEntry : std::as_const(*newReports)) { + auto newReport = mapEntry.second->clone(); + newReportWithSwitchIds->insert(mapEntry.first, std::move(newReport)); + } + } + + return newReportWithSwitchIds; +} + +std::shared_ptr +ThriftConfigApplier::createMirrorOnDropReport( + const cfg::MirrorOnDropReport* config) { + auto switchId = getAnyVoqSwitchId(); + if (!switchId.has_value()) { + throw FbossError("No VOQ switchId found"); + } + auto systemPortId = getInbandSystemPortID(new_, *switchId); + + // Find an IP address of the switch. + auto collectorIp = folly::IPAddress(*config->collectorIp()); + auto localSrcIp = collectorIp.isV4() + ? folly::IPAddress(getSwitchIntfIP(new_, InterfaceID(systemPortId))) + : folly::IPAddress(getSwitchIntfIPv6(new_, InterfaceID(systemPortId))); + + uint8_t dscp = *config->dscp(); + std::optional agingIntervalUsecs; + if (config->agingIntervalUsecs().has_value()) { + agingIntervalUsecs = config->agingIntervalUsecs().value(); + } + + return std::make_shared( + *config->name(), + PortID(*config->mirrorPortId()), + localSrcIp, + *config->localSrcPort(), + collectorIp, + *config->collectorPort(), + *config->mtu(), + *config->truncateSize(), + dscp, + agingIntervalUsecs, + getLocalMacAddress().toString(), + utility::getFirstInterfaceMac(new_).toString()); +} + +std::shared_ptr +ThriftConfigApplier::updateMirrorOnDropReport( + const std::shared_ptr& orig, + const cfg::MirrorOnDropReport* config) { + auto newReport = createMirrorOnDropReport(config); + if (*newReport == *orig) { + return nullptr; + } + return newReport; +} + std::shared_ptr ThriftConfigApplier::updateForwardingInformationBaseContainers() { auto origForwardingInformationBaseMap = orig_->getFibs(); diff --git a/fboss/agent/AsicUtils.cpp b/fboss/agent/AsicUtils.cpp index 44a5f7877cb40..b0151daafaa20 100644 --- a/fboss/agent/AsicUtils.cpp +++ b/fboss/agent/AsicUtils.cpp @@ -19,52 +19,29 @@ const HwAsic& getHwAsicForAsicType(const cfg::AsicType& asicType) { * allows us to use static hwAsic objects here. */ int64_t switchId = 0; - int16_t switchIndex = 0; - std::optional systemPortRange = std::nullopt; - folly::MacAddress mac("02:00:00:00:0F:0B"); + cfg::SwitchInfo switchInfo; + switchInfo.switchMac() = "02:00:00:00:0F:0B"; + switchInfo.switchIndex() = 0; switch (asicType) { case cfg::AsicType::ASIC_TYPE_JERICHO2: { - static Jericho2Asic jericho2Asic{ - cfg::SwitchType::VOQ, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt}; + switchInfo.switchType() = cfg::SwitchType::VOQ; + static Jericho2Asic jericho2Asic{switchId, switchInfo}; return jericho2Asic; } case cfg::AsicType::ASIC_TYPE_JERICHO3: { - static Jericho3Asic jericho3Asic{ - cfg::SwitchType::VOQ, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt}; - + switchInfo.switchType() = cfg::SwitchType::VOQ; + static Jericho3Asic jericho3Asic{switchId, switchInfo}; return jericho3Asic; } case cfg::AsicType::ASIC_TYPE_RAMON: { - static RamonAsic ramonAsic{ - cfg::SwitchType::FABRIC, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt}; - + switchInfo.switchType() = cfg::SwitchType::FABRIC; + static RamonAsic ramonAsic{switchId, switchInfo}; return ramonAsic; } case cfg::AsicType::ASIC_TYPE_RAMON3: { - static Ramon3Asic ramon3Asic{ - cfg::SwitchType::FABRIC, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt}; - + switchInfo.switchType() = cfg::SwitchType::FABRIC; + static Ramon3Asic ramon3Asic{switchId, switchInfo}; return ramon3Asic; } case cfg::AsicType::ASIC_TYPE_FAKE: diff --git a/fboss/agent/BUCK b/fboss/agent/BUCK index 6914bf80711cb..f01d2fc9aa6a9 100644 --- a/fboss/agent/BUCK +++ b/fboss/agent/BUCK @@ -392,6 +392,20 @@ cpp_library( ], ) +cpp_library( + name = "voq_utils", + srcs = [ + "VoqUtils.cpp", + ], + headers = [ + "VoqUtils.h", + ], + exported_deps = [ + ":agent_features", + ":switch_config-cpp2-types", + ], +) + cpp_library( name = "address_utils", headers = [ @@ -583,6 +597,7 @@ cpp_library( ":switchid_scope_resolver", ":switchinfo_utils", ":utils", + ":voq_utils", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/if:mpls-cpp2-types", "//fboss/agent/platforms/common:platform_mapping", @@ -616,6 +631,22 @@ cpp_library( ], ) +cpp_library( + name = "fsdb_adapted_sub_manager", + srcs = [ + "FsdbAdaptedSubManager.cpp", + ], + headers = [ + "FsdbAdaptedSubManager.h", + ], + exported_deps = [ + "//fboss/agent/state:state", + "//fboss/fsdb/client:fsdb_sub_manager", + "//fboss/fsdb/if:fsdb_model", + "//fboss/thrift_cow/storage:cow_storage", + ], +) + cpp_library( name = "core", srcs = [ @@ -633,7 +664,6 @@ cpp_library( "EncapIndexAllocator.cpp", "FabricConnectivityManager.cpp", "FibHelpers.cpp", - "FsdbAdaptedSubManager.cpp", "FsdbSyncer.cpp", "HwAsicTable.cpp", "HwSwitchConnectionStatusTable.cpp", @@ -719,8 +749,9 @@ cpp_library( ":constants", ":dhcpv4_options_of_interest", ":fboss-error", - ":fboss-event-base", ":fboss-types", + ":fboss_event_base", + ":fsdb_adapted_sub_manager", ":hw_switch_handler", ":hwswitchcallback", ":l2learn_event_observer", @@ -742,6 +773,7 @@ cpp_library( ":switchid_scope_resolver", ":switchinfo_utils", ":utils", + ":voq_utils", "//common/fbwhoami:fb_who_am_i", "//common/network:util", "//common/stats:macros", @@ -874,8 +906,8 @@ cpp_library( ":address_utils", ":core", ":fboss-error", - ":fboss-event-base", ":fboss-types", + ":fboss_event_base", ":hw_asic_table", ":packet", ":stats", @@ -955,11 +987,12 @@ cpp_library( ) cpp_library( - name = "fboss-event-base", + name = "fboss_event_base", headers = [ "FbossEventBase.h", ], exported_deps = [ + ":agent_features", "//folly/io/async:async_base", "//folly/logging:logging", ], @@ -1010,8 +1043,8 @@ cpp_library( ":agent_dir_util", ":agent_features", ":fboss-error", - ":fboss-event-base", ":fboss-types", + ":fboss_event_base", ":load_agent_config", ":platform_config-cpp2-types", ":switch_config-cpp2-types", @@ -1181,6 +1214,7 @@ cpp_library( ":fboss-error", ":fboss-types", ":hwswitch_matcher", + ":switchinfo_utils", "//fboss/agent/state:state", ], exported_external_deps = [ @@ -1217,8 +1251,8 @@ cpp_library( "HwSwitchHandler.h", ], exported_deps = [ - ":fboss-event-base", ":fboss-types", + ":fboss_event_base", ":hwswitchcallback", ":load_agent_config", ":switch_config-cpp2-types", diff --git a/fboss/agent/DHCPv4Handler.h b/fboss/agent/DHCPv4Handler.h index ee03890571da0..0a0f248627959 100644 --- a/fboss/agent/DHCPv4Handler.h +++ b/fboss/agent/DHCPv4Handler.h @@ -19,8 +19,8 @@ namespace facebook::fboss { class SwSwitch; class RxPacket; -class UDPHeader; -class DHCPv4Packet; +struct UDPHeader; +struct DHCPv4Packet; class TxPacket; class IPv4Hdr; diff --git a/fboss/agent/DHCPv6Handler.h b/fboss/agent/DHCPv6Handler.h index 80487cbfb8406..e7082cbe9ed33 100644 --- a/fboss/agent/DHCPv6Handler.h +++ b/fboss/agent/DHCPv6Handler.h @@ -20,7 +20,7 @@ namespace facebook::fboss { class SwSwitch; class RxPacket; -class UDPHeader; +struct UDPHeader; struct DHCPv6Packet; class TxPacket; class IPv6Hdr; diff --git a/fboss/agent/DsfSubscription.cpp b/fboss/agent/DsfSubscription.cpp index 6c9528a7b42e3..ed0fa57e559f8 100644 --- a/fboss/agent/DsfSubscription.cpp +++ b/fboss/agent/DsfSubscription.cpp @@ -26,7 +26,7 @@ utils::ConnectionOptions getConnectionOptions( // dstPort = FSDB port // srcIP = self inband IP // tos = NC - return utils::ConnectionOptions(dstIP, FLAGS_fsdbPort) + return utils::ConnectionOptions(dstIP, FLAGS_fsdbPort_high_priority) .setSrcAddr(srcIP) .setPreferEncrypted(false) .setTrafficClass(utils::ConnectionOptions::TrafficClass::NC) diff --git a/fboss/agent/DsfUpdateValidator.cpp b/fboss/agent/DsfUpdateValidator.cpp index e5f4a2ed5f5a4..c494deaf6065a 100644 --- a/fboss/agent/DsfUpdateValidator.cpp +++ b/fboss/agent/DsfUpdateValidator.cpp @@ -2,7 +2,7 @@ #include "fboss/agent/DsfUpdateValidator.h" #include "fboss/agent/DsfStateUpdaterUtil.h" -#include "fboss/agent/Utils.h" +#include "fboss/agent/SwitchInfoUtils.h" #include "fboss/agent/state/DeltaFunctions.h" #include "fboss/agent/state/InterfaceMap.h" #include "fboss/agent/state/StateDelta.h" diff --git a/fboss/agent/FabricConnectivityManager.cpp b/fboss/agent/FabricConnectivityManager.cpp index 9ae3af35d2368..8bc5c90eeafd5 100644 --- a/fboss/agent/FabricConnectivityManager.cpp +++ b/fboss/agent/FabricConnectivityManager.cpp @@ -489,31 +489,8 @@ bool FabricConnectivityManager::isConnectivityInfoMismatch( return false; } -bool FabricConnectivityManager::isConnectivityInfoMismatch( - const PortID& portId) { - const auto& iter = currentNeighborConnectivity_.find(portId); - if (iter != currentNeighborConnectivity_.end()) { - const auto& endpoint = iter->second; - return isConnectivityInfoMismatch(endpoint); - } - - // no mismatch - return false; -} - -// Detect missing info. Points to configuration issue where expected -// connectivity info is not populated. bool FabricConnectivityManager::isConnectivityInfoMissing( - const PortID& portId) { - const auto& iter = currentNeighborConnectivity_.find(portId); - if (iter == currentNeighborConnectivity_.end()) { - // specific port is missing from the reachability DB and - // also switch state (else we would have added it during addPort). - // So no connectivity is expected here - return false; - } - - const auto& endpoint = iter->second; + const FabricEndpoint& endpoint) { if (!*endpoint.isAttached()) { // endpoint not attached, points to cabling connectivity issues // unless in cfg also we don't expect it to be present @@ -541,6 +518,34 @@ bool FabricConnectivityManager::isConnectivityInfoMissing( return false; } +bool FabricConnectivityManager::isConnectivityInfoMismatch( + const PortID& portId) { + const auto& iter = currentNeighborConnectivity_.find(portId); + if (iter != currentNeighborConnectivity_.end()) { + const auto& endpoint = iter->second; + return isConnectivityInfoMismatch(endpoint); + } + + // no mismatch + return false; +} + +// Detect missing info. Points to configuration issue where expected +// connectivity info is not populated. +bool FabricConnectivityManager::isConnectivityInfoMissing( + const PortID& portId) { + const auto& iter = currentNeighborConnectivity_.find(portId); + if (iter == currentNeighborConnectivity_.end()) { + // specific port is missing from the reachability DB and + // also switch state (else we would have added it during addPort). + // So no connectivity is expected here + return false; + } + + const auto& endpoint = iter->second; + return isConnectivityInfoMissing(endpoint); +} + const std::map& FabricConnectivityManager::getConnectivityInfo() const { return currentNeighborConnectivity_; diff --git a/fboss/agent/FabricConnectivityManager.h b/fboss/agent/FabricConnectivityManager.h index c3f1e86545e94..996d9bf21acec 100644 --- a/fboss/agent/FabricConnectivityManager.h +++ b/fboss/agent/FabricConnectivityManager.h @@ -52,6 +52,7 @@ class FabricConnectivityManager { const PortID& portId, const FabricEndpoint& hwConnectivity); bool isConnectivityInfoMissing(const PortID& portId); + static bool isConnectivityInfoMissing(const FabricEndpoint& endpoint); bool isConnectivityInfoMismatch(const PortID& portId); static bool isConnectivityInfoMismatch(const FabricEndpoint& endpoint); diff --git a/fboss/agent/FbossEventBase.h b/fboss/agent/FbossEventBase.h index 8f8059259c56d..86d196370de92 100644 --- a/fboss/agent/FbossEventBase.h +++ b/fboss/agent/FbossEventBase.h @@ -9,12 +9,13 @@ */ #pragma once +#include "fboss/agent/AgentFeatures.h" + #include #include #include namespace facebook::fboss { - class FbossEventBase : public folly::EventBase { public: explicit FbossEventBase(const std::string& name) : eventBaseName_(name) {} @@ -24,6 +25,12 @@ class FbossEventBase : public folly::EventBase { XLOG(ERR) << "runInFbossEventBaseThread to non-running " << eventBaseName_ << " FbossEventBase."; } + if (getNotificationQueueSize() >= FLAGS_fboss_event_base_queue_limit) { + XLOG(ERR) << "Stop enqueuing to " << eventBaseName_ + << ". Queue size greater than limit " + << FLAGS_fboss_event_base_queue_limit; + return; + } runInEventBaseThread(std::move(fn)); } @@ -37,6 +44,12 @@ class FbossEventBase : public folly::EventBase { XLOG(ERR) << "runInFbossEventBaseThreadAndWait for non-running " << eventBaseName_ << " FbossEventBase."; } + if (getNotificationQueueSize() >= FLAGS_fboss_event_base_queue_limit) { + XLOG(ERR) << "Stop enqueuing to " << eventBaseName_ + << ". Queue size greater than limit " + << FLAGS_fboss_event_base_queue_limit; + return; + } runInEventBaseThreadAndWait(std::move(fn)); } @@ -46,6 +59,12 @@ class FbossEventBase : public folly::EventBase { << "runImmediatelyOrRunInFbossEventBaseThreadAndWait for non-running " << eventBaseName_ << " FbossEventBase."; } + if (getNotificationQueueSize() >= FLAGS_fboss_event_base_queue_limit) { + XLOG(ERR) << "Stop enqueuing to " << eventBaseName_ + << ". Queue size greater than limit " + << FLAGS_fboss_event_base_queue_limit; + return; + } runImmediatelyOrRunInEventBaseThreadAndWait(std::move(fn)); } diff --git a/fboss/agent/HwAgentMain.cpp b/fboss/agent/HwAgentMain.cpp index 43ba953fe7aa8..168a15b830e16 100644 --- a/fboss/agent/HwAgentMain.cpp +++ b/fboss/agent/HwAgentMain.cpp @@ -160,6 +160,7 @@ int hwAgentMain( if (FLAGS_thrift_test_utils_thrift_handler || FLAGS_hw_agent_for_testing) { config = getConfigFileForTesting(FLAGS_switchIndex); + initFlagDefaults(*config->thrift.defaultCommandLineArgs()); } auto hwAgent = std::make_unique( diff --git a/fboss/agent/HwAsicTable.cpp b/fboss/agent/HwAsicTable.cpp index 53d26f84896e7..de7bb0fbffdbe 100644 --- a/fboss/agent/HwAsicTable.cpp +++ b/fboss/agent/HwAsicTable.cpp @@ -12,30 +12,18 @@ HwAsicTable::HwAsicTable( const std::map& switchIdToSwitchInfo, std::optional sdkVersion) { for (const auto& switchIdAndSwitchInfo : switchIdToSwitchInfo) { - folly::MacAddress mac; - if (switchIdAndSwitchInfo.second.switchMac()) { - mac = folly::MacAddress(*switchIdAndSwitchInfo.second.switchMac()); - } else { + auto switchInfo = switchIdAndSwitchInfo.second; + if (!switchInfo.switchMac()) { try { - mac = getLocalMacAddress(); + switchInfo.switchMac() = getLocalMacAddress().toString(); } catch (const std::exception&) { // Expected when fake bcm tests run without config + switchInfo.switchMac() = folly::MacAddress().toString(); } } - std::optional systemPortRange; - if (switchIdAndSwitchInfo.second.systemPortRange().has_value()) { - systemPortRange = *switchIdAndSwitchInfo.second.systemPortRange(); - } hwAsics_.emplace( SwitchID(switchIdAndSwitchInfo.first), - HwAsic::makeAsic( - *switchIdAndSwitchInfo.second.asicType(), - *switchIdAndSwitchInfo.second.switchType(), - switchIdAndSwitchInfo.first, - *switchIdAndSwitchInfo.second.switchIndex(), - systemPortRange, - mac, - sdkVersion)); + HwAsic::makeAsic(switchIdAndSwitchInfo.first, switchInfo, sdkVersion)); } } diff --git a/fboss/agent/HwSwitchCallback.h b/fboss/agent/HwSwitchCallback.h index a77ec8ba083f5..970658d78022d 100644 --- a/fboss/agent/HwSwitchCallback.h +++ b/fboss/agent/HwSwitchCallback.h @@ -43,11 +43,13 @@ class HwSwitchCallback { std::optional iPhyFaultStatus = std::nullopt) = 0; /* - * linkActiveStateChanged() is invoked by the HwSwitch whenever the link - * active/inactive status changes on a port. + * linkActiveStateChangedOrFwIsolated() is invoked by the HwSwitch whenever + * the link active/inactive status changes on a port or Fw Isolates. */ - virtual void linkActiveStateChanged( - const std::map& port2IsActive) = 0; + virtual void linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) = 0; virtual void linkConnectivityChanged( const std::map& diff --git a/fboss/agent/IPv6Handler.cpp b/fboss/agent/IPv6Handler.cpp index 07c3bd5305a5f..2f0aab8612a75 100644 --- a/fboss/agent/IPv6Handler.cpp +++ b/fboss/agent/IPv6Handler.cpp @@ -598,6 +598,12 @@ void IPv6Handler::handleNeighborAdvertisement( sw_->portStats(pkt)->pktDropped(); return; } + if (pkt->getSrcPort() == PortID(0)) { + XLOG(DBG2) << "ignoring IPv6 neighbor advertisement for " << targetIP + << " received from cpu port"; + sw_->portStats(pkt)->pktDropped(); + return; + } if (!vlanOrIntf) { // Hmm, we don't actually have this VLAN configured. diff --git a/fboss/agent/LacpMachines.h b/fboss/agent/LacpMachines.h index d7a86a75bc63b..9df5f3b91b3ed 100644 --- a/fboss/agent/LacpMachines.h +++ b/fboss/agent/LacpMachines.h @@ -24,7 +24,7 @@ namespace facebook::fboss { class AggregatePort; class LacpController; -class LacpServicerIf; +struct LacpServicerIf; /* * See IEEE 802.3AD-2000 43.4.3 for an overview of each state machine diff --git a/fboss/agent/LookupClassRouteUpdater.cpp b/fboss/agent/LookupClassRouteUpdater.cpp index 3e7270c1f5f84..cc63d877a20f3 100644 --- a/fboss/agent/LookupClassRouteUpdater.cpp +++ b/fboss/agent/LookupClassRouteUpdater.cpp @@ -343,6 +343,7 @@ void LookupClassRouteUpdater::processInterfaceAdded( const StateDelta& stateDelta, const std::shared_ptr& addedInterface) { CHECK(addedInterface); + // TODO(Chenab): Support port router interface if (addedInterface->getType() != cfg::InterfaceType::VLAN) { // TODO: Start handling interface types for PORT once we // we support class IDs on VOQ switches @@ -453,6 +454,7 @@ void LookupClassRouteUpdater::processInterfaceRemoved( const StateDelta& stateDelta, const std::shared_ptr& removedInterface) { CHECK(removedInterface); + // TODO(Chenab): Support port router interface if (removedInterface->getType() != cfg::InterfaceType::VLAN) { // TODO: Start handling interface types for PORT once we // we support class IDs on VOQ switches diff --git a/fboss/agent/MirrorManagerImpl.cpp b/fboss/agent/MirrorManagerImpl.cpp index 337221a54abd3..d7b5b3b7d503f 100644 --- a/fboss/agent/MirrorManagerImpl.cpp +++ b/fboss/agent/MirrorManagerImpl.cpp @@ -70,6 +70,7 @@ PortID MirrorManagerImpl::getEventorPortForSflowMirror( template std::shared_ptr MirrorManagerImpl::updateMirror( const std::shared_ptr& mirror) { + bool isV4 = std::is_same_v; const AddrT destinationIp = getIPAddress(mirror->getDestinationIp().value()); const auto state = sw_->getState(); @@ -91,6 +92,10 @@ std::shared_ptr MirrorManagerImpl::updateMirror( newMirror->setSwitchId(mirror->getSwitchId()); for (const auto& nexthop : nexthops) { + // Dont consider nextHops that do not match incoming Address family + if (isV4 != nexthop.addr().isV4()) { + continue; + } const auto entry = resolveMirrorNextHopNeighbor(state, mirror, destinationIp, nexthop); @@ -197,6 +202,12 @@ MirrorManagerImpl::resolveMirrorNextHopNeighbor( InterfaceID mirrorEgressInterface = nexthop.intf(); auto interface = state->getInterfaces()->getNodeIf(mirrorEgressInterface); + if (!interface && state->getRemoteInterfaces()) { + XLOG(DBG2) + << "Interface: " << mirrorEgressInterface + << " not found in local interaces, looking up in remote interfaces"; + interface = state->getRemoteInterfaces()->getNodeIf(mirrorEgressInterface); + } if (interface->hasAddress(mirrorNextHopIp)) { /* if mirror destination is directly connected */ neighbor = getNeighborEntryTableHelper(state, interface) @@ -216,7 +227,14 @@ MirrorTunnel MirrorManagerImpl::resolveMirrorTunnel( const NextHop& nextHop, const std::shared_ptr& neighbor, const std::optional& udpPorts) { - const auto interface = state->getInterfaces()->getNodeIf(nextHop.intf()); + InterfaceID mirrorEgressInterface = nextHop.intf(); + auto interface = state->getInterfaces()->getNodeIf(mirrorEgressInterface); + if (!interface && state->getRemoteInterfaces()) { + XLOG(DBG2) + << "Interface: " << mirrorEgressInterface + << " not found in local interaces, looking up in remote interfaces"; + interface = state->getRemoteInterfaces()->getNodeIf(mirrorEgressInterface); + } const auto iter = interface->getAddressToReach(neighbor->getIP()); if (udpPorts.has_value()) { diff --git a/fboss/agent/MultiSwitchThriftHandler.cpp b/fboss/agent/MultiSwitchThriftHandler.cpp index 48f9b7d528448..815e16f5657e1 100644 --- a/fboss/agent/MultiSwitchThriftHandler.cpp +++ b/fboss/agent/MultiSwitchThriftHandler.cpp @@ -87,7 +87,17 @@ void MultiSwitchThriftHandler::processLinkActiveState( *linkChangeEvent.linkActiveEvents()->port2IsActive()) { port2IsActive[PortID(portID)] = isActive; } - sw_->linkActiveStateChanged(port2IsActive); + + auto fwIsolated = *linkChangeEvent.linkActiveEvents()->fwIsolated(); + + std::optional numActiveFabricPortsAtFwIsolate; + if (linkChangeEvent.linkActiveEvents()->numActiveFabricPortsAtFwIsolate()) { + numActiveFabricPortsAtFwIsolate = + *linkChangeEvent.linkActiveEvents()->numActiveFabricPortsAtFwIsolate(); + } + + sw_->linkActiveStateChangedOrFwIsolated( + port2IsActive, fwIsolated, numActiveFabricPortsAtFwIsolate); } void MultiSwitchThriftHandler::processLinkConnectivity( diff --git a/fboss/agent/NeighborCacheImpl-defs.h b/fboss/agent/NeighborCacheImpl-defs.h index 0c3688ceaac15..e2c21c55e553e 100644 --- a/fboss/agent/NeighborCacheImpl-defs.h +++ b/fboss/agent/NeighborCacheImpl-defs.h @@ -17,6 +17,7 @@ #include #include "fboss/agent/ArpHandler.h" #include "fboss/agent/EncapIndexAllocator.h" +#include "fboss/agent/FbossHwUpdateError.h" #include "fboss/agent/HwAsicTable.h" #include "fboss/agent/IPv6Handler.h" #include "fboss/agent/NeighborCacheImpl.h" @@ -82,6 +83,17 @@ inline cfg::PortDescriptor getNeighborPortDescriptor( } // namespace ncachehelpers +template +bool NeighborCacheImpl::isHwUpdateProtected() { + // this API return true if the platform supports hw protection, + // for this we are using transactionsSupported() API + // and return true for SAI switches, failure protection uses transactions + // support in HW switch which is available only in SAI switches + return ( + FLAGS_enable_hw_update_protection && + sw_->getHwSwitchHandler()->transactionsSupported()); +} + template void NeighborCacheImpl::programEntry(Entry* entry) { SwSwitch::StateUpdateFn updateFn; @@ -104,9 +116,22 @@ void NeighborCacheImpl::programEntry(Entry* entry) { "Programming entry is not supported for switch type: ", switchType); } - sw_->updateState( - folly::to("add neighbor ", entry->getFields().ip), - std::move(updateFn)); + if (isHwUpdateProtected()) { + try { + sw_->updateStateWithHwFailureProtection( + folly::to( + "add neighbor with hw protection failure ", + entry->getFields().ip), + std::move(updateFn)); + } catch (const FbossHwUpdateError& e) { + XLOG(ERR) << "Failed to program neighbor entry: " << e.what(); + sw_->stats()->neighborTableUpdateFailure(); + } + } else { + sw_->updateState( + folly::to("add neighbor ", entry->getFields().ip), + std::move(updateFn)); + } } template @@ -299,9 +324,22 @@ void NeighborCacheImpl::programPendingEntry( "Programming entry is not supported for switch type: ", switchType); } - sw_->updateStateNoCoalescing( - folly::to("add pending entry ", entry->getFields().ip), - std::move(updateFn)); + if (isHwUpdateProtected()) { + try { + sw_->updateStateWithHwFailureProtection( + folly::to( + "add pending entry with hw failure protection ", + entry->getFields().ip), + std::move(updateFn)); + } catch (const FbossHwUpdateError& e) { + XLOG(ERR) << "Failed to program pending entry: " << e.what(); + sw_->stats()->neighborTableUpdateFailure(); + } + } else { + sw_->updateStateNoCoalescing( + folly::to("add pending entry ", entry->getFields().ip), + std::move(updateFn)); + } } template @@ -724,7 +762,18 @@ void NeighborCacheImpl::flushEntry(AddressType ip, bool* flushed) { if (flushed) { // need a blocking state update if the caller wants to know if an entry // was actually flushed - sw_->updateStateBlocking("flush neighbor entry", std::move(updateFn)); + if (isHwUpdateProtected()) { + try { + sw_->updateStateWithHwFailureProtection( + "flush neighbor entry with hw failure protection", + std::move(updateFn)); + } catch (const FbossHwUpdateError& e) { + XLOG(ERR) << "Failed to program flush neighbor entry: " << e.what(); + sw_->stats()->neighborTableUpdateFailure(); + } + } else { + sw_->updateStateBlocking("flush neighbor entry", std::move(updateFn)); + } } else { sw_->updateState("remove neighbor entry: " + ip.str(), std::move(updateFn)); } diff --git a/fboss/agent/NeighborCacheImpl.h b/fboss/agent/NeighborCacheImpl.h index a0920cfce18db..36e90991ed2de 100644 --- a/fboss/agent/NeighborCacheImpl.h +++ b/fboss/agent/NeighborCacheImpl.h @@ -127,6 +127,7 @@ class NeighborCacheImpl { std::optional getCacheData(AddressType ip) const; private: + bool isHwUpdateProtected(); // These are used to program entries into the SwitchState void programEntry(Entry* entry); void diff --git a/fboss/agent/Platform.cpp b/fboss/agent/Platform.cpp index 95fa6457d65f3..0d53b7ff62963 100644 --- a/fboss/agent/Platform.cpp +++ b/fboss/agent/Platform.cpp @@ -94,37 +94,27 @@ void Platform::init( setConfig(std::move(config)); auto macStr = getPlatformAttribute(cfg::PlatformAttributes::MAC); const auto switchSettings = *config_->thrift.sw()->switchSettings(); - std::optional switchId; - std::optional systemPortRange; - auto switchType{cfg::SwitchType::NPU}; auto getSwitchInfo = [&switchSettings](int64_t switchIndex) { - for (const auto& switchInfo : *switchSettings.switchIdToSwitchInfo()) { - if (switchInfo.second.switchIndex() == switchIndex) { - return switchInfo; + for (const auto& [switchId, switchInfo] : + *switchSettings.switchIdToSwitchInfo()) { + if (switchInfo.switchIndex() == switchIndex) { + return std::make_pair(switchId, switchInfo); } } throw FbossError("No SwitchInfo found for switchIndex", switchIndex); }; std::optional fabricNodeRole; + std::optional switchId; + cfg::SwitchInfo switchInfo; + switchInfo.switchType() = cfg::SwitchType::NPU; if (switchSettings.switchIdToSwitchInfo()->size()) { - auto switchInfo = getSwitchInfo(switchIndex); - switchId = std::optional(switchInfo.first); - switchType = *switchInfo.second.switchType(); - if (switchType == cfg::SwitchType::VOQ) { - const auto& dsfNodesConfig = *config_->thrift.sw()->dsfNodes(); - const auto& dsfNodeConfig = dsfNodesConfig.find(*switchId); - if (dsfNodeConfig != dsfNodesConfig.end() && - !dsfNodeConfig->second.systemPortRanges() - ->systemPortRanges() - ->empty()) { - // FIXME[2-stage DSF] Pass SystemPortRanges to ASIC - systemPortRange = *dsfNodeConfig->second.systemPortRanges() - ->systemPortRanges() - ->begin(); - } - } else if (switchType == cfg::SwitchType::FABRIC) { + auto switchIdAndInfo = getSwitchInfo(switchIndex); + switchId = switchIdAndInfo.first; + switchInfo = switchIdAndInfo.second; + auto switchType = *switchInfo.switchType(); + if (switchType == cfg::SwitchType::FABRIC) { fabricNodeRole = HwAsic::FabricNodeRole::SINGLE_STAGE_L1; const auto& dsfNodesConfig = *config_->thrift.sw()->dsfNodes(); const auto& dsfNodeConfig = dsfNodesConfig.find(*switchId); @@ -141,8 +131,8 @@ void Platform::init( } } } - if (switchInfo.second.switchMac()) { - macStr = *switchInfo.second.switchMac(); + if (switchInfo.switchMac()) { + macStr = *switchInfo.switchMac(); } } @@ -151,17 +141,12 @@ void Platform::init( XLOG(DBG2) << " Setting platform mac to: " << macStr.value(); localMac_ = folly::MacAddress(*macStr); } + switchInfo.switchMac() = localMac_.toString(); XLOG(DBG2) << "Initializing Platform with switch ID: " << switchId.value_or(0) << " switch Index: " << switchIndex; - setupAsic( - switchType, - switchId, - switchIndex, - systemPortRange, - localMac_, - fabricNodeRole); + setupAsic(switchId, switchInfo, fabricNodeRole); initImpl(hwFeaturesDesired); // We should always initPorts() here instead of leaving the hw/ to call initPorts(); diff --git a/fboss/agent/Platform.h b/fboss/agent/Platform.h index a696496a560e9..84cbdbdc2f0f8 100644 --- a/fboss/agent/Platform.h +++ b/fboss/agent/Platform.h @@ -34,7 +34,7 @@ struct AgentConfig; class HwSwitch; class SwSwitch; class ThriftHandler; -struct ProductInfo; +class ProductInfo; class HwSwitchWarmBootHelper; class PlatformProductInfo; class HwSwitchCallback; @@ -269,11 +269,8 @@ class Platform { */ virtual void initImpl(uint32_t hwFeaturesDesired) = 0; virtual void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional role) = 0; std::unique_ptr config_; diff --git a/fboss/agent/SwSwitch.cpp b/fboss/agent/SwSwitch.cpp index 3c884870ec3d3..21a7c61f095f2 100644 --- a/fboss/agent/SwSwitch.cpp +++ b/fboss/agent/SwSwitch.cpp @@ -272,11 +272,11 @@ std::string getDrainThresholdStr( const SwitchSettings& switchSettings) { if (newState == SwitchDrainState::UNDRAINED) { auto minLinks = switchSettings.getMinLinksToRemainInVOQDomain(); - return "drains when active ports is below " + + return "drains at < " + (minLinks.has_value() ? std::to_string(minLinks.value()) : "N/A") + ")"; } else { auto minLinks = switchSettings.getMinLinksToJoinVOQDomain(); - return "undrains when active ports is above" + + return "undrains at >= " + (minLinks.has_value() ? std::to_string(minLinks.value()) : "N/A") + ")"; } } @@ -344,6 +344,12 @@ void accumulateGlobalCpuStats( } } +DEFINE_dynamic_quantile_stat( + port_fec_tail, + "port.{}.fecTail", + facebook::fb303::ExportTypeConsts::kNone, + std::array{{1.0}}); + void updatePhyFb303Stats( const std::map& phyInfoMap) { @@ -372,6 +378,9 @@ void updatePhyFb303Stats( } facebook::fb303::fbData->setCounter( "port." + phyState.get_name() + ".preFecBerLog", preFECBerForFb303); + if (auto fecTail = fec->fecTail()) { + STATS_port_fec_tail.addValue(*fecTail, phyState.get_name()); + } } } } @@ -1942,7 +1951,8 @@ void SwSwitch::packetReceived(std::unique_ptr pkt) noexcept { handlePacket(std::move(pkt)); } catch (const std::exception& ex) { portStats(port)->pktError(); - XLOG(ERR) << "error processing trapped packet: " << folly::exceptionStr(ex); + XLOG(ERR) << "error processing trapped packet: " << folly::exceptionStr(ex) + << " from port: " << port; // Return normally, without letting the exception propagate to our caller. return; } @@ -2180,8 +2190,10 @@ void SwSwitch::linkStateChanged( } } -void SwSwitch::linkActiveStateChanged( - const std::map& port2IsActive) { +void SwSwitch::linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) { if (!isFullyInitialized()) { XLOG(ERR) << "Ignore link active state change event before we are fully initialized..."; @@ -2230,19 +2242,44 @@ void SwSwitch::linkActiveStateChanged( auto matcher = getScopeResolver()->scope(port2IsActive.cbegin()->first); auto switchSettings = state->getSwitchSettings()->getNodeIf(matcher.matcherString()); - auto newActualSwitchDrainState = - computeActualSwitchDrainState(switchSettings, numActiveFabricPorts); + + SwitchDrainState newActualSwitchDrainState; + if (fwIsolated) { + if (isSwitchErrorFirmwareIsolate( + numActiveFabricPortsAtFwIsolate, switchSettings)) { + stats()->fwDrainedWithHighNumActiveFabricLinks(); + if (FLAGS_fw_drained_unrecoverable_error) { + newActualSwitchDrainState = + cfg::SwitchDrainState::DRAINED_DUE_TO_ASIC_ERROR; + } else { + newActualSwitchDrainState = cfg::SwitchDrainState::DRAINED; + } + } else { + newActualSwitchDrainState = cfg::SwitchDrainState::DRAINED; + } + } else { + newActualSwitchDrainState = + computeActualSwitchDrainState(switchSettings, numActiveFabricPorts); + } + auto currentActualDrainState = switchSettings->getActualSwitchDrainState(); if (newActualSwitchDrainState != currentActualDrainState) { + stats()->setDrainState(matcher.switchId(), newActualSwitchDrainState); auto newSwitchSettings = switchSettings->modify(&newState); newSwitchSettings->setActualSwitchDrainState(newActualSwitchDrainState); } - XLOG(DBG2) << "Switch state: " + XLOG(DBG2) << "SwitchID: " << static_cast(matcher.switchId()) + << " | FwIsolated: " << (fwIsolated ? "Y" : "N") + << " | ActivePortsAtFwIsolate: " + << (numActiveFabricPortsAtFwIsolate.has_value() + ? folly::to( + numActiveFabricPortsAtFwIsolate.value()) + : "--") + << " | " << getDrainStateChangedStr(getState(), newState, matcher) - << " | SwitchIDs: " << matcher.matcherString() - << " | Active ports: " << numActiveFabricPorts << "/" + << " | ActivePorts: " << numActiveFabricPorts << "/" << port2IsActive.size() << " (" << getDrainThresholdStr( newActualSwitchDrainState, switchSettings.get()) @@ -2265,10 +2302,30 @@ void SwSwitch::linkActiveStateChanged( * * Note: On NIF ports, we never coalesce link up/down updates to ensure * expiry of NDP/ARP entries, but that is not applicable for Fabric port. + * + * But, there is an exception, consider the following scenario: + * - A large number of fabric links flap. + * - These links will transition ACTIVE => INACTIVE => ACTIVE. + * - It is possible that the Firmware may isolate the device. + * - Device is isolated, but SwitchState is UNDRAINED(unisolated)..(0) + * - Firmware cb handling will decide to DRAIN (isolate) the device..(1) + * - Switch active/inactive cb processing may decide to UNDRAIN.. (2) + * - If (1) and (2) are coalesced, SwitchState will remain UNDRAINED and + * the device will be isolated i.e. state (0), not what we want. + * + * Prevent this by not coalesing state update on Firmware Isolate. + * + * Firmware Isolate is a rare event, and thus it is OK to not coalesce these + * updates. */ - updateState( - "Port ActiveState (ACTIVE/INACTIVE) Update", - std::move(updateActiveStateFn)); + if (!fwIsolated) { + updateState( + "Port ActiveState (ACTIVE/INACTIVE) Update", + std::move(updateActiveStateFn)); + } else { + updateStateNoCoalescing( + "Fw Isolate Update", std::move(updateActiveStateFn)); + } } void SwSwitch::switchReachabilityChanged( diff --git a/fboss/agent/SwSwitch.h b/fboss/agent/SwSwitch.h index a0e1f825e7413..8fd6000021929 100644 --- a/fboss/agent/SwSwitch.h +++ b/fboss/agent/SwSwitch.h @@ -567,8 +567,10 @@ class SwSwitch : public HwSwitchCallback { cfg::PortType portType, std::optional iPhyFaultStatus = std::nullopt) override; - void linkActiveStateChanged( - const std::map& port2IsActive) override; + void linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) override; void linkConnectivityChanged( const std::map& port2OldAndNewConnectivity) override; diff --git a/fboss/agent/SwitchIdScopeResolver.cpp b/fboss/agent/SwitchIdScopeResolver.cpp index d122e99c127da..12527c0881f8f 100644 --- a/fboss/agent/SwitchIdScopeResolver.cpp +++ b/fboss/agent/SwitchIdScopeResolver.cpp @@ -2,11 +2,13 @@ #include "fboss/agent/SwitchIdScopeResolver.h" #include "fboss/agent/FbossError.h" +#include "fboss/agent/SwitchInfoUtils.h" #include "fboss/agent/state/AclTableGroup.h" #include "fboss/agent/state/AggregatePort.h" #include "fboss/agent/state/ForwardingInformationBaseMap.h" #include "fboss/agent/state/Interface.h" #include "fboss/agent/state/LabelForwardingEntry.h" +#include "fboss/agent/state/MirrorOnDropReport.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortDescriptor.h" #include "fboss/agent/state/SflowCollector.h" @@ -83,10 +85,11 @@ const HwSwitchMatcher& SwitchIdScopeResolver::voqSwitchMatcher() const { HwSwitchMatcher SwitchIdScopeResolver::scope(PortID portId) const { for (const auto& switchIdAndSwitchInfo : switchIdToSwitchInfo_) { - if (portId >= - PortID(*switchIdAndSwitchInfo.second.portIdRange()->minimum()) && - portId <= - PortID(*switchIdAndSwitchInfo.second.portIdRange()->maximum())) { + auto switchInfo = switchIdAndSwitchInfo.second; + if (static_cast(portId) >= + *switchIdAndSwitchInfo.second.portIdRange()->minimum() && + static_cast(portId) <= + *switchIdAndSwitchInfo.second.portIdRange()->maximum()) { return HwSwitchMatcher(std::unordered_set( {SwitchID(switchIdAndSwitchInfo.first)})); } @@ -137,17 +140,11 @@ HwSwitchMatcher SwitchIdScopeResolver::scope( } HwSwitchMatcher SwitchIdScopeResolver::scope(SystemPortID sysPortId) const { - auto sysPortInt = static_cast(sysPortId); for (const auto& [id, info] : switchIdToSwitchInfo_) { - if (!info.systemPortRange().has_value()) { - continue; - } - if (sysPortInt >= *info.systemPortRange()->minimum() && - sysPortInt <= *info.systemPortRange()->maximum()) { + if (withinRange(*info.systemPortRanges(), sysPortId)) { return HwSwitchMatcher(std::unordered_set({SwitchID(id)})); } } - // This is a non local sys port. So it maps to all local voq switchIds return voqSwitchMatcher(); } @@ -194,6 +191,8 @@ HwSwitchMatcher SwitchIdScopeResolver::scope( case cfg::InterfaceType::VLAN: return scope( state->getVlans()->getNode(VlanID(static_cast(intf->getID())))); + case cfg::InterfaceType::PORT: + return scope(intf->getPortID()); } throw FbossError( "Unexpected interface type: ", static_cast(intf->getType())); @@ -229,6 +228,26 @@ HwSwitchMatcher SwitchIdScopeResolver::scope( } return scope(std::make_shared(&*vitr, vlanMembers)); } + case cfg::InterfaceType::PORT: { + auto itr = std::find_if( + cfg.interfaces()->cbegin(), + cfg.interfaces()->cend(), + [interfaceId](const auto& intf) { + return InterfaceID(*intf.intfID()) == interfaceId; + }); + if (itr == cfg.interfaces()->cend()) { + throw FbossError("No interface found for : ", interfaceId); + } + auto pitr = std::find_if( + cfg.ports()->cbegin(), cfg.ports()->cend(), [itr](const auto& port) { + return *port.logicalID() == *(itr->portID()); + }); + if (pitr == cfg.ports()->cend()) { + throw FbossError("No port found for : ", interfaceId); + } + const auto& port = *pitr; + return scope(PortID(*port.logicalID())); + } } throw FbossError("Unexpected interface type: ", static_cast(type)); } @@ -324,4 +343,14 @@ HwSwitchMatcher SwitchIdScopeResolver::scope( return HwSwitchMatcher(switchIds); } +HwSwitchMatcher SwitchIdScopeResolver::scope( + const cfg::MirrorOnDropReport& report) const { + return scope(PortID(report.get_mirrorPortId())); +} + +HwSwitchMatcher SwitchIdScopeResolver::scope( + const std::shared_ptr& report) const { + return scope(PortID(report->getMirrorPortId())); +} + } // namespace facebook::fboss diff --git a/fboss/agent/SwitchIdScopeResolver.h b/fboss/agent/SwitchIdScopeResolver.h index 6333b99a24b04..e93f069165193 100644 --- a/fboss/agent/SwitchIdScopeResolver.h +++ b/fboss/agent/SwitchIdScopeResolver.h @@ -11,6 +11,7 @@ namespace facebook::fboss { namespace cfg { class Mirror; +class MirrorOnDropReport; class DsfNode; class IpInIpTunnel; class AclEntry; @@ -22,6 +23,7 @@ class QosPolicy; class SflowCollector; } // namespace cfg class Mirror; +class MirrorOnDropReport; class DsfNode; class IpTunnel; class AclEntry; @@ -77,6 +79,9 @@ class SwitchIdScopeResolver { HwSwitchMatcher scope(const cfg::AggregatePort& aggPort) const; HwSwitchMatcher scope(const std::shared_ptr& aggPort) const; HwSwitchMatcher scope(const std::shared_ptr& mirror) const; + HwSwitchMatcher scope(const cfg::MirrorOnDropReport& report) const; + HwSwitchMatcher scope( + const std::shared_ptr& report) const; const HwSwitchMatcher& scope(const cfg::IpInIpTunnel& /*m*/) const { return l3SwitchMatcher(); } diff --git a/fboss/agent/SwitchInfoUtils.cpp b/fboss/agent/SwitchInfoUtils.cpp index 356d454a93b19..6bb3fc60bcd70 100644 --- a/fboss/agent/SwitchInfoUtils.cpp +++ b/fboss/agent/SwitchInfoUtils.cpp @@ -17,6 +17,20 @@ #include "fboss/agent/hw/switch_asics/HwAsic.h" namespace facebook::fboss { +namespace { + +bool withinRange(const cfg::SystemPortRanges& ranges, int64_t id) { + bool inRange{false}; + for (const auto& sysPortRange : *ranges.systemPortRanges()) { + if (id >= *sysPortRange.minimum() && id <= *sysPortRange.maximum()) { + inRange = true; + break; + } + } + return inRange; +} +} // namespace + const std::map getSwitchInfoFromConfigImpl( const cfg::SwitchConfig* config) { std::map switchInfoMap; @@ -32,16 +46,6 @@ const std::map getSwitchInfoFromConfigImpl( switchInfo.portIdRange()->maximum() = cfg::switch_config_constants::DEFAULT_PORT_ID_RANGE_MAX(); } - if (switchInfo.switchType() == cfg::SwitchType::VOQ && - !switchInfo.systemPortRange()) { - auto dsfItr = - config->dsfNodes()->find(static_cast(entry.first)); - if (dsfItr != config->dsfNodes()->end()) { - auto localNode = dsfItr->second; - CHECK(localNode.systemPortRange().has_value()); - switchInfo.systemPortRange() = *localNode.systemPortRange(); - } - } switchInfoMap.emplace(entry.first, switchInfo); } } @@ -106,4 +110,13 @@ const std::optional getSdkVersionFromConfig( auto& swConfig = config->thrift.sw().value(); return getSdkVersionFromConfigImpl(&swConfig); } + +bool withinRange(const cfg::SystemPortRanges& ranges, InterfaceID intfId) { + return withinRange(ranges, static_cast(intfId)); +} + +bool withinRange(const cfg::SystemPortRanges& ranges, SystemPortID sysPortId) { + return withinRange(ranges, static_cast(sysPortId)); +} + } // namespace facebook::fboss diff --git a/fboss/agent/SwitchInfoUtils.h b/fboss/agent/SwitchInfoUtils.h index 3c82e75004d68..f62b30f464331 100644 --- a/fboss/agent/SwitchInfoUtils.h +++ b/fboss/agent/SwitchInfoUtils.h @@ -40,4 +40,7 @@ const std::optional getSdkVersionFromConfig(); const std::optional getSdkVersionFromConfig( const AgentConfig* config); +bool withinRange(const cfg::SystemPortRanges& ranges, InterfaceID intfId); + +bool withinRange(const cfg::SystemPortRanges& ranges, SystemPortID sysPortId); } // namespace facebook::fboss diff --git a/fboss/agent/SwitchStats.cpp b/fboss/agent/SwitchStats.cpp index dc9d00f4f35c8..4e1380c120037 100644 --- a/fboss/agent/SwitchStats.cpp +++ b/fboss/agent/SwitchStats.cpp @@ -354,10 +354,20 @@ SwitchStats::SwitchStats(ThreadLocalStatsMap* map, int numSwitches) RATE), loPriPktsDropped_(map, kCounterPrefix + "lo_pri_pkts_dropped", SUM, RATE), multiSwitchStatus_(map, kCounterPrefix + "multi_switch", SUM, RATE), + neighborTableUpdateFailure_( + map, + kCounterPrefix + "neighbor_table_update_failure", + SUM, + RATE), macTableUpdateFailure_( map, kCounterPrefix + "mac_table_update_failure", SUM, + RATE), + fwDrainedWithHighNumActiveFabricLinks_( + map, + kCounterPrefix + "fw_drained_with_high_num_active_fabric_links", + SUM, RATE) { @@ -695,4 +705,13 @@ void SwitchStats::failedDsfSubscription( auto counter = failedDsfSubscriptionByPeerSwitchName_.find(peerName); counter->second.incrementValue(value); } + +void SwitchStats::setDrainState( + int16_t switchIndex, + cfg::SwitchDrainState drainState) { + auto drainStateCounter = + folly::to("switch.", switchIndex, ".drain_state"); + fb303::fbData->setCounter(drainStateCounter, static_cast(drainState)); +} + } // namespace facebook::fboss diff --git a/fboss/agent/SwitchStats.h b/fboss/agent/SwitchStats.h index 5b1f1b6d6a1d2..64bb012736cda 100644 --- a/fboss/agent/SwitchStats.h +++ b/fboss/agent/SwitchStats.h @@ -460,6 +460,18 @@ class SwitchStats : public boost::noncopyable { return getCumulativeValue(macTableUpdateFailure_); } + void fwDrainedWithHighNumActiveFabricLinks() { + fwDrainedWithHighNumActiveFabricLinks_.addValue(1); + } + + void neighborTableUpdateFailure() { + neighborTableUpdateFailure_.addValue(1); + } + + int getNeighborTableUpdateFailure() const { + return getCumulativeValue(neighborTableUpdateFailure_); + } + void hiPriPktsReceived() { hiPriPktsReceived_.addValue(1); } @@ -485,6 +497,8 @@ class SwitchStats : public boost::noncopyable { } void setFabricOverdrainPct(int16_t switchIndex, int16_t overdrainPct); + void setDrainState(int16_t switchIndex, cfg::SwitchDrainState drainState); + void hwAgentConnectionStatus(int switchIndex, bool connected) { CHECK_LT(switchIndex, hwAgentConnectionStatus_.size()); hwAgentConnectionStatus_[switchIndex].incrementValue(connected ? 1 : -1); @@ -1031,9 +1045,12 @@ class SwitchStats : public boost::noncopyable { // TODO: delete this once multi_switch becomes default TLTimeseries multiSwitchStatus_; + TLTimeseries neighborTableUpdateFailure_; TLTimeseries macTableUpdateFailure_; + TLTimeseries fwDrainedWithHighNumActiveFabricLinks_; + std::vector hwAgentConnectionStatus_; std::vector hwAgentUpdateTimeouts_; std::vector thriftStreamConnectionStatus_; diff --git a/fboss/agent/ThriftHandler.cpp b/fboss/agent/ThriftHandler.cpp index 193e83b510884..758973214e036 100644 --- a/fboss/agent/ThriftHandler.cpp +++ b/fboss/agent/ThriftHandler.cpp @@ -1174,7 +1174,9 @@ void ThriftHandler::getAclTableGroup(AclTableThrift& aclTableEntry) { } else { std::vector aclTable; getAclTable(aclTable); - aclTableEntry.aclTableEntries_ref()["AclTable1"] = std::move(aclTable); + aclTableEntry.aclTableEntries_ref() + [cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()] = + std::move(aclTable); } } diff --git a/fboss/agent/ThriftHandler.h b/fboss/agent/ThriftHandler.h index ce408e5812479..4ed2c08251127 100644 --- a/fboss/agent/ThriftHandler.h +++ b/fboss/agent/ThriftHandler.h @@ -37,7 +37,7 @@ class SwSwitch; class Vlan; class SwitchState; class AclEntry; -struct LinkNeighbor; +class LinkNeighbor; class ThriftHandler : virtual public FbossCtrlSvIf, public fb303::FacebookBase2 { diff --git a/fboss/agent/TunManager.cpp b/fboss/agent/TunManager.cpp index 8f6e14e62c401..f386b29b5fcb5 100644 --- a/fboss/agent/TunManager.cpp +++ b/fboss/agent/TunManager.cpp @@ -675,6 +675,18 @@ boost::container::flat_map TunManager::getInterfaceStatus( return statusMap; } +bool TunManager::isValidNlSocket() { + return sock_ ? true : false; +} + +bool TunManager::getIntfStatus( + std::shared_ptr state, + InterfaceID ifID) { + // Get interface status map + auto intfStatusMap = getInterfaceStatus(state); + return folly::get_default(intfStatusMap, ifID, false); +} + void TunManager::forceInitialSync() { evb_->runInFbossEventBaseThread([this]() { if (numSyncs_ == 0) { diff --git a/fboss/agent/TunManager.h b/fboss/agent/TunManager.h index 4e62a6f417a85..25b5c6365efd0 100644 --- a/fboss/agent/TunManager.h +++ b/fboss/agent/TunManager.h @@ -81,6 +81,13 @@ class TunManager : public StateObserver { void stopProcessing(); + /** + * Get interface status for a given interface + */ + bool getIntfStatus(std::shared_ptr state, InterfaceID ifID); + + bool isValidNlSocket(); + private: // no copy to assign TunManager(const TunManager&) = delete; diff --git a/fboss/agent/Utils.cpp b/fboss/agent/Utils.cpp index f6ef41936bfb9..a79e3e24e0a2b 100644 --- a/fboss/agent/Utils.cpp +++ b/fboss/agent/Utils.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/AsicUtils.h" #include "fboss/agent/FbossError.h" #include "fboss/agent/FsdbHelper.h" -#include "fboss/agent/SwitchIdScopeResolver.h" #include "fboss/agent/SysError.h" #include "fboss/agent/hw/HwSwitchFb303Stats.h" #include "fboss/agent/state/ArpEntry.h" @@ -139,16 +138,6 @@ getPlatformMappingForDsfNode(const facebook::fboss::PlatformType platformType) { return nullptr; } -bool withinRange(const cfg::SystemPortRanges& ranges, int64_t id) { - bool inRange{false}; - for (const auto& sysPortRange : *ranges.systemPortRanges()) { - if (id >= *sysPortRange.minimum() && id <= *sysPortRange.maximum()) { - inRange = true; - break; - } - } - return inRange; -} } // namespace // @@ -389,13 +378,25 @@ PortID getPortID( throw FbossError( "switchId: ", switchId, " not found in switchToSwitchInfo"); } - auto sysPortRange = switchInfo->second.systemPortRange(); - CHECK(sysPortRange.has_value()); - auto portIdRange = switchInfo->second.portIdRange(); - CHECK(portIdRange.has_value()); - return PortID( - static_cast(sysPortId) - *sysPortRange->minimum() + - *portIdRange->minimum()); + for (const auto& [matcher, ports] : std::as_const(*state->getPorts())) { + if (HwSwitchMatcher(matcher).switchId() != switchId) { + continue; + } + for (const auto& [_, port] : std::as_const(*ports)) { + if (port->getPortType() == cfg::PortType::FABRIC_PORT) { + continue; + } + if (sysPortId == + getSystemPortID( + port->getID(), + port->getScope(), + switchIdToSwitchInfo, + switchId)) { + return port->getID(); + } + } + } + throw FbossError("No port found for sys port: ", sysPortId); } SystemPortID getSystemPortID( @@ -414,6 +415,28 @@ SystemPortID getSystemPortID( if (!offset.has_value()) { throw FbossError("Global/local offset not set"); } + /* + * System port is 1:1 with every interface and recycle port. + * Interface is 1:1 with system port. + * InterfaceID is chosen to be the same as systemPortID. Thus: + * For multi ASIC switches, the the port ID range minimum must + * taken into account while computing the interface or system port + * IDs + * + * For eg: + * + * ---------------------------------------------- + * | config | asic 0 | asic 1 | + * ---------------------------------------------- + * | sys port range | 100-199 | 200-299 | + * ---------------------------------------------- + * | port range | 0-2047 | 2048-4096 | + * ---------------------------------------------- + * + * Interface of recycle port on asic 1 is 201. + * Port ID of a recycle port in platform mapping will be 2049 + * Interface ID of recycle port = 200 + 2049 - 2048 = 201 + */ auto portIdRange = *switchInfo->second.portIdRange(); auto systemPortId = static_cast(portId) + *offset - *portIdRange.minimum(); @@ -479,22 +502,16 @@ SystemPortID getInbandSystemPortID( *switchInfoItr->second.inbandPortId()); } -bool withinRange(const cfg::SystemPortRanges& ranges, InterfaceID intfId) { - return withinRange(ranges, static_cast(intfId)); -} - -bool withinRange(const cfg::SystemPortRanges& ranges, SystemPortID sysPortId) { - return withinRange(ranges, static_cast(sysPortId)); -} - +// FIXME 2-stage DSF. First sys port range concep does +// not apply for 2-stage DSF cfg::Range64 getFirstSwitchSystemPortIdRange( const std::map& switchToSwitchInfo) { for (const auto& [switchId, switchInfo] : switchToSwitchInfo) { // Only VOQ switches have system ports if (switchInfo.switchType() == cfg::SwitchType::VOQ && switchInfo.switchIndex() == 0) { - CHECK(switchInfo.systemPortRange().has_value()); - return *switchInfo.systemPortRange(); + CHECK(switchInfo.systemPortRanges()->systemPortRanges()->size()); + return *switchInfo.systemPortRanges()->systemPortRanges()->begin(); } } throw FbossError("No VOQ switch with switchIndex 0 found"); @@ -521,6 +538,9 @@ std::vector getPortsForInterface( case cfg::InterfaceType::SYSTEM_PORT: ports.push_back(getPortID(intf->getSystemPortID().value(), state)); break; + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + break; } return ports; } @@ -681,6 +701,9 @@ std::shared_ptr getNeighborEntryForIP( entry = getNeighborEntryForIPAndIntf(intf, ipAddr); break; } + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + break; } return entry; @@ -826,6 +849,25 @@ size_t getNumActiveFabricPorts( }); } +bool isSwitchErrorFirmwareIsolate( + const std::optional& numActiveFabricPortsAtFwIsolate, + const std::shared_ptr& switchSettings) { + // This is invoked from Firmware Isolate context, and thus + // numActiveFabricPortsAtFwIsolate must always have value + CHECK(numActiveFabricPortsAtFwIsolate.has_value()); + + // If the Firmware isolated the device even though the number of active + // fabric links is more than the min links to remain in the VOQ domain, + // then treat it as error. This will be implemented unrecoverable error. + // + // If min links to remain in the VOQ domain is not set, allow to recover. + // In practice, this threshold will always be set. + return switchSettings->getMinLinksToRemainInVOQDomain().has_value() + ? numActiveFabricPortsAtFwIsolate.value() > + switchSettings->getMinLinksToRemainInVOQDomain().value() + : false; +} + /* * SwitchDrainState can be modified from configuration. * However, some VOQ switch implementations require that the switch must be @@ -883,7 +925,16 @@ cfg::SwitchDrainState computeActualSwitchDrainState( newSwitchDrainState = cfg::SwitchDrainState::DRAINED; } break; + case cfg::SwitchDrainState::DRAINED_DUE_TO_ASIC_ERROR: + // This is not a recoverable drain state. + newSwitchDrainState = + cfg::SwitchDrainState::DRAINED_DUE_TO_ASIC_ERROR; + break; } + break; + case cfg::SwitchDrainState::DRAINED_DUE_TO_ASIC_ERROR: + throw FbossError("Valid desired DRAINED states are {DRAINED, UNDRAINED}"); + break; } return newSwitchDrainState; @@ -1040,56 +1091,6 @@ int getRemoteSwitchID( return remoteSwitchId; }; -bool haveParallelLinksToInterfaceNodes( - const cfg::SwitchConfig* cfg, - const std::vector& localFabricSwitchIds, - const std::unordered_map>& - switchNameToSwitchIds, - SwitchIdScopeResolver& scopeResolver, - const PlatformMapping* platformMapping) { - for (const auto& fabricSwitchId : localFabricSwitchIds) { - // Determine parallel links on VD level - there are two VDs per R3 ASIC - std::unordered_map> vd2VoqNeighbors; - for (const auto& port : *cfg->ports()) { - // Only process ports belonging to one switchId - if (scopeResolver.scope(port).has(SwitchID(fabricSwitchId)) && - port.expectedNeighborReachability()->size() > 0) { - auto neighborRemoteSwitchId = - getRemoteSwitchID(cfg, port, switchNameToSwitchIds); - const auto& neighborDsfNodeIter = - cfg->dsfNodes()->find(neighborRemoteSwitchId); - CHECK(neighborDsfNodeIter != cfg->dsfNodes()->end()); - if (*neighborDsfNodeIter->second.type() == - cfg::DsfNodeType::INTERFACE_NODE) { - CHECK(port.name().has_value()); - auto localVirtualDeviceId = - platformMapping->getVirtualDeviceID(*port.name()); - if (!localVirtualDeviceId.has_value()) { - throw FbossError( - "Unable to find virtual device id for port: ", - *port.logicalID(), - " virtual device"); - } - - if (vd2VoqNeighbors.find(localVirtualDeviceId.value()) == - vd2VoqNeighbors.end()) { - vd2VoqNeighbors.insert( - {localVirtualDeviceId.value(), - std::unordered_set()}); - } - auto& voqNeighbors = vd2VoqNeighbors[localVirtualDeviceId.value()]; - const auto& [neighborName, _] = getExpectedNeighborAndPortName(port); - if (voqNeighbors.find(neighborName) != voqNeighbors.end()) { - return true; - } - voqNeighbors.insert(neighborName); - } - } - } - } - return false; -}; - CpuCosQueueId hwQueueIdToCpuCosQueueId( uint8_t hwQueueId, const HwAsic* asic, diff --git a/fboss/agent/Utils.h b/fboss/agent/Utils.h index 6e6e6571d3a6b..0f037025cce23 100644 --- a/fboss/agent/Utils.h +++ b/fboss/agent/Utils.h @@ -85,7 +85,6 @@ inline const int kUdfAclRethDmaLenFieldSizeInBytes(2); class SwitchState; class Interface; class SwitchSettings; -class SwitchIdScopeResolver; class PlatformMapping; struct AgentConfig; class HwAsic; @@ -276,9 +275,6 @@ std::vector getPortsForInterface( InterfaceID intf, const std::shared_ptr& state); -bool withinRange(const cfg::SystemPortRanges& ranges, InterfaceID intfId); - -bool withinRange(const cfg::SystemPortRanges& ranges, SystemPortID sysPortId); /* * An NPU switch injects a broadcast message such as neighbor solicitation or * advertisement via pipeline lookup. ASIC forwards these messages to all the @@ -413,6 +409,10 @@ size_t getNumActiveFabricPorts( const std::shared_ptr& state, const HwSwitchMatcher& matcher); +bool isSwitchErrorFirmwareIsolate( + const std::optional& numActiveFabricPortsAtFwIsolate, + const std::shared_ptr& switchSettings); + cfg::SwitchDrainState computeActualSwitchDrainState( const std::shared_ptr& switchSettings, int numActiveFabricPorts); @@ -443,14 +443,6 @@ int getRemoteSwitchID( const std::unordered_map>& switchNameToSwitchIds); -bool haveParallelLinksToInterfaceNodes( - const cfg::SwitchConfig* cfg, - const std::vector& localFabricSwitchIds, - const std::unordered_map>& - switchNameToSwitchIds, - SwitchIdScopeResolver& scopeResolver, - const PlatformMapping* platformMapping); - CpuCosQueueId hwQueueIdToCpuCosQueueId( uint8_t hwQueueId, const HwAsic* asic, diff --git a/fboss/agent/VoqUtils.cpp b/fboss/agent/VoqUtils.cpp new file mode 100644 index 0000000000000..2b0a9b4eedfae --- /dev/null +++ b/fboss/agent/VoqUtils.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2004-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#include "fboss/agent/VoqUtils.h" + +#include "fboss/agent/AgentFeatures.h" + +namespace facebook::fboss { + +int getNumVoqs(cfg::PortType portType, cfg::Scope portScope) { + if (!isDualStage3Q2QMode()) { + return 8; + } + if (FLAGS_dual_stage_edsw_3q_2q) { + return 3; + } + CHECK(FLAGS_dual_stage_rdsw_3q_2q); + if (portType == cfg::PortType::MANAGEMENT_PORT || + (portType == cfg::PortType::RECYCLE_PORT && + portScope == cfg::Scope::GLOBAL)) { + return 2; + } + return 3; +} +} // namespace facebook::fboss diff --git a/fboss/agent/hw/oss/HwBasePortFb303Stats.cpp b/fboss/agent/VoqUtils.h similarity index 55% rename from fboss/agent/hw/oss/HwBasePortFb303Stats.cpp rename to fboss/agent/VoqUtils.h index a7d613f929d2f..ae42f594571e4 100644 --- a/fboss/agent/hw/oss/HwBasePortFb303Stats.cpp +++ b/fboss/agent/VoqUtils.h @@ -7,14 +7,12 @@ * of patent rights can be found in the PATENTS file in the same directory. * */ +#pragma once -#include "fboss/agent/hw/HwBasePortFb303Stats.h" +#include "fboss/agent/gen-cpp2/switch_config_types.h" namespace facebook::fboss { -void HwBasePortFb303Stats::updateQueueWatermarkStats( - const std::map& - /*queueWatermarks*/) const {} -void HwBasePortFb303Stats::updateEgressGvoqWatermarkStats( - const std::map& /*gvoqWatermarks*/) const {} +int getNumVoqs(cfg::PortType portType, cfg::Scope portScope); + } // namespace facebook::fboss diff --git a/fboss/agent/hw/BUCK b/fboss/agent/hw/BUCK index 9c610f5579f4d..ebf35231ab5be 100644 --- a/fboss/agent/hw/BUCK +++ b/fboss/agent/hw/BUCK @@ -175,7 +175,6 @@ cpp_library( "HwBasePortFb303Stats.cpp", "HwPortFb303Stats.cpp", "HwSysPortFb303Stats.cpp", - "facebook/HwBasePortFb303Stats.cpp", ], exported_deps = [ ":counter_utils", diff --git a/fboss/agent/hw/HwBasePortFb303Stats.cpp b/fboss/agent/hw/HwBasePortFb303Stats.cpp index 50903a026f2ff..09c5ec61c0417 100644 --- a/fboss/agent/hw/HwBasePortFb303Stats.cpp +++ b/fboss/agent/hw/HwBasePortFb303Stats.cpp @@ -16,6 +16,24 @@ #include #include +#include "common/stats/DynamicStats.h" + +namespace { + +DEFINE_dynamic_quantile_stat( + buffer_watermark_ucast, + "buffer_watermark_ucast.{}.{}.{}", + facebook::fb303::ExportTypeConsts::kNone, + std::array{{1.0}}); + +DEFINE_dynamic_quantile_stat( + egress_gvoq_watermark, + "egress_gvoq_watermark.{}.{}.{}", + facebook::fb303::ExportTypeConsts::kNone, + std::array{{1.0}}); + +} // unnamed namespace + namespace facebook::fboss { std::string HwBasePortFb303Stats::statName( @@ -154,7 +172,6 @@ void HwBasePortFb303Stats::queueChanged( } void HwBasePortFb303Stats::queueRemoved(int queueId) { - auto qitr = queueId2Name_.find(queueId); for (auto statKey : kQueueMonotonicCounterStatKeys()) { portCounters_.removeStat( statName(statKey, portName_, queueId, queueId2Name_[queueId])); @@ -225,4 +242,30 @@ void HwBasePortFb303Stats::updateStat( int64_t val) { portCounters_.updateStat(now, statName(statKey, portName_, priority), val); } + +void HwBasePortFb303Stats::updateQueueWatermarkStats( + const std::map& queueWatermarks) const { + for (const auto& [queueId, queueName] : queueId2Name_) { + auto watermarkItr = queueWatermarks.find(queueId); + CHECK(watermarkItr != queueWatermarks.end()); + STATS_buffer_watermark_ucast.addValue( + watermarkItr->second, + portName_, + folly::to("queue", queueId), + queueName); + } +} + +void HwBasePortFb303Stats::updateEgressGvoqWatermarkStats( + const std::map& gvoqWatermarks) const { + for (const auto& [queueId, queueName] : queueId2Name_) { + auto watermarkItr = gvoqWatermarks.find(queueId); + CHECK(watermarkItr != gvoqWatermarks.end()); + STATS_egress_gvoq_watermark.addValue( + watermarkItr->second, + portName_, + folly::to("queue", queueId), + queueName); + } +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/HwCpuFb303Stats.cpp b/fboss/agent/hw/HwCpuFb303Stats.cpp index 2ef2879706109..8f4a78835d552 100644 --- a/fboss/agent/hw/HwCpuFb303Stats.cpp +++ b/fboss/agent/hw/HwCpuFb303Stats.cpp @@ -66,7 +66,6 @@ void HwCpuFb303Stats::queueChanged(int queueId, const std::string& queueName) { } void HwCpuFb303Stats::queueRemoved(int queueId) { - auto qitr = queueId2Name_.find(queueId); for (auto statKey : kQueueMonotonicCounterStatKeys()) { queueCounters_.removeStat( statName(statKey, queueId, queueId2Name_[queueId])); diff --git a/fboss/agent/hw/HwPortFb303Stats.cpp b/fboss/agent/hw/HwPortFb303Stats.cpp index fac57cec49f18..a90d6b848ed1a 100644 --- a/fboss/agent/hw/HwPortFb303Stats.cpp +++ b/fboss/agent/hw/HwPortFb303Stats.cpp @@ -52,6 +52,7 @@ HwPortFb303Stats::kPortMonotonicCounterStatKeys() const { kOutForwardingDiscards(), kPqpErrorEgressDroppedPackets(), kFabricLinkDownDroppedCells(), + kLinkLayerFlowControlWatermark(), }; return kPortKeys; } @@ -224,6 +225,12 @@ void HwPortFb303Stats::updateStats( statName(kDataCellsFilterOn(), portName()), *curPortStats.dataCellsFilterOn() ? 1 : 0); } + if (curPortStats.linkLayerFlowControlWatermark_().has_value()) { + updateStat( + timeRetrieved_, + kLinkLayerFlowControlWatermark(), + *curPortStats.linkLayerFlowControlWatermark_()); + } // Update queue stats auto updateQueueStat = [this]( diff --git a/fboss/agent/hw/HwSwitchFb303Stats.cpp b/fboss/agent/hw/HwSwitchFb303Stats.cpp index 2d27bf0c9ab83..d9e80a8b77be7 100644 --- a/fboss/agent/hw/HwSwitchFb303Stats.cpp +++ b/fboss/agent/hw/HwSwitchFb303Stats.cpp @@ -153,6 +153,26 @@ HwSwitchFb303Stats::HwSwitchFb303Stats( getCounterPrefix() + "deleted_credit_bytes", SUM, RATE), + rqpFabricCellCorruptionDrops_( + map, + getCounterPrefix() + "rqp_fabric_cell_corruption_drops", + SUM, + RATE), + rqpNonFabricCellCorruptionDrops_( + map, + getCounterPrefix() + "rqp_non_fabric_cell_corruption_drops", + SUM, + RATE), + rqpNonFabricCellMissingDrops_( + map, + getCounterPrefix() + "rqp_non_fabric_cell_missing_drops", + SUM, + RATE), + rqpParityErrorDrops_( + map, + getCounterPrefix() + "rqp_parity_error_drops", + SUM, + RATE), fabricReachabilityMissingCount_( map, getCounterPrefix() + "fabric_reachability_missing"), @@ -176,6 +196,11 @@ HwSwitchFb303Stats::HwSwitchFb303Stats( getCounterPrefix() + vendor + ".aligner.errors", SUM, RATE), + reassemblyErrors_( + map, + getCounterPrefix() + vendor + ".reassembly.errors", + SUM, + RATE), forwardingQueueProcessorErrors_( map, getCounterPrefix() + vendor + ".forwardingQueueProcessor.errors", @@ -286,6 +311,27 @@ void HwSwitchFb303Stats::update(const HwSwitchDropStats& dropStats) { *dropStats.missingCellPacketIntegrityDrops() - currentDropStats_.missingCellPacketIntegrityDrops().value_or(0)); } + if (dropStats.rqpFabricCellCorruptionDrops().has_value()) { + rqpFabricCellCorruptionDrops_.addValue( + *dropStats.rqpFabricCellCorruptionDrops() - + currentDropStats_.rqpFabricCellCorruptionDrops().value_or(0)); + } + if (dropStats.rqpNonFabricCellCorruptionDrops().has_value()) { + rqpNonFabricCellCorruptionDrops_.addValue( + *dropStats.rqpNonFabricCellCorruptionDrops() - + currentDropStats_.rqpNonFabricCellCorruptionDrops().value_or(0)); + } + if (dropStats.rqpNonFabricCellMissingDrops().has_value()) { + rqpNonFabricCellMissingDrops_.addValue( + *dropStats.rqpNonFabricCellMissingDrops() - + currentDropStats_.rqpNonFabricCellMissingDrops().value_or(0)); + } + if (dropStats.rqpParityErrorDrops().has_value()) { + rqpParityErrorDrops_.addValue( + *dropStats.rqpParityErrorDrops() - + currentDropStats_.rqpParityErrorDrops().value_or(0)); + } + currentDropStats_ = dropStats; } @@ -339,6 +385,10 @@ int64_t HwSwitchFb303Stats::getAlignerErrors() const { return getCumulativeValue(alignerErrors_); } +int64_t HwSwitchFb303Stats::getReassemblyErrors() const { + return getCumulativeValue(reassemblyErrors_); +} + int64_t HwSwitchFb303Stats::getForwardingQueueProcessorErrors() const { return getCumulativeValue(forwardingQueueProcessorErrors_); } @@ -401,6 +451,7 @@ HwAsicErrors HwSwitchFb303Stats::getHwAsicErrors() const { asicErrors.alignerErrors() = getAlignerErrors(); asicErrors.forwardingQueueProcessorErrors() = getForwardingQueueProcessorErrors(); + asicErrors.reassemblyErrors() = getReassemblyErrors(); asicErrors.allReassemblyContextsTaken() = getAllReassemblyContextsTakenError(); return asicErrors; diff --git a/fboss/agent/hw/HwSwitchFb303Stats.h b/fboss/agent/hw/HwSwitchFb303Stats.h index 4fa9fb76ed7ba..0d9a81ef039b7 100644 --- a/fboss/agent/hw/HwSwitchFb303Stats.h +++ b/fboss/agent/hw/HwSwitchFb303Stats.h @@ -80,6 +80,9 @@ class HwSwitchFb303Stats { void allReassemblyContextsTaken() { allReassemblyContextsTaken_.addValue(1); } + void reassemblyError() { + reassemblyErrors_.addValue(1); + } void hwInitializedTime(uint64_t ms) { hwInitializedTimeMs_.addValue(ms); } @@ -163,6 +166,7 @@ class HwSwitchFb303Stats { int64_t getItppErrors() const; int64_t getEpniErrors() const; int64_t getAlignerErrors() const; + int64_t getReassemblyErrors() const; int64_t getForwardingQueueProcessorErrors() const; int64_t getAllReassemblyContextsTakenError() const; @@ -237,6 +241,11 @@ class HwSwitchFb303Stats { TLTimeseries dramBlockedTimeNsec_; // Credit stats TLTimeseries deletedCreditBytes_; + // RQP errors + TLTimeseries rqpFabricCellCorruptionDrops_; + TLTimeseries rqpNonFabricCellCorruptionDrops_; + TLTimeseries rqpNonFabricCellMissingDrops_; + TLTimeseries rqpParityErrorDrops_; // fabric reachability errors TLCounter fabricReachabilityMissingCount_; TLCounter fabricReachabilityMismatchCount_; @@ -247,6 +256,7 @@ class HwSwitchFb303Stats { TLTimeseries itppErrors_; TLTimeseries epniErrors_; TLTimeseries alignerErrors_; + TLTimeseries reassemblyErrors_; TLTimeseries forwardingQueueProcessorErrors_; TLTimeseries allReassemblyContextsTaken_; TLTimeseries hwInitializedTimeMs_; diff --git a/fboss/agent/hw/HwSwitchWarmBootHelper.cpp b/fboss/agent/hw/HwSwitchWarmBootHelper.cpp index 4beb3245cefe2..80658163d79ed 100644 --- a/fboss/agent/hw/HwSwitchWarmBootHelper.cpp +++ b/fboss/agent/hw/HwSwitchWarmBootHelper.cpp @@ -19,8 +19,6 @@ #include #include #include -#include -#include #include "fboss/lib/CommonFileUtils.h" DEFINE_string( diff --git a/fboss/agent/hw/StatsConstants.h b/fboss/agent/hw/StatsConstants.h index e66f57e889a7d..3ce4b9c15b3ff 100644 --- a/fboss/agent/hw/StatsConstants.h +++ b/fboss/agent/hw/StatsConstants.h @@ -307,4 +307,8 @@ inline folly::StringPiece constexpr kCableLengthMeters() { inline folly::StringPiece constexpr kDataCellsFilterOn() { return "data_cells_filter_on"; } + +inline folly::StringPiece constexpr kLinkLayerFlowControlWatermark() { + return "link_layer_flow_control_watermark"; +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/bcm/BcmAclStat.cpp b/fboss/agent/hw/bcm/BcmAclStat.cpp index f71256e17735a..86b6dbacad5a7 100644 --- a/fboss/agent/hw/bcm/BcmAclStat.cpp +++ b/fboss/agent/hw/bcm/BcmAclStat.cpp @@ -16,10 +16,6 @@ #include "fboss/agent/hw/bcm/BcmIngressFieldProcessorFlexCounter.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/BcmWarmBootCache.h" -#include "fboss/agent/state/AclEntry.h" - -#include -#include extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmBstStatsMgr.cpp b/fboss/agent/hw/bcm/BcmBstStatsMgr.cpp index 5c8b365359261..416e58fe5faed 100644 --- a/fboss/agent/hw/bcm/BcmBstStatsMgr.cpp +++ b/fboss/agent/hw/bcm/BcmBstStatsMgr.cpp @@ -18,9 +18,7 @@ #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -extern "C" { -#include -} +extern "C" {} namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/BcmControlPlaneQueueManager.cpp b/fboss/agent/hw/bcm/BcmControlPlaneQueueManager.cpp index fb37f7acd82f0..04d3b713265a3 100644 --- a/fboss/agent/hw/bcm/BcmControlPlaneQueueManager.cpp +++ b/fboss/agent/hw/bcm/BcmControlPlaneQueueManager.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/bcm/BcmControlPlaneQueueManager.h" -#include #include #include "fboss/agent/hw/StatsConstants.h" @@ -21,7 +20,6 @@ #include "fboss/agent/hw/switch_asics/HwAsic.h" extern "C" { -#include #include } diff --git a/fboss/agent/hw/bcm/BcmCosManager.cpp b/fboss/agent/hw/bcm/BcmCosManager.cpp index 2a344ad80dfa9..cfa4371d67aa8 100644 --- a/fboss/agent/hw/bcm/BcmCosManager.cpp +++ b/fboss/agent/hw/bcm/BcmCosManager.cpp @@ -9,18 +9,13 @@ */ #include "fboss/agent/hw/bcm/BcmCosManager.h" -#include - #include "fboss/agent/hw/bcm/BcmControlPlane.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmPlatform.h" #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" extern "C" { #include -#include -#include #include #include } diff --git a/fboss/agent/hw/bcm/BcmCosManager.h b/fboss/agent/hw/bcm/BcmCosManager.h index 99455e86c722c..839372d39ad17 100644 --- a/fboss/agent/hw/bcm/BcmCosManager.h +++ b/fboss/agent/hw/bcm/BcmCosManager.h @@ -23,7 +23,7 @@ extern "C" { namespace facebook::fboss { -class PortID; +struct PortID; class BcmSwitch; class BcmCosManager { diff --git a/fboss/agent/hw/bcm/BcmCosQueueManagerUtils.cpp b/fboss/agent/hw/bcm/BcmCosQueueManagerUtils.cpp index 11944cd7e2fd2..a9daebee3c3cd 100644 --- a/fboss/agent/hw/bcm/BcmCosQueueManagerUtils.cpp +++ b/fboss/agent/hw/bcm/BcmCosQueueManagerUtils.cpp @@ -179,6 +179,14 @@ PortQueueFields getPortQueueFields( return queue; } +template +AsicT makeAsic() { + cfg::SwitchInfo switchInfo; + switchInfo.switchIndex() = 0; + switchInfo.switchType() = cfg::SwitchType::NPU; + switchInfo.switchMac() = folly::MacAddress().toString(); + return AsicT{0, switchInfo}; +} } // namespace namespace facebook::fboss::utility { @@ -220,9 +228,7 @@ bcm_cosq_stat_t getBcmCosqStatType( const PortQueue& getTD2DefaultUCPortQueueSettings() { // Since the default queue is constant, we can use static to cache this // object here. - folly::MacAddress mac; - static Trident2Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -244,9 +250,7 @@ const PortQueue& getTD2DefaultUCPortQueueSettings() { } const PortQueue& getTHDefaultUCPortQueueSettings() { - folly::MacAddress mac; - static TomahawkAsic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -268,9 +272,7 @@ const PortQueue& getTHDefaultUCPortQueueSettings() { } const PortQueue& getTH3DefaultUCPortQueueSettings() { - folly::MacAddress mac; - static Tomahawk3Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -292,9 +294,7 @@ const PortQueue& getTH3DefaultUCPortQueueSettings() { } const PortQueue& getTH4DefaultUCPortQueueSettings() { - folly::MacAddress mac; - static Tomahawk4Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -316,9 +316,7 @@ const PortQueue& getTH4DefaultUCPortQueueSettings() { } const PortQueue& getTD2DefaultMCPortQueueSettings() { - folly::MacAddress mac; - static Trident2Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -340,9 +338,7 @@ const PortQueue& getTD2DefaultMCPortQueueSettings() { } const PortQueue& getTHDefaultMCPortQueueSettings() { - folly::MacAddress mac; - static TomahawkAsic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -364,9 +360,7 @@ const PortQueue& getTHDefaultMCPortQueueSettings() { } const PortQueue& getTH3DefaultMCPortQueueSettings() { - folly::MacAddress mac; - static Tomahawk3Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -388,9 +382,7 @@ const PortQueue& getTH3DefaultMCPortQueueSettings() { } const PortQueue& getTH4DefaultMCPortQueueSettings() { - folly::MacAddress mac; - static Tomahawk4Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -447,9 +439,7 @@ const PortQueue& getDefaultPortQueueSettings( } const PortQueue& getTD2DefaultMCCPUQueueSettings() { - folly::MacAddress mac; - static Trident2Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -471,9 +461,7 @@ const PortQueue& getTD2DefaultMCCPUQueueSettings() { } const PortQueue& getTHDefaultMCCPUQueueSettings() { - folly::MacAddress mac; - static TomahawkAsic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -495,9 +483,7 @@ const PortQueue& getTHDefaultMCCPUQueueSettings() { } const PortQueue& getTH3DefaultMCCPUQueueSettings() { - folly::MacAddress mac; - static Tomahawk3Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, @@ -519,9 +505,7 @@ const PortQueue& getTH3DefaultMCCPUQueueSettings() { } const PortQueue& getTH4DefaultMCCPUQueueSettings() { - folly::MacAddress mac; - static Tomahawk4Asic asic{ - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac}; + static const auto asic = makeAsic(); static const PortQueue kPortQueue{getPortQueueFields( kDefaultPortQueueId, kDefaultPortQueueScheduling, diff --git a/fboss/agent/hw/bcm/BcmEgress.cpp b/fboss/agent/hw/bcm/BcmEgress.cpp index 6f89b560f938f..8d65812951d19 100644 --- a/fboss/agent/hw/bcm/BcmEgress.cpp +++ b/fboss/agent/hw/bcm/BcmEgress.cpp @@ -9,8 +9,6 @@ */ #include "fboss/agent/hw/bcm/BcmEgress.h" -#include "fboss/agent/Constants.h" -#include "fboss/agent/Utils.h" #include "fboss/agent/hw/bcm/BcmEcmpUtils.h" #include "fboss/agent/hw/bcm/BcmEgressManager.h" #include "fboss/agent/hw/bcm/BcmError.h" diff --git a/fboss/agent/hw/bcm/BcmEgressQueueFlexCounter.cpp b/fboss/agent/hw/bcm/BcmEgressQueueFlexCounter.cpp index bc32483b18ae2..bd7b8b0e652c0 100644 --- a/fboss/agent/hw/bcm/BcmEgressQueueFlexCounter.cpp +++ b/fboss/agent/hw/bcm/BcmEgressQueueFlexCounter.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/bcm/BcmCosQueueCounterType.h" #include "fboss/agent/hw/bcm/BcmCosQueueManagerUtils.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmSdkVer.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" diff --git a/fboss/agent/hw/bcm/BcmFlexCounter.cpp b/fboss/agent/hw/bcm/BcmFlexCounter.cpp index 0c8d4df1b9078..081b60bbac2c2 100644 --- a/fboss/agent/hw/bcm/BcmFlexCounter.cpp +++ b/fboss/agent/hw/bcm/BcmFlexCounter.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/bcm/BcmFlexCounter.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmSdkVer.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmHost.cpp b/fboss/agent/hw/bcm/BcmHost.cpp index 47d9e5b6e6891..770fd55947740 100644 --- a/fboss/agent/hw/bcm/BcmHost.cpp +++ b/fboss/agent/hw/bcm/BcmHost.cpp @@ -13,15 +13,12 @@ #include #include -#include "fboss/agent/Constants.h" #include "fboss/agent/hw/bcm/BcmAclEntry.h" #include "fboss/agent/hw/bcm/BcmClassIDUtil.h" #include "fboss/agent/hw/bcm/BcmEgress.h" #include "fboss/agent/hw/bcm/BcmEgressManager.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmIntf.h" #include "fboss/agent/hw/bcm/BcmMultiPathNextHop.h" -#include "fboss/agent/hw/bcm/BcmNextHop.h" #include "fboss/agent/hw/bcm/BcmPort.h" #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/BcmRoute.h" @@ -29,7 +26,6 @@ #include "fboss/agent/hw/bcm/BcmTrunkTable.h" #include "fboss/agent/hw/bcm/BcmWarmBootCache.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -#include "fboss/agent/state/Interface.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmIngressFieldProcessorFlexCounter.cpp b/fboss/agent/hw/bcm/BcmIngressFieldProcessorFlexCounter.cpp index 4f1971269adee..ca62466eec140 100644 --- a/fboss/agent/hw/bcm/BcmIngressFieldProcessorFlexCounter.cpp +++ b/fboss/agent/hw/bcm/BcmIngressFieldProcessorFlexCounter.cpp @@ -11,7 +11,6 @@ #include #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmSdkVer.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmLabeledTunnel.cpp b/fboss/agent/hw/bcm/BcmLabeledTunnel.cpp index 904e4b74591a8..65c47b7396584 100644 --- a/fboss/agent/hw/bcm/BcmLabeledTunnel.cpp +++ b/fboss/agent/hw/bcm/BcmLabeledTunnel.cpp @@ -4,7 +4,6 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmHost.h" -#include "fboss/agent/hw/bcm/BcmHostKey.h" #include "fboss/agent/hw/bcm/BcmIntf.h" #include "fboss/agent/hw/bcm/BcmQosPolicyTable.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" diff --git a/fboss/agent/hw/bcm/BcmMirror.cpp b/fboss/agent/hw/bcm/BcmMirror.cpp index 242544b18390e..6921de25f3b0c 100644 --- a/fboss/agent/hw/bcm/BcmMirror.cpp +++ b/fboss/agent/hw/bcm/BcmMirror.cpp @@ -13,8 +13,6 @@ #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/state/Mirror.h" -#include - #include #include #include diff --git a/fboss/agent/hw/bcm/BcmPlatform.cpp b/fboss/agent/hw/bcm/BcmPlatform.cpp index 0faab35cf049d..34de0c2992105 100644 --- a/fboss/agent/hw/bcm/BcmPlatform.cpp +++ b/fboss/agent/hw/bcm/BcmPlatform.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/SysError.h" #include "fboss/agent/hw/bcm/BcmAPI.h" -#include "fboss/agent/hw/bcm/BcmConfig.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" DEFINE_bool( diff --git a/fboss/agent/hw/bcm/BcmPort.cpp b/fboss/agent/hw/bcm/BcmPort.cpp index 8b88052dfd1e5..77fc7a2e47617 100644 --- a/fboss/agent/hw/bcm/BcmPort.cpp +++ b/fboss/agent/hw/bcm/BcmPort.cpp @@ -439,12 +439,16 @@ void BcmPort::reinitPortFdrStats(const std::shared_ptr& swPort) { statName(getFdrStatsKey(i), portName), fb303::ExportTypeConsts::kSumRate); } + codewordStats_[i] = 0; } // In case max errors got reduced due to FEC mode changes while (fdrStats_.size() > fecMaxErrors) { fdrStats_.pop_back(); } + std::erase_if(codewordStats_, [fecMaxErrors](auto& kv) { + return kv.first > fecMaxErrors; + }); } BcmPort::BcmPort(BcmSwitch* hw, bcm_port_t port, BcmPlatformPort* platformPort) @@ -1219,6 +1223,11 @@ phy::PhyInfo BcmPort::updateIPhyInfo() { lastRsFec = *lastFec; } } + if (hw_->getPlatform()->getAsic()->isSupported( + HwAsic::Feature::FEC_DIAG_COUNTERS)) { + rsFec.codewordStats() = codewordStats_; + utility::updateFecTail(rsFec, lastRsFec); + } std::optional correctedBitsFromHw; #if defined(BCM_SDK_VERSION_GTE_6_5_26) if (hw_->getPlatform()->getAsic()->isSupported( @@ -1625,6 +1634,7 @@ void BcmPort::updateFdrStats(__attribute__((unused)) std::chrono::seconds now) { for (int i = 0; i < kCodewordErrorsPageSize; ++i) { fdrStats_[i].incrementValue(now, increments[i]); + codewordStats_[i] += increments[i]; } if (pages > 1) { @@ -2011,6 +2021,7 @@ void BcmPort::disableStatCollection() { HwAsic::Feature::FEC_DIAG_COUNTERS)) { fdrStatConfigure(unit_, port_, false); fdrStats_.clear(); + codewordStats_.clear(); } destroyAllPortStatsLocked(lockedPortStatsPtr); diff --git a/fboss/agent/hw/bcm/BcmPort.h b/fboss/agent/hw/bcm/BcmPort.h index 468045d70fe39..f97adc844b7b6 100644 --- a/fboss/agent/hw/bcm/BcmPort.h +++ b/fboss/agent/hw/bcm/BcmPort.h @@ -415,6 +415,7 @@ class BcmPort { fb303::ExportedHistogramMapImpl::LockableHistogram outPktLengths_; int codewordErrorsPage_{0}; + std::map codewordStats_; folly::Synchronized> programmedSettings_; diff --git a/fboss/agent/hw/bcm/BcmPortIngressBufferManager.cpp b/fboss/agent/hw/bcm/BcmPortIngressBufferManager.cpp index 9c5bb369a134a..371a99a8ff4fc 100644 --- a/fboss/agent/hw/bcm/BcmPortIngressBufferManager.cpp +++ b/fboss/agent/hw/bcm/BcmPortIngressBufferManager.cpp @@ -289,6 +289,14 @@ void BcmPortIngressBufferManager::programLosslessMode( if (const auto& pgConfigs = port->getPortPgConfigs()) { for (const auto& pgConfig : *pgConfigs) { if (pgConfig->cref()) { + // This is a disruptive flag. Check if headroomLimit is not zero before + // enabling lossless configuration + if (FLAGS_fix_lossless_mode_per_pg) { + if (pgConfig->cref()->cref() == + 0) { + continue; + } + } losslessPgList.insert(pgConfig->cref()->cref()); } } diff --git a/fboss/agent/hw/bcm/BcmPortTable.cpp b/fboss/agent/hw/bcm/BcmPortTable.cpp index 40711a0f1bf2f..253e88f38b66a 100644 --- a/fboss/agent/hw/bcm/BcmPortTable.cpp +++ b/fboss/agent/hw/bcm/BcmPortTable.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/bcm/BcmPortTable.h" -#include "common/stats/MonotonicCounter.h" #include "fboss/agent/AgentConfig.h" #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmPlatform.h" diff --git a/fboss/agent/hw/bcm/BcmPortUtils.cpp b/fboss/agent/hw/bcm/BcmPortUtils.cpp index f671e8c91315b..38af5f587f194 100644 --- a/fboss/agent/hw/bcm/BcmPortUtils.cpp +++ b/fboss/agent/hw/bcm/BcmPortUtils.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/platforms/common/PlatformMapping.h" #include #include diff --git a/fboss/agent/hw/bcm/BcmPtpTcMgr.cpp b/fboss/agent/hw/bcm/BcmPtpTcMgr.cpp index 64d7e879dfd97..c73cece238c7b 100644 --- a/fboss/agent/hw/bcm/BcmPtpTcMgr.cpp +++ b/fboss/agent/hw/bcm/BcmPtpTcMgr.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" #include "fboss/agent/hw/bcm/BcmPlatform.h" #include "fboss/agent/hw/bcm/BcmPortTable.h" -#include "fboss/agent/state/SwitchState.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmQosMap.cpp b/fboss/agent/hw/bcm/BcmQosMap.cpp index d316f76aabdd5..f9fe6ae48786b 100644 --- a/fboss/agent/hw/bcm/BcmQosMap.cpp +++ b/fboss/agent/hw/bcm/BcmQosMap.cpp @@ -13,9 +13,7 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmPortQueueManager.h" #include "fboss/agent/hw/bcm/BcmQosMapEntry.h" -#include "fboss/agent/hw/bcm/BcmQosPolicy.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" -#include "fboss/agent/state/QosPolicy.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/BcmQosMapEntry.cpp b/fboss/agent/hw/bcm/BcmQosMapEntry.cpp index 6171709f9de96..f6f7b2b465960 100644 --- a/fboss/agent/hw/bcm/BcmQosMapEntry.cpp +++ b/fboss/agent/hw/bcm/BcmQosMapEntry.cpp @@ -11,11 +11,8 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/bcm/BcmQosMap.h" -#include "fboss/agent/hw/bcm/BcmQosPolicy.h" #include "fboss/agent/hw/bcm/BcmError.h" -#include "fboss/agent/hw/bcm/BcmPortQueueManager.h" -#include "fboss/agent/hw/bcm/BcmSwitch.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/BcmQosPolicyTable.cpp b/fboss/agent/hw/bcm/BcmQosPolicyTable.cpp index f397a68fb5f8e..19e1fcd517281 100644 --- a/fboss/agent/hw/bcm/BcmQosPolicyTable.cpp +++ b/fboss/agent/hw/bcm/BcmQosPolicyTable.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/bcm/BcmPortQueueManager.h" #include "fboss/agent/hw/bcm/BcmQosPolicy.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" -#include "fboss/agent/hw/bcm/types.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/BcmRoute.cpp b/fboss/agent/hw/bcm/BcmRoute.cpp index 41c523ea7ab32..aa20ca7d3542e 100644 --- a/fboss/agent/hw/bcm/BcmRoute.cpp +++ b/fboss/agent/hw/bcm/BcmRoute.cpp @@ -17,7 +17,6 @@ extern "C" { #include #include #include -#include "fboss/agent/Constants.h" #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmIntf.h" #include "fboss/agent/hw/bcm/BcmMultiPathNextHop.h" diff --git a/fboss/agent/hw/bcm/BcmRouteCounter.cpp b/fboss/agent/hw/bcm/BcmRouteCounter.cpp index 5cc8733c80c14..2ba2a7064f351 100644 --- a/fboss/agent/hw/bcm/BcmRouteCounter.cpp +++ b/fboss/agent/hw/bcm/BcmRouteCounter.cpp @@ -13,7 +13,6 @@ extern "C" { } #include -#include "fboss/agent/Constants.h" #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmPlatform.h" #include "fboss/agent/hw/bcm/BcmRouteCounter.h" diff --git a/fboss/agent/hw/bcm/BcmRxPacket.cpp b/fboss/agent/hw/bcm/BcmRxPacket.cpp index 80556f28294f0..5fcabcd6cb5e4 100644 --- a/fboss/agent/hw/bcm/BcmRxPacket.cpp +++ b/fboss/agent/hw/bcm/BcmRxPacket.cpp @@ -146,7 +146,6 @@ FbBcmRxPacket::FbBcmRxPacket( } else { // PKTIO #ifdef INCLUDE_PKTIO bcm_pktio_pkt_t* pkt = bcmPacket.ptrUnion.pktioPkt; - bcm_pktio_fid_support_t support; uint32 val; auto rv = bcm_pktio_pmd_field_get( diff --git a/fboss/agent/hw/bcm/BcmStatUpdater.cpp b/fboss/agent/hw/bcm/BcmStatUpdater.cpp index 1d1cf134f5c53..b5c6c67028435 100644 --- a/fboss/agent/hw/bcm/BcmStatUpdater.cpp +++ b/fboss/agent/hw/bcm/BcmStatUpdater.cpp @@ -23,8 +23,6 @@ #include "fboss/lib/config/PlatformConfigUtils.h" -#include - #include extern "C" { diff --git a/fboss/agent/hw/bcm/BcmTableStats.cpp b/fboss/agent/hw/bcm/BcmTableStats.cpp index 25bf4435b38c3..ea137a1d457fd 100644 --- a/fboss/agent/hw/bcm/BcmTableStats.cpp +++ b/fboss/agent/hw/bcm/BcmTableStats.cpp @@ -16,7 +16,6 @@ #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -#include #include #include #include "fboss/agent/hw/gen-cpp2/hardware_stats_constants.h" diff --git a/fboss/agent/hw/bcm/BcmTeFlowEntry.cpp b/fboss/agent/hw/bcm/BcmTeFlowEntry.cpp index dde34756f2363..73b3923fb21af 100644 --- a/fboss/agent/hw/bcm/BcmTeFlowEntry.cpp +++ b/fboss/agent/hw/bcm/BcmTeFlowEntry.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/hw/bcm/BcmExactMatchUtils.h" #include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" #include "fboss/agent/hw/bcm/BcmMultiPathNextHop.h" -#include "fboss/agent/hw/bcm/BcmPlatform.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/BcmTeFlowTable.h" #include "fboss/agent/hw/bcm/BcmWarmBootCache.h" diff --git a/fboss/agent/hw/bcm/BcmTrunkStats.cpp b/fboss/agent/hw/bcm/BcmTrunkStats.cpp index e73cc41726213..dae23cbdad023 100644 --- a/fboss/agent/hw/bcm/BcmTrunkStats.cpp +++ b/fboss/agent/hw/bcm/BcmTrunkStats.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/hw/CounterUtils.h" #include "fboss/agent/hw/HwTrunkCounters.h" -#include "fboss/agent/hw/StatsConstants.h" #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" diff --git a/fboss/agent/hw/bcm/BcmUdfGroup.cpp b/fboss/agent/hw/bcm/BcmUdfGroup.cpp index ea3ad1621568f..7d1b21144730d 100644 --- a/fboss/agent/hw/bcm/BcmUdfGroup.cpp +++ b/fboss/agent/hw/bcm/BcmUdfGroup.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/BcmWarmBootCache.h" -#include "fboss/agent/hw/switch_asics/HwAsic.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/BcmWarmBootCache.cpp b/fboss/agent/hw/bcm/BcmWarmBootCache.cpp index 0ba432d3c46b2..b53b36a8e4180 100644 --- a/fboss/agent/hw/bcm/BcmWarmBootCache.cpp +++ b/fboss/agent/hw/bcm/BcmWarmBootCache.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include @@ -32,12 +31,9 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmExactMatchUtils.h" #include "fboss/agent/hw/bcm/BcmFieldProcessorFBConvertors.h" -#include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" #include "fboss/agent/hw/bcm/BcmHost.h" -#include "fboss/agent/hw/bcm/BcmMirrorTable.h" #include "fboss/agent/hw/bcm/BcmMirrorUtils.h" #include "fboss/agent/hw/bcm/BcmPlatform.h" -#include "fboss/agent/hw/bcm/BcmPortQueueManager.h" #include "fboss/agent/hw/bcm/BcmPtpTcMgr.h" #include "fboss/agent/hw/bcm/BcmQosMap.h" #include "fboss/agent/hw/bcm/BcmQosUtils.h" @@ -46,22 +42,16 @@ #include "fboss/agent/hw/bcm/BcmTrunkTable.h" #include "fboss/agent/hw/bcm/BcmTypes.h" #include "fboss/agent/hw/bcm/BcmUdfManager.h" -#include "fboss/agent/hw/bcm/BcmWarmBootHelper.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/state/ArpTable.h" #include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/InterfaceMap.h" -#include "fboss/agent/state/LoadBalancer.h" -#include "fboss/agent/state/LoadBalancerMap.h" #include "fboss/agent/state/Mirror.h" -#include "fboss/agent/state/MirrorMap.h" #include "fboss/agent/state/NdpTable.h" #include "fboss/agent/state/NeighborEntry.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortDescriptor.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" -#include "fboss/agent/state/VlanMap.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/PacketTraceUtils.cpp b/fboss/agent/hw/bcm/PacketTraceUtils.cpp index 2ea992472ccb8..0728bea1312d0 100644 --- a/fboss/agent/hw/bcm/PacketTraceUtils.cpp +++ b/fboss/agent/hw/bcm/PacketTraceUtils.cpp @@ -9,11 +9,9 @@ #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/gen-cpp2/packettrace_types.h" -#include "fboss/agent/state/Interface.h" extern "C" { #include -#include } namespace { diff --git a/fboss/agent/hw/bcm/tests/BUCK b/fboss/agent/hw/bcm/tests/BUCK index ebc160a2040c3..c44a7a7d795bb 100644 --- a/fboss/agent/hw/bcm/tests/BUCK +++ b/fboss/agent/hw/bcm/tests/BUCK @@ -24,10 +24,8 @@ cpp_library( "//common/fb303/cpp:fb303", "//fboss/agent:fboss-error", "//fboss/agent/hw/bcm:bcm", - "//fboss/agent/hw/bcm:bcm_sdk_ver", "//fboss/agent/hw/bcm/tests/facebook:if-cpp2-services", "//folly:string", - "//folly/logging:logging", "//thrift/lib/cpp/server:server_event_handler", ], ) @@ -64,7 +62,6 @@ cpp_library( "//fboss/agent/hw/test:config_factory", "//fboss/agent/hw/test:hw_switch_ensemble_factory", "//fboss/agent/platforms/tests/utils:bcm_test_platforms", - "//fboss/agent/state:state", "//fboss/agent/test:linkstate_toggler", "//fboss/agent/test:test_ensemble_if", "//folly/logging:logging", @@ -82,7 +79,6 @@ cpp_library( exported_deps = [ ":bcm_switch_ensemble", "//fboss/agent/hw/bcm:bcm", - "//fboss/agent/state:state", "//fboss/agent/test:linkstate_toggler", "//fboss/agent/test:test_ensemble_if", ], @@ -207,9 +203,6 @@ cpp_library( ], link_whole = True, exported_deps = [ - "//fboss/agent:fboss-error", - "//fboss/agent:lacp_types", - "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/hw/bcm:bcm", "//fboss/agent/hw/test:hw_copp_utils", ], @@ -249,7 +242,6 @@ cpp_unittest( "BcmAddressFBConvertorsTests.cpp", ], deps = [ - ":bcm_unittest_utils", "//fboss/agent/hw/bcm:bcmaddress_fb_convertors", "//folly:network_address", "//folly:range", @@ -484,7 +476,6 @@ cpp_unittest( "BcmCosQueueFBConvertorsTests.cpp", ], deps = [ - ":bcm_unittest_utils", "//fboss/agent:fboss-error", "//fboss/agent/hw/bcm:bcm_cosqueue_fb_convertors", ], @@ -517,7 +508,6 @@ cpp_unittest( "BcmLabelSwitchingUtilsTests.cpp", ], deps = [ - ":bcm_unittest_utils", "//fboss/agent/hw/bcm:bcm_mpls_utils", ], ) @@ -528,7 +518,6 @@ cpp_unittest( "BcmFieldProcessorFBConvertorsTests.cpp", ], deps = [ - ":bcm_unittest_utils", "//fboss/agent:fboss-error", "//fboss/agent/hw/bcm:bcm_fieldprocessor_fb_convertors", ], @@ -543,9 +532,6 @@ cpp_unittest( srcs = [ "GPort.cpp", ], - deps = [ - ":bcm_unittest_utils", - ], external_deps = [ "glog", ("broadcom-xgs-robo", None, "xgs_robo"), @@ -620,6 +606,7 @@ cpp_library( ], undefined_symbols = "True", # The sai/bcm implementations will define some functions exported_deps = [ + ":bcm_trunk_utils", "//fboss/agent:fboss-types", "//fboss/agent:hw_switch", "//fboss/agent/hw/bcm:bcm", diff --git a/fboss/agent/hw/bcm/tests/BcmAclCoppTests.cpp b/fboss/agent/hw/bcm/tests/BcmAclCoppTests.cpp index 0137114744814..973a8d8904fc4 100644 --- a/fboss/agent/hw/bcm/tests/BcmAclCoppTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmAclCoppTests.cpp @@ -16,7 +16,6 @@ #include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/hw/test/ConfigFactory.h" diff --git a/fboss/agent/hw/bcm/tests/BcmAclNexthopTests.cpp b/fboss/agent/hw/bcm/tests/BcmAclNexthopTests.cpp index e28355b7a75b2..571da4fa40bc7 100644 --- a/fboss/agent/hw/bcm/tests/BcmAclNexthopTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmAclNexthopTests.cpp @@ -19,7 +19,6 @@ #include "fboss/agent/hw/bcm/tests/BcmTest.h" #include "fboss/agent/hw/bcm/tests/BcmTestUtils.h" #include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" extern "C" { diff --git a/fboss/agent/hw/bcm/tests/BcmAclUnitTests.cpp b/fboss/agent/hw/bcm/tests/BcmAclUnitTests.cpp index 6f51f77407e79..ab4d7cc8b4407 100644 --- a/fboss/agent/hw/bcm/tests/BcmAclUnitTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmAclUnitTests.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/hw/bcm/BcmAddressFBConvertors.h" #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" -#include "fboss/agent/types.h" using facebook::fboss::utility::isBcmQualFieldStateSame; using facebook::fboss::utility::isBcmQualFieldWithMaskStateSame; diff --git a/fboss/agent/hw/bcm/tests/BcmAddDelEcmpTests.cpp b/fboss/agent/hw/bcm/tests/BcmAddDelEcmpTests.cpp index 145941c6f1327..a208ed7ec0b0e 100644 --- a/fboss/agent/hw/bcm/tests/BcmAddDelEcmpTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmAddDelEcmpTests.cpp @@ -21,9 +21,7 @@ #include "fboss/agent/test/ResourceLibUtil.h" #include -extern "C" { -#include -} +extern "C" {} using folly::CIDRNetwork; using folly::IPAddress; diff --git a/fboss/agent/hw/bcm/tests/BcmAddressFBConvertorsTests.cpp b/fboss/agent/hw/bcm/tests/BcmAddressFBConvertorsTests.cpp index 133943f54deac..9d26da7900a30 100644 --- a/fboss/agent/hw/bcm/tests/BcmAddressFBConvertorsTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmAddressFBConvertorsTests.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/bcm/BcmAddressFBConvertors.h" -#include "fboss/agent/hw/bcm/tests/BcmUnitTestUtils.h" #include #include diff --git a/fboss/agent/hw/bcm/tests/BcmCosQueueFBConvertorsTests.cpp b/fboss/agent/hw/bcm/tests/BcmCosQueueFBConvertorsTests.cpp index bbe0daff7814d..a136b27999838 100644 --- a/fboss/agent/hw/bcm/tests/BcmCosQueueFBConvertorsTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmCosQueueFBConvertorsTests.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/bcm/BcmCosQueueFBConvertors.h" -#include "fboss/agent/hw/bcm/tests/BcmUnitTestUtils.h" // Need to define bde in a single cpp_unittest extern "C" { diff --git a/fboss/agent/hw/bcm/tests/BcmCosQueueManagerTest.cpp b/fboss/agent/hw/bcm/tests/BcmCosQueueManagerTest.cpp index 293bab4215c1b..896668b027c4d 100644 --- a/fboss/agent/hw/bcm/tests/BcmCosQueueManagerTest.cpp +++ b/fboss/agent/hw/bcm/tests/BcmCosQueueManagerTest.cpp @@ -11,8 +11,6 @@ #include "fboss/agent/hw/bcm/tests/BcmCosQueueManagerTest.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" - #include using namespace facebook::fboss; diff --git a/fboss/agent/hw/bcm/tests/BcmDeathTests.cpp b/fboss/agent/hw/bcm/tests/BcmDeathTests.cpp index 1c94f01b49166..3538eb3ddfeaf 100644 --- a/fboss/agent/hw/bcm/tests/BcmDeathTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmDeathTests.cpp @@ -8,9 +8,7 @@ #include "fboss/agent/hw/test/ConfigFactory.h" -extern "C" { -#include -} +extern "C" {} namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/tests/BcmEcmpTests.cpp b/fboss/agent/hw/bcm/tests/BcmEcmpTests.cpp index 9346ba4996f0f..00c0874443b0d 100644 --- a/fboss/agent/hw/bcm/tests/BcmEcmpTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmEcmpTests.cpp @@ -20,7 +20,6 @@ #include "fboss/agent/hw/bcm/BcmRoute.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/BcmTrunkTable.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/hw/test/ConfigFactory.h" @@ -31,12 +30,10 @@ #include #include -#include #include extern "C" { #include -#include } DECLARE_uint32(ecmp_width); diff --git a/fboss/agent/hw/bcm/tests/BcmEmptyEcmpTests.cpp b/fboss/agent/hw/bcm/tests/BcmEmptyEcmpTests.cpp index e9727f735882f..ee954aeec6ee2 100644 --- a/fboss/agent/hw/bcm/tests/BcmEmptyEcmpTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmEmptyEcmpTests.cpp @@ -17,9 +17,7 @@ #include "fboss/agent/state/SwitchState.h" #include -extern "C" { -#include -} +extern "C" {} using folly::IPAddressV4; using folly::IPAddressV6; diff --git a/fboss/agent/hw/bcm/tests/BcmFieldProcessorFBConvertorsTests.cpp b/fboss/agent/hw/bcm/tests/BcmFieldProcessorFBConvertorsTests.cpp index c06db66aa9776..7e35520543167 100644 --- a/fboss/agent/hw/bcm/tests/BcmFieldProcessorFBConvertorsTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmFieldProcessorFBConvertorsTests.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/bcm/BcmFieldProcessorFBConvertors.h" -#include "fboss/agent/hw/bcm/tests/BcmUnitTestUtils.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/tests/BcmInterfaceTests.cpp b/fboss/agent/hw/bcm/tests/BcmInterfaceTests.cpp index 094ce2f0567e8..60fb744ab839f 100644 --- a/fboss/agent/hw/bcm/tests/BcmInterfaceTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmInterfaceTests.cpp @@ -17,12 +17,8 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmIntf.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" -#include "fboss/agent/state/Vlan.h" -#include "fboss/agent/state/VlanMap.h" #include "fboss/agent/hw/test/ConfigFactory.h" diff --git a/fboss/agent/hw/bcm/tests/BcmLabelSwitchingUtilsTests.cpp b/fboss/agent/hw/bcm/tests/BcmLabelSwitchingUtilsTests.cpp index a031233ae5d2b..d8b0776d3a004 100644 --- a/fboss/agent/hw/bcm/tests/BcmLabelSwitchingUtilsTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmLabelSwitchingUtilsTests.cpp @@ -3,7 +3,6 @@ #include #include "fboss/agent/hw/bcm/BcmLabelSwitchingUtils.h" -#include "fboss/agent/hw/bcm/tests/BcmUnitTestUtils.h" // need to define bde in a cpp_unittest for linking with sdk library extern "C" { diff --git a/fboss/agent/hw/bcm/tests/BcmLabeledEgressTest.cpp b/fboss/agent/hw/bcm/tests/BcmLabeledEgressTest.cpp index 414a814ee17ec..7248a3b4bed02 100644 --- a/fboss/agent/hw/bcm/tests/BcmLabeledEgressTest.cpp +++ b/fboss/agent/hw/bcm/tests/BcmLabeledEgressTest.cpp @@ -6,7 +6,6 @@ #include "fboss/agent/hw/bcm/BcmEgressManager.h" #include "fboss/agent/hw/bcm/BcmHost.h" #include "fboss/agent/hw/bcm/BcmIntf.h" -#include "fboss/agent/hw/bcm/BcmLabeledTunnel.h" #include "fboss/agent/hw/bcm/BcmLabeledTunnelEgress.h" #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/tests/BcmTest.h" diff --git a/fboss/agent/hw/bcm/tests/BcmLinkStateDependentTests.cpp b/fboss/agent/hw/bcm/tests/BcmLinkStateDependentTests.cpp index 847177eab4f62..03814ed0d8b5a 100644 --- a/fboss/agent/hw/bcm/tests/BcmLinkStateDependentTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmLinkStateDependentTests.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include "fboss/agent/state/Port.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/tests/BcmLinkStateToggler.cpp b/fboss/agent/hw/bcm/tests/BcmLinkStateToggler.cpp index 50979a6460905..9a2925298e6a1 100644 --- a/fboss/agent/hw/bcm/tests/BcmLinkStateToggler.cpp +++ b/fboss/agent/hw/bcm/tests/BcmLinkStateToggler.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/hw/bcm/BcmPortTable.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/bcm/tests/BcmSwitchEnsemble.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/test/TestEnsembleIf.h" #include diff --git a/fboss/agent/hw/bcm/tests/BcmPortUtils.cpp b/fboss/agent/hw/bcm/tests/BcmPortUtils.cpp index 96a453ee3916f..99014e9ffc3f7 100644 --- a/fboss/agent/hw/bcm/tests/BcmPortUtils.cpp +++ b/fboss/agent/hw/bcm/tests/BcmPortUtils.cpp @@ -19,7 +19,6 @@ #include "fboss/agent/hw/bcm/tests/BcmSwitchEnsemble.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include "fboss/lib/platforms/PlatformMode.h" extern "C" { #include diff --git a/fboss/agent/hw/bcm/tests/BcmQosMapTests.cpp b/fboss/agent/hw/bcm/tests/BcmQosMapTests.cpp index 3a75798599414..9bd868527447f 100644 --- a/fboss/agent/hw/bcm/tests/BcmQosMapTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmQosMapTests.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/bcm/BcmQosPolicy.h" #include "fboss/agent/hw/bcm/tests/BcmTest.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/ApplyThriftConfig.h" #include "fboss/agent/hw/bcm/BcmError.h" @@ -19,7 +18,6 @@ extern "C" { #include -#include #include } diff --git a/fboss/agent/hw/bcm/tests/BcmQosPolicyTests.cpp b/fboss/agent/hw/bcm/tests/BcmQosPolicyTests.cpp index 3a8515a26f089..8548bff828820 100644 --- a/fboss/agent/hw/bcm/tests/BcmQosPolicyTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmQosPolicyTests.cpp @@ -18,16 +18,12 @@ #include "fboss/agent/hw/bcm/BcmQosPolicyTable.h" #include "fboss/agent/hw/bcm/BcmQosUtils.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/utils/TrafficPolicyTestUtils.h" #include "fboss/agent/hw/test/ConfigFactory.h" extern "C" { -#include -#include #include } diff --git a/fboss/agent/hw/bcm/tests/BcmRouteTests.cpp b/fboss/agent/hw/bcm/tests/BcmRouteTests.cpp index 25641b92e02af..64deebf418699 100644 --- a/fboss/agent/hw/bcm/tests/BcmRouteTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmRouteTests.cpp @@ -27,7 +27,6 @@ #include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/state/Interface.h" #include "fboss/agent/state/Route.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/state/VlanMap.h" diff --git a/fboss/agent/hw/bcm/tests/BcmTrunkTests.cpp b/fboss/agent/hw/bcm/tests/BcmTrunkTests.cpp index 12c5174c0841e..b4db887d34d42 100644 --- a/fboss/agent/hw/bcm/tests/BcmTrunkTests.cpp +++ b/fboss/agent/hw/bcm/tests/BcmTrunkTests.cpp @@ -10,11 +10,6 @@ #include "fboss/agent/hw/bcm/tests/BcmTest.h" #include "fboss/agent/ApplyThriftConfig.h" -#include "fboss/agent/packet/Ethertype.h" -#include "fboss/agent/state/AggregatePort.h" -#include "fboss/agent/state/Port.h" -#include "fboss/agent/state/PortMap.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TrunkUtils.h" @@ -22,25 +17,17 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmTrunkTable.h" #include "fboss/agent/hw/bcm/tests/BcmLinkStateDependentTests.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/hw/test/HwTestTrunkUtils.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include -#include #include -#include -#include #include extern "C" { -#include -#include -#include #include } diff --git a/fboss/agent/hw/bcm/tests/GPort.cpp b/fboss/agent/hw/bcm/tests/GPort.cpp index f799f134310b7..98ab56dc26fb0 100644 --- a/fboss/agent/hw/bcm/tests/GPort.cpp +++ b/fboss/agent/hw/bcm/tests/GPort.cpp @@ -15,8 +15,6 @@ extern "C" { #include } -#include "fboss/agent/hw/bcm/tests/BcmUnitTestUtils.h" - extern "C" { struct ibde_t; ibde_t* bde; diff --git a/fboss/agent/hw/bcm/tests/HwTestCoppUtils.cpp b/fboss/agent/hw/bcm/tests/HwTestCoppUtils.cpp index 4ce7119d60cf6..41a603d05fcf0 100644 --- a/fboss/agent/hw/bcm/tests/HwTestCoppUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestCoppUtils.cpp @@ -9,15 +9,9 @@ */ #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/hw/bcm/BcmControlPlane.h" -#include "fboss/agent/hw/bcm/BcmFieldProcessorUtils.h" -#include "fboss/agent/hw/bcm/BcmPlatform.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" -#include "fboss/agent/FbossError.h" -#include "fboss/agent/LacpTypes.h" - namespace facebook::fboss::utility { HwPortStats getCpuQueueStats(HwSwitch* hwSwitch) { diff --git a/fboss/agent/hw/bcm/tests/HwTestEcmpUtilsThriftHandler.cpp b/fboss/agent/hw/bcm/tests/HwTestEcmpUtilsThriftHandler.cpp index 24d81aeaa65ea..be274321cea17 100644 --- a/fboss/agent/hw/bcm/tests/HwTestEcmpUtilsThriftHandler.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestEcmpUtilsThriftHandler.cpp @@ -20,6 +20,27 @@ int HwTestThriftHandler::getHwEcmpSize( return getEcmpMembersInHw(hwSwitch_, ecmpPrefix, rid, sizeInSw).size(); } +void HwTestThriftHandler::getEcmpWeights( + std::map<::std::int32_t, ::std::int32_t>& weights, + std::unique_ptr prefix, + int routerID) { + folly::CIDRNetwork ecmpPrefix = std::make_pair( + folly::IPAddress(prefix->IPAddress_ref().value()), + prefix->mask_ref().value()); + facebook::fboss::RouterID rid = + static_cast(routerID); + auto members = + getEcmpMembersInHw(hwSwitch_, ecmpPrefix, rid, FLAGS_ecmp_width); + std::set uniqueMembers(members.begin(), members.end()); + int index = 0; + for (auto member : uniqueMembers) { + weights.insert( + std::make_pair(index, getEcmpMemberWeight(hwSwitch_, members, member))); + index++; + } + return; +} + } // namespace utility } // namespace fboss } // namespace facebook diff --git a/fboss/agent/hw/bcm/tests/HwTestFlowletSwitchingUtils.cpp b/fboss/agent/hw/bcm/tests/HwTestFlowletSwitchingUtils.cpp index d116927cb1e47..d004679666a2b 100644 --- a/fboss/agent/hw/bcm/tests/HwTestFlowletSwitchingUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestFlowletSwitchingUtils.cpp @@ -246,7 +246,8 @@ bool verifyEcmpForNonFlowlet( bool validatePortFlowletQuality( const facebook::fboss::HwSwitch* hw, const PortID& portId, - const cfg::PortFlowletConfig& cfg) { + const cfg::PortFlowletConfig& cfg, + bool /* enable */) { bcm_l3_ecmp_dlb_port_quality_attr_t attr; bcm_l3_ecmp_dlb_port_quality_attr_t_init(&attr); const auto bcmSwitch = static_cast(hw); diff --git a/fboss/agent/hw/bcm/tests/HwTestMplsUtils.cpp b/fboss/agent/hw/bcm/tests/HwTestMplsUtils.cpp index b2ade72052365..bd8a9945d79d7 100644 --- a/fboss/agent/hw/bcm/tests/HwTestMplsUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestMplsUtils.cpp @@ -27,7 +27,6 @@ extern "C" { #include #include -#include } namespace facebook::fboss { diff --git a/fboss/agent/hw/bcm/tests/HwTestPfcUtils.cpp b/fboss/agent/hw/bcm/tests/HwTestPfcUtils.cpp index 0da07525dd4c7..201ccfd24afd6 100644 --- a/fboss/agent/hw/bcm/tests/HwTestPfcUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestPfcUtils.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/bcm/BcmError.h" #include "fboss/agent/hw/bcm/BcmPortUtils.h" #include "fboss/agent/hw/bcm/tests/BcmTest.h" -#include "fboss/agent/platforms/tests/utils/BcmTestPlatform.h" #include "fboss/agent/types.h" namespace { diff --git a/fboss/agent/hw/bcm/tests/HwTestPortUtilsThriftHandler.cpp b/fboss/agent/hw/bcm/tests/HwTestPortUtilsThriftHandler.cpp index 921c9e2a516bf..852add9ced98a 100644 --- a/fboss/agent/hw/bcm/tests/HwTestPortUtilsThriftHandler.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestPortUtilsThriftHandler.cpp @@ -3,6 +3,9 @@ #include "fboss/agent/hw/test/HwTestThriftHandler.h" #include "fboss/agent/hw/bcm/BcmError.h" +#include "fboss/agent/hw/bcm/BcmPortTable.h" +#include "fboss/agent/hw/bcm/BcmTrunkTable.h" +#include "fboss/agent/hw/bcm/tests/BcmTrunkUtils.h" extern "C" { #include @@ -55,6 +58,157 @@ void HwTestThriftHandler::getPortInfo( return; } +bool HwTestThriftHandler::verifyPortLedStatus(int /*portId*/, bool /*status*/) { + return true; +} + +bool HwTestThriftHandler::verifyPGSettings(int portId, bool pfcEnabled) { + PortPgConfigs portPgsHw; + + auto swPort = hwSwitch_->getProgrammedState()->getPorts()->getNodeIf(portId); + auto bcmSwitch = static_cast(hwSwitch_); + auto bcmPort = bcmSwitch->getPortTable()->getBcmPort(portId); + + portPgsHw = bcmPort->getCurrentProgrammedPgSettings(); + const auto bufferPoolHwPtr = bcmPort->getCurrentIngressPoolSettings(); + + auto swPgConfig = swPort->getPortPgConfigs(); + + if (swPort->getPortPgConfigs()->size() != portPgsHw.size()) { + return false; + } + + int i = 0; + // both vectors are sorted to start with lowest pg id + for (const auto& pgConfig : std::as_const(*swPgConfig)) { + auto id = pgConfig->cref()->cref(); + if (id != portPgsHw[i]->getID()) { + return false; + } + + cfg::MMUScalingFactor scalingFactor; + if (auto scalingFactorStr = + pgConfig->cref()) { + scalingFactor = + nameToEnum(scalingFactorStr->cref()); + if (scalingFactor != *portPgsHw[i]->getScalingFactor()) { + XLOG(DBG2) << "Scaling factor mismatch for pg " << id; + return false; + } + } else { + if (std::nullopt != portPgsHw[i]->getScalingFactor()) { + XLOG(DBG2) << "Scaling factor mismatch for pg " << id; + return false; + } + } + if (pgConfig->cref()->cref() != + portPgsHw[i]->getResumeOffsetBytes().value()) { + XLOG(DBG2) << "Resume offset mismatch for pg " << id; + return false; + } + if (pgConfig->cref()->cref() != + portPgsHw[i]->getMinLimitBytes()) { + XLOG(DBG2) << "Min limit mismatch for pg " << id; + return false; + } + + int pgHeadroom = 0; + // for pgs with headroom, lossless mode + pfc should be enabled + if (auto pgHdrmOpt = + pgConfig->cref()) { + pgHeadroom = pgHdrmOpt->cref(); + } + if (pgHeadroom != portPgsHw[i]->getHeadroomLimitBytes()) { + XLOG(DBG2) << "Headroom mismatch for pg " << id; + return false; + } + const auto bufferPool = + pgConfig->cref(); + if (bufferPool->cref()->cref() != + (*bufferPoolHwPtr).getSharedBytes()) { + XLOG(DBG2) << "Shared bytes mismatch for pg " << id; + return false; + } + if (bufferPool->safe_cref()->toThrift() != + *((*bufferPoolHwPtr).getHeadroomBytes())) { + XLOG(DBG2) << "Headroom bytes mismatch for pg " << id; + return false; + } + // we are in lossless mode if headroom > 0, else lossless mode = 0 + auto expectedLosslessMode = pgHeadroom > 0 ? 1 : 0; + if (bcmPort->getProgrammedPgLosslessMode(id) != expectedLosslessMode) { + XLOG(DBG2) << "Lossless mode mismatch for pg " << id; + return false; + } + + auto expectedPfcStatus = pfcEnabled ? 1 : 0; + if (bcmPort->getProgrammedPfcStatusInPg(id) != expectedPfcStatus) { + XLOG(DBG2) << "PFC mismatch for pg " << id; + return false; + } + i++; + } + return true; +} + +void HwTestThriftHandler::getAggPortInfo( + ::std::vector<::facebook::fboss::utility::AggPortInfo>& aggPortInfos, + std::unique_ptr<::std::vector<::std::int32_t>> aggPortIds) { + auto bcmSwitch = static_cast(hwSwitch_); + auto trunkTable = bcmSwitch->getTrunkTable(); + auto aggPortTable = hwSwitch_->getProgrammedState()->getAggregatePorts(); + for (const auto& portId : *aggPortIds) { + AggPortInfo aggPortInfo; + AggregatePortID aggPortId = AggregatePortID(portId); + auto aggPort = aggPortTable->getNodeIf(aggPortId); + try { + trunkTable->getBcmTrunkId(aggPortId); + aggPortInfo.isPresent() = true; + aggPortInfo.numActiveMembers() = utility::getBcmTrunkMemberCount( + 0, + trunkTable->getBcmTrunkId(aggPortId), + aggPort->sortedSubports().size()); + aggPortInfo.numMembers() = aggPort->sortedSubports().size(); + + } catch (const std::exception& e) { + XLOG(DBG2) << "Lag handle not found for port " << aggPortId; + aggPortInfo.isPresent() = false; + } + aggPortInfos.push_back(aggPortInfo); + } + return; +} + +int HwTestThriftHandler::getNumAggPorts() { + auto bcmSwitch = static_cast(hwSwitch_); + return bcmSwitch->getTrunkTable()->numTrunkPorts(); +} + +bool HwTestThriftHandler::verifyPktFromAggPort(int aggPortId) { + AggregatePortID aggregatePortID(aggPortId); + auto bcmSwitch = static_cast(hwSwitch_); + bool usePktIO = bcmSwitch->usePKTIO(); + BcmPacketT bcmPacket; + bcm_pkt_t bcmPkt; + auto bcmTrunkId = bcmSwitch->getTrunkTable()->getBcmTrunkId(aggregatePortID); + bcmPacket.usePktIO = usePktIO; + if (!usePktIO) { + bcmPacket.ptrUnion.pkt = &bcmPkt; + BCM_PKT_ONE_BUF_SETUP(&bcmPkt, nullptr, 0); + bcmPkt.src_trunk = bcmTrunkId; + bcmPkt.flags |= BCM_PKT_F_TRUNK; + bcmPkt.unit = 0; + FbBcmRxPacket fbRxPkt(bcmPacket, bcmSwitch); + if (!fbRxPkt.isFromAggregatePort()) { + return false; + } + if (fbRxPkt.getSrcAggregatePort() != aggregatePortID) { + return false; + } + } + return true; +} + } // namespace utility } // namespace fboss } // namespace facebook diff --git a/fboss/agent/hw/bcm/tests/HwTestRouteUtils.cpp b/fboss/agent/hw/bcm/tests/HwTestRouteUtils.cpp index b90d454db31fb..f1acbdd02d933 100644 --- a/fboss/agent/hw/bcm/tests/HwTestRouteUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwTestRouteUtils.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/bcm/BcmAddressFBConvertors.h" #include "fboss/agent/hw/bcm/BcmRouteCounter.h" -#include "fboss/agent/hw/bcm/BcmSdkVer.h" #include "fboss/agent/hw/bcm/BcmSwitch.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" diff --git a/fboss/agent/hw/bcm/tests/HwVlanUtils.cpp b/fboss/agent/hw/bcm/tests/HwVlanUtils.cpp index 76e197b91e1b2..b267459309d66 100644 --- a/fboss/agent/hw/bcm/tests/HwVlanUtils.cpp +++ b/fboss/agent/hw/bcm/tests/HwVlanUtils.cpp @@ -16,9 +16,7 @@ #include -extern "C" { -#include -} +extern "C" {} namespace { std::vector getVlans( const facebook::fboss::HwSwitch* hwSwitch) { diff --git a/fboss/agent/hw/benchmarks/AgentTeFlowStatsExportBenchmark.cpp b/fboss/agent/hw/benchmarks/AgentTeFlowStatsExportBenchmark.cpp index 9b753bbf02a37..ef2f4a64616ac 100644 --- a/fboss/agent/hw/benchmarks/AgentTeFlowStatsExportBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/AgentTeFlowStatsExportBenchmark.cpp @@ -17,11 +17,9 @@ #include "fboss/lib/FunctionCallTimeReporter.h" #include "fboss/agent/benchmarks/AgentBenchmarks.h" -#include "fboss/agent/hw/switch_asics/HwAsic.h" #include #include -#include DEFINE_int32(teflow_em_entries, 10000, "TEFlow EM entries"); DEFINE_int32(fsdb_connect_timeout, 60, "FSDB connect timeout in seconds"); diff --git a/fboss/agent/hw/benchmarks/BUCK b/fboss/agent/hw/benchmarks/BUCK index 6462497e7593e..9db2278c70fb4 100644 --- a/fboss/agent/hw/benchmarks/BUCK +++ b/fboss/agent/hw/benchmarks/BUCK @@ -28,6 +28,23 @@ agent_benchmark_lib( ], ) +agent_benchmark_lib( + name = "hw_rx_slow_path_arp_rate", + srcs = ["HwRxSlowPathArpBenchmark.cpp"], + extra_deps = [ + "//fboss/agent:core", + "//fboss/agent:packet", + "//fboss/agent/hw/switch_asics:switch_asics", + "//fboss/agent/packet:packet_factory", + "//fboss/agent/test/utils:acl_test_utils", + "//fboss/agent/test/utils:copp_test_utils", + "//fboss/agent/test/utils:qos_test_utils", + "//fboss/agent/test/utils:asic_test_utils", + "//folly:network_address", + "//folly/init:init", + ], +) + cpp_library( name = "hw_route_scale_benchmark_helpers", headers = [ @@ -44,6 +61,7 @@ cpp_library( "//fboss/agent/test:agent_ensemble", "//fboss/agent/test:ecmp_helper", "//fboss/agent/test:resourcelibutil", + "//fboss/agent/test/utils:dsf_config_utils", "//fboss/agent/test/utils:fabric_test_utils", "//fboss/agent/test/utils:voq_test_utils", "//fboss/lib:function_call_time_reporter", @@ -163,17 +181,15 @@ cpp_library( "//fboss/agent/hw/test:config_factory", "//fboss/agent/hw/test:hw_copp_utils", "//fboss/agent/hw/test:hw_switch_ensemble_factory", - "//fboss/agent/hw/test:load_balancer_utils", "//fboss/agent/hw/test:prod_config_utils", "//fboss/agent/test:agent_ensemble", "//fboss/agent/test:route_distribution_gen", "//fboss/agent/test:route_scale_gen", + "//fboss/agent/test/utils:dsf_config_utils", "//fboss/agent/test/utils:fabric_test_utils", "//fboss/agent/test/utils:voq_test_utils", "//fboss/lib:function_call_time_reporter", - "//fboss/lib/platforms:platform_mode", "//folly:benchmark", - "//folly/logging:logging", ], ) @@ -293,8 +309,6 @@ cpp_library( srcs = ["HwTeFlowScaleBenchmarkHelper.cpp"], undefined_symbols = True, exported_deps = [ - "//fboss/agent:platform_base", - "//fboss/agent:stats", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/benchmarks:mono_agent_benchmarks", "//fboss/agent/hw/test:config_factory", @@ -305,7 +319,6 @@ cpp_library( "//fboss/lib:function_call_time_reporter", "//folly:benchmark", "//folly:network_address", - "//folly/logging:logging", ], ) @@ -372,7 +385,10 @@ agent_benchmark_lib( agent_benchmark_lib( name = "hw_switch_reachability_change_speed", - srcs = ["HwSwitchReachabilityChangeBenchmark.cpp"], + srcs = [ + "HwSwitchReachabilityChangeBenchmarkHelper.cpp", + "HwSwitchReachabilityChangeVoqBenchmark.cpp", + ], extra_deps = [ "//fboss/agent/hw/test:hw_switch_ensemble_factory", "//fboss/agent/hw/test:hw_test_thrift_handler_h", diff --git a/fboss/agent/hw/benchmarks/HwEcmpShrinkSpeedBenchmark.cpp b/fboss/agent/hw/benchmarks/HwEcmpShrinkSpeedBenchmark.cpp index 5b017bfe98316..5d1e9fd8e5b99 100644 --- a/fboss/agent/hw/benchmarks/HwEcmpShrinkSpeedBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwEcmpShrinkSpeedBenchmark.cpp @@ -10,12 +10,10 @@ #include "fboss/agent/HwAsicTable.h" #include "fboss/agent/SwitchStats.h" -#include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestEcmpUtils.h" #include "fboss/agent/hw/test/HwTestPortUtils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/lib/FunctionCallTimeReporter.h" diff --git a/fboss/agent/hw/benchmarks/HwEcmpShrinkWithCompetingRouteUpdatesBenchmark.cpp b/fboss/agent/hw/benchmarks/HwEcmpShrinkWithCompetingRouteUpdatesBenchmark.cpp index f9ca9c015d91e..d17fbc1381ac4 100644 --- a/fboss/agent/hw/benchmarks/HwEcmpShrinkWithCompetingRouteUpdatesBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwEcmpShrinkWithCompetingRouteUpdatesBenchmark.cpp @@ -9,12 +9,10 @@ */ #include "fboss/agent/HwAsicTable.h" -#include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestEcmpUtils.h" #include "fboss/agent/hw/test/HwTestPortUtils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/RouteScaleGenerators.h" #include "fboss/lib/FunctionCallTimeReporter.h" diff --git a/fboss/agent/hw/benchmarks/HwFlowletStatsCollectionBenchmark.cpp b/fboss/agent/hw/benchmarks/HwFlowletStatsCollectionBenchmark.cpp index ae32bc6865d6f..68203632a4114 100644 --- a/fboss/agent/hw/benchmarks/HwFlowletStatsCollectionBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwFlowletStatsCollectionBenchmark.cpp @@ -43,7 +43,8 @@ BENCHMARK(HwFlowletStatsCollection) { auto config = utility::onePortPerInterfaceConfig(ensemble.getSw(), ports); config.udfConfig() = utility::addUdfFlowletAclConfig(); - utility::addFlowletConfigs(config, ensemble.masterLogicalPortIds()); + utility::addFlowletConfigs( + config, ensemble.masterLogicalPortIds(), ensemble.isSai()); utility::addFlowletAcl(config); return config; }; diff --git a/fboss/agent/hw/benchmarks/HwInitAndExitBenchmarkHelper.cpp b/fboss/agent/hw/benchmarks/HwInitAndExitBenchmarkHelper.cpp index 3c0d6e205f18c..8407f0320eb56 100644 --- a/fboss/agent/hw/benchmarks/HwInitAndExitBenchmarkHelper.cpp +++ b/fboss/agent/hw/benchmarks/HwInitAndExitBenchmarkHelper.cpp @@ -16,21 +16,16 @@ #include "fboss/agent/Utils.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include "fboss/agent/hw/test/HwSwitchEnsembleFactory.h" -#include "fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" #include "fboss/agent/hw/test/HwTestProdConfigUtils.h" -#include "fboss/agent/hw/test/LoadBalancerUtils.h" #include "fboss/agent/test/RouteDistributionGenerator.h" #include "fboss/agent/test/RouteScaleGenerators.h" +#include "fboss/agent/test/utils/DsfConfigUtils.h" #include "fboss/agent/test/utils/FabricTestUtils.h" #include "fboss/agent/test/utils/VoqTestUtils.h" #include "fboss/lib/FunctionCallTimeReporter.h" -#include "fboss/lib/platforms/PlatformMode.h" -#include #include "fboss/agent/gen-cpp2/switch_config_types.h" #include diff --git a/fboss/agent/hw/benchmarks/HwRibResolutionBenchmark.cpp b/fboss/agent/hw/benchmarks/HwRibResolutionBenchmark.cpp index 2b4dfa650a2b3..7b08dc6f72136 100644 --- a/fboss/agent/hw/benchmarks/HwRibResolutionBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwRibResolutionBenchmark.cpp @@ -19,7 +19,6 @@ #include "fboss/agent/benchmarks/AgentBenchmarks.h" #include -#include namespace facebook::fboss { diff --git a/fboss/agent/hw/benchmarks/HwRibSyncFibBenchmark.cpp b/fboss/agent/hw/benchmarks/HwRibSyncFibBenchmark.cpp index 3ae107da4df51..4f8517c0ce026 100644 --- a/fboss/agent/hw/benchmarks/HwRibSyncFibBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwRibSyncFibBenchmark.cpp @@ -19,7 +19,6 @@ #include "fboss/agent/benchmarks/AgentBenchmarks.h" #include -#include namespace facebook::fboss { diff --git a/fboss/agent/hw/benchmarks/HwRouteScaleBenchmarkHelpers.h b/fboss/agent/hw/benchmarks/HwRouteScaleBenchmarkHelpers.h index 6d1ebf60dbd95..4a5ed2664a3c0 100644 --- a/fboss/agent/hw/benchmarks/HwRouteScaleBenchmarkHelpers.h +++ b/fboss/agent/hw/benchmarks/HwRouteScaleBenchmarkHelpers.h @@ -16,6 +16,7 @@ #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/hw/test/HwSwitchEnsembleFactory.h" #include "fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.h" +#include "fboss/agent/test/utils/DsfConfigUtils.h" #include "fboss/agent/test/utils/FabricTestUtils.h" #include "fboss/agent/test/utils/VoqTestUtils.h" diff --git a/fboss/agent/hw/benchmarks/HwRxSlowPathArpBenchmark.cpp b/fboss/agent/hw/benchmarks/HwRxSlowPathArpBenchmark.cpp new file mode 100644 index 0000000000000..8e3d19e4e4d60 --- /dev/null +++ b/fboss/agent/hw/benchmarks/HwRxSlowPathArpBenchmark.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2004-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#include "fboss/agent/HwAsicTable.h" +#include "fboss/agent/IPv4Handler.h" +#include "fboss/agent/IPv6Handler.h" +#include "fboss/agent/TxPacket.h" +#include "fboss/agent/benchmarks/AgentBenchmarks.h" +#include "fboss/agent/hw/test/ConfigFactory.h" +#include "fboss/agent/packet/PktFactory.h" +#include "fboss/agent/test/utils/AclTestUtils.h" +#include "fboss/agent/test/utils/AsicUtils.h" +#include "fboss/agent/test/utils/CoppTestUtils.h" + +#include +#include +#include +#include +#include + +#include +#include + +namespace { +const std::string kSrcIp = "8.8.8.7"; +const std::string kDstIp = "8.8.8.8"; +} // namespace + +namespace facebook::fboss { + +// How to generate linerate arp request packets +// 1. Put all ports under same vlan +// 2. Install CPU trap acl +// 3. Send arp request packets with Broadcast mac. +// It should be broadcast to all the ports to the +// same vlan and hence amplify the traffic. +BENCHMARK(RxSlowPathArpBenchmark) { + AgentEnsembleSwitchConfigFn initialConfigFn = [](const AgentEnsemble& + ensemble) { + FLAGS_sai_user_defined_trap = true; + CHECK_GE( + ensemble.masterLogicalPortIds({cfg::PortType::INTERFACE_PORT}).size(), + 1); + std::vector ports = {ensemble.masterLogicalInterfacePortIds()[0]}; + + auto l3Asics = ensemble.getSw()->getHwAsicTable()->getL3Asics(); + auto asic = utility::checkSameAndGetAsic(l3Asics); + auto config = utility::oneL3IntfNPortConfig( + ensemble.getSw()->getPlatformMapping(), + asic, + ensemble.masterLogicalPortIds(), + ensemble.getSw()->getPlatformSupportsAddRemovePort(), + asic->desiredLoopbackModes()); + + utility::addAclTableGroup( + &config, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); + utility::addDefaultAclTable(config); + // We don't want to set queue rate that limits the number of rx pkts + utility::addCpuQueueConfig( + config, + ensemble.getL3Asics(), + ensemble.isSai(), + /* setQueueRate */ false); + utility::setDefaultCpuTrafficPolicyConfig( + config, ensemble.getL3Asics(), ensemble.isSai()); + return config; + }; + + auto ensemble = + createAgentEnsemble(initialConfigFn, false /*disableLinkStateToggler*/); + + const auto kSrcMac = folly::MacAddress{"fa:ce:b0:00:00:0c"}; + auto broadcastMac = folly::MacAddress("FF:FF:FF:FF:FF:FF"); + // Send packet + auto vlanId = utility::firstVlanID(ensemble->getProgrammedState()); + auto constexpr kPacketToSend = 10; + for (int i = 0; i < kPacketToSend; i++) { + auto txPacket = utility::makeARPTxPacket( + ensemble->getSw(), + vlanId, + kSrcMac, + broadcastMac, + folly::IPAddressV4(kSrcIp), + folly::IPAddressV4(kDstIp), + ARP_OPER::ARP_OPER_REQUEST); + ensemble->getSw()->sendPacketSwitchedAsync(std::move(txPacket)); + } + + constexpr auto kBurnIntevalInSeconds = 10; + // Let the packet flood warm up + std::this_thread::sleep_for(std::chrono::seconds(kBurnIntevalInSeconds)); + std::map cpuStatsBefore; + ensemble->getSw()->getAllCpuPortStats(cpuStatsBefore); + auto statsBefore = cpuStatsBefore[0]; + auto hwAsic = utility::checkSameAndGetAsic(ensemble->getL3Asics()); + auto [pktsBefore, bytesBefore] = utility::getCpuQueueOutPacketsAndBytes( + *statsBefore.portStats_(), utility::getCoppHighPriQueueId(hwAsic)); + auto timeBefore = std::chrono::steady_clock::now(); + CHECK_NE(pktsBefore, 0); + std::this_thread::sleep_for(std::chrono::seconds(kBurnIntevalInSeconds)); + std::map cpuStatsAfter; + ensemble->getSw()->getAllCpuPortStats(cpuStatsAfter); + auto statsAfter = cpuStatsAfter[0]; + auto [pktsAfter, bytesAfter] = utility::getCpuQueueOutPacketsAndBytes( + *statsAfter.portStats_(), utility::getCoppHighPriQueueId(hwAsic)); + auto timeAfter = std::chrono::steady_clock::now(); + std::chrono::duration durationMillseconds = + timeAfter - timeBefore; + uint32_t pps = (static_cast(pktsAfter - pktsBefore) / + durationMillseconds.count()) * + 1000; + uint32_t bytesPerSec = (static_cast(bytesAfter - bytesBefore) / + durationMillseconds.count()) * + 1000; + + if (FLAGS_json) { + folly::dynamic cpuRxRateJson = folly::dynamic::object; + cpuRxRateJson["cpu_rx_pps"] = pps; + cpuRxRateJson["cpu_rx_bytes_per_sec"] = bytesPerSec; + std::cout << toPrettyJson(cpuRxRateJson) << std::endl; + } else { + XLOG(DBG2) << " Pkts before: " << pktsBefore << " Pkts after: " << pktsAfter + << " interval ms: " << durationMillseconds.count() + << " pps: " << pps << " bytes per sec: " << bytesPerSec; + } +} +} // namespace facebook::fboss diff --git a/fboss/agent/hw/benchmarks/HwRxSlowPathBenchmark.cpp b/fboss/agent/hw/benchmarks/HwRxSlowPathBenchmark.cpp index 55dc585f041d1..deceacd848332 100644 --- a/fboss/agent/hw/benchmarks/HwRxSlowPathBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwRxSlowPathBenchmark.cpp @@ -56,7 +56,7 @@ BENCHMARK(RxSlowPathBenchmark) { } auto config = utility::onePortPerInterfaceConfig(ensemble.getSw(), ports); utility::addAclTableGroup( - &config, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &config, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); utility::addDefaultAclTable(config); // We don't want to set queue rate that limits the number of rx pkts utility::addCpuQueueConfig( diff --git a/fboss/agent/hw/benchmarks/HwStatsCollectionBenchmark.cpp b/fboss/agent/hw/benchmarks/HwStatsCollectionBenchmark.cpp index 764a7c98a6d38..66e27950c12b5 100644 --- a/fboss/agent/hw/benchmarks/HwStatsCollectionBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwStatsCollectionBenchmark.cpp @@ -16,11 +16,11 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/test/AgentEnsemble.h" +#include "fboss/agent/test/utils/DsfConfigUtils.h" #include "fboss/agent/test/utils/VoqTestUtils.h" #include #include -#include namespace facebook::fboss { diff --git a/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmark.cpp b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.cpp similarity index 60% rename from fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmark.cpp rename to fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.cpp index 0c4a0b62f0736..cf8b61fdad6b9 100644 --- a/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.cpp @@ -1,12 +1,4 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ +// Copyright 2004-present Facebook. All Rights Reserved. #include #include @@ -18,17 +10,23 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/hw/test/HwTestThriftHandler.h" +#include "fboss/agent/test/utils/DsfConfigUtils.h" #include "fboss/agent/test/utils/FabricTestUtils.h" #include "fboss/agent/test/utils/VoqTestUtils.h" #include "fboss/lib/CommonUtils.h" DECLARE_int32(max_unprocessed_switch_reachability_changes); -namespace facebook::fboss { -BENCHMARK(HwSwitchReachabilityChange) { +using namespace facebook::fboss; + +namespace facebook::fboss::utility { +void switchReachabilityChangeBenchmarkHelper(cfg::SwitchType switchType) { folly::BenchmarkSuspender suspender; constexpr int kNumberOfSwitchReachabilityChangeEvents{1000}; - AgentEnsembleSwitchConfigFn initialConfig = + // Allow more than 1 events to be enqueued + FLAGS_max_unprocessed_switch_reachability_changes = + kNumberOfSwitchReachabilityChangeEvents; + AgentEnsembleSwitchConfigFn voqInitialConfig = [](const AgentEnsemble& ensemble) { // Disable DSF subscription on single-box test FLAGS_dsf_subscribe = false; @@ -36,9 +34,6 @@ BENCHMARK(HwSwitchReachabilityChange) { FLAGS_hide_fabric_ports = false; // Don't disable looped fabric ports FLAGS_disable_looped_fabric_ports = false; - // Allow more than 1 events to be enqueued - FLAGS_max_unprocessed_switch_reachability_changes = - kNumberOfSwitchReachabilityChangeEvents; auto config = utility::onePortPerInterfaceConfig( ensemble.getSw(), @@ -52,29 +47,41 @@ BENCHMARK(HwSwitchReachabilityChange) { config.dsfNodes() = *utility::addRemoteIntfNodeCfg(*config.dsfNodes()); return config; }; - auto ensemble = - createAgentEnsemble(initialConfig, false /*disableLinkStateToggler*/); - auto updateDsfStateFn = [&ensemble](const std::shared_ptr& in) { - std::map> switchId2SystemPorts; - std::map> switchId2Rifs; - utility::populateRemoteIntfAndSysPorts( - switchId2SystemPorts, - switchId2Rifs, - ensemble->getSw()->getConfig(), - ensemble->getSw()->getHwAsicTable()->isFeatureSupportedOnAllAsic( - HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); - return DsfStateUpdaterUtil::getUpdatedState( - in, - ensemble->getSw()->getScopeResolver(), - ensemble->getSw()->getRib(), - switchId2SystemPorts, - switchId2Rifs); - }; - ensemble->getSw()->getRib()->updateStateInRibThread( - [&ensemble, updateDsfStateFn]() { + std::unique_ptr ensemble{}; + switch (switchType) { + case cfg::SwitchType::VOQ: { + ensemble = createAgentEnsemble( + voqInitialConfig, false /*disableLinkStateToggler*/); + auto updateDsfStateFn = [&ensemble]( + const std::shared_ptr& in) { + std::map> switchId2SystemPorts; + std::map> switchId2Rifs; + utility::populateRemoteIntfAndSysPorts( + switchId2SystemPorts, + switchId2Rifs, + ensemble->getSw()->getConfig(), + ensemble->getSw()->getHwAsicTable()->isFeatureSupportedOnAllAsic( + HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); + return DsfStateUpdaterUtil::getUpdatedState( + in, + ensemble->getSw()->getScopeResolver(), + ensemble->getSw()->getRib(), + switchId2SystemPorts, + switchId2Rifs); + }; + ensemble->getSw()->getRib()->updateStateInRibThread([&ensemble, + updateDsfStateFn]() { ensemble->getSw()->updateStateWithHwFailureProtection( folly::sformat("Update state for node: {}", 0), updateDsfStateFn); }); + } break; + case cfg::SwitchType::FABRIC: + // TODO: Support to be added! + case cfg::SwitchType::NPU: + case cfg::SwitchType::PHY: + throw FbossError( + "Switch reachability benchmark unsupported on this switch type!"); + } XLOG(DBG0) << "Wait for all fabric ports to be ACTIVE"; // Wait for all fabric ports to be ACTIVE @@ -106,4 +113,4 @@ BENCHMARK(HwSwitchReachabilityChange) { } suspender.rehire(); } -} // namespace facebook::fboss +} // namespace facebook::fboss::utility diff --git a/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.h b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.h new file mode 100644 index 0000000000000..abe0976b2e6bb --- /dev/null +++ b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.h @@ -0,0 +1,16 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include "fboss/agent/hw/test/ConfigFactory.h" +#include "fboss/agent/hw/test/HwSwitchEnsemble.h" +#include "fboss/agent/hw/test/HwSwitchEnsembleFactory.h" + +#include +#include "fboss/agent/gen-cpp2/switch_config_types.h" + +namespace facebook::fboss::utility { + +void switchReachabilityChangeBenchmarkHelper(cfg::SwitchType switchType); + +} // namespace facebook::fboss::utility diff --git a/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeVoqBenchmark.cpp b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeVoqBenchmark.cpp new file mode 100644 index 0000000000000..fe151791aa5c8 --- /dev/null +++ b/fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeVoqBenchmark.cpp @@ -0,0 +1,11 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/hw/benchmarks/HwSwitchReachabilityChangeBenchmarkHelper.h" + +namespace facebook::fboss { + +BENCHMARK(HwSwitchReachabilityChangeVoqBenchmark) { + utility::switchReachabilityChangeBenchmarkHelper(cfg::SwitchType::VOQ); +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/benchmarks/HwTeFlowScaleBenchmarkHelper.cpp b/fboss/agent/hw/benchmarks/HwTeFlowScaleBenchmarkHelper.cpp index b589c32fe9a85..df78949c3e78a 100644 --- a/fboss/agent/hw/benchmarks/HwTeFlowScaleBenchmarkHelper.cpp +++ b/fboss/agent/hw/benchmarks/HwTeFlowScaleBenchmarkHelper.cpp @@ -9,12 +9,8 @@ */ #include "fboss/agent/hw/benchmarks/HwTeFlowScaleBenchmarkHelper.h" -#include "fboss/agent/Platform.h" -#include "fboss/agent/SwitchStats.h" #include "fboss/agent/benchmarks/AgentBenchmarks.h" -#include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include "fboss/agent/hw/test/HwSwitchEnsembleFactory.h" #include "fboss/agent/hw/test/HwTeFlowTestUtils.h" #include "fboss/agent/hw/test/HwTestTeFlowUtils.h" #include "fboss/agent/test/EcmpSetupHelper.h" @@ -22,7 +18,6 @@ #include #include -#include DEFINE_int32(teflow_scale_entries, 9216, "Teflow scale entries"); diff --git a/fboss/agent/hw/benchmarks/HwTeFlowStatsCollectionBenchmark.cpp b/fboss/agent/hw/benchmarks/HwTeFlowStatsCollectionBenchmark.cpp index 9ba81e5bd1879..8b65eafdc8fcc 100644 --- a/fboss/agent/hw/benchmarks/HwTeFlowStatsCollectionBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwTeFlowStatsCollectionBenchmark.cpp @@ -21,7 +21,6 @@ #include #include -#include namespace facebook::fboss { diff --git a/fboss/agent/hw/benchmarks/HwTxSlowPathBenchmark.cpp b/fboss/agent/hw/benchmarks/HwTxSlowPathBenchmark.cpp index dd1a4690f788d..dc6e59a608ad9 100644 --- a/fboss/agent/hw/benchmarks/HwTxSlowPathBenchmark.cpp +++ b/fboss/agent/hw/benchmarks/HwTxSlowPathBenchmark.cpp @@ -10,8 +10,6 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include "fboss/agent/hw/test/HwSwitchEnsembleFactory.h" -#include "fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/test/EcmpSetupHelper.h" diff --git a/fboss/agent/hw/hardware_stats.thrift b/fboss/agent/hw/hardware_stats.thrift index 6631b4c895160..8a4e81db1e5df 100644 --- a/fboss/agent/hw/hardware_stats.thrift +++ b/fboss/agent/hw/hardware_stats.thrift @@ -76,6 +76,7 @@ struct HwPortStats { 37: map fecCodewords_ = {}; 38: optional i64 pqpErrorEgressDroppedPackets_; 39: optional i64 fabricLinkDownDroppedCells_; + 40: optional i64 linkLayerFlowControlWatermark_; // seconds from epoch 50: i64 timestamp_ = STAT_UNINITIALIZED; @@ -229,6 +230,7 @@ struct HwAsicErrors { 8: optional i64 alignerErrors; 9: optional i64 forwardingQueueProcessorErrors; 10: optional i64 allReassemblyContextsTaken; + 11: optional i64 reassemblyErrors; } struct HwTeFlowStats { @@ -269,6 +271,8 @@ struct HwSwitchWatermarkStats { 5: map globalHeadroomWatermarkBytes; 6: map globalSharedWatermarkBytes; 7: optional i64 egressCoreBufferWatermarkBytes; + 8: optional i64 sramMinBufferWatermarkBytes; + 9: optional i64 fdrFifoWatermarkBytes; } struct CpuPortStats { @@ -293,6 +297,10 @@ struct HwSwitchDropStats { 11: optional i64 ingressPacketPipelineRejectDrops; 12: optional i64 corruptedCellPacketIntegrityDrops; 13: optional i64 missingCellPacketIntegrityDrops; + 14: optional i64 rqpFabricCellCorruptionDrops; + 15: optional i64 rqpNonFabricCellCorruptionDrops; + 16: optional i64 rqpNonFabricCellMissingDrops; + 17: optional i64 rqpParityErrorDrops; } struct HwSwitchDramStats { @@ -348,6 +356,10 @@ struct HwSwitchFb303GlobalStats { 27: optional i64 dram_blocked_time_ns; 28: optional i64 deleted_credit_bytes; 29: optional i64 vsq_resource_exhaustion_drops; + 30: optional i64 rqp_fabric_cell_corruption; + 31: optional i64 rqp_non_fabric_cell_corruption; + 32: optional i64 rqp_non_fabric_cell_missing; + 33: optional i64 rqp_parity_error; } struct HwFlowletStats { diff --git a/fboss/agent/hw/mock/BUCK b/fboss/agent/hw/mock/BUCK index ad7eeb853c181..99b039b94701d 100644 --- a/fboss/agent/hw/mock/BUCK +++ b/fboss/agent/hw/mock/BUCK @@ -48,7 +48,6 @@ cpp_library( "//fboss/agent:packet", "//fboss/agent/packet:packet", "//fboss/agent/packet:pktutil", - "//folly:memory", "//folly:range", "//folly/io:iobuf", ], diff --git a/fboss/agent/hw/mock/MockPlatform.cpp b/fboss/agent/hw/mock/MockPlatform.cpp index 4d5026f975066..b53003816ab15 100644 --- a/fboss/agent/hw/mock/MockPlatform.cpp +++ b/fboss/agent/hw/mock/MockPlatform.cpp @@ -12,12 +12,10 @@ #include #include "fboss/agent/Platform.h" #include "fboss/agent/SysError.h" -#include "fboss/agent/ThriftHandler.h" #include "fboss/agent/hw/mock/MockHwSwitch.h" #include "fboss/agent/hw/mock/MockPlatformMapping.h" #include "fboss/agent/hw/mock/MockPlatformPort.h" #include "fboss/agent/hw/mock/MockTestHandle.h" -#include "fboss/agent/test/HwTestHandle.h" #include "fboss/lib/platforms/PlatformProductInfo.h" #include @@ -76,15 +74,12 @@ MockPlatform::MockPlatform() MockPlatform::~MockPlatform() = default; void MockPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional fabricNodeRole) { - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + const cfg::SwitchInfo& switchInfo, + std::optional role) { + asic_ = std::make_unique(switchId, switchInfo); } + HwSwitch* MockPlatform::getHwSwitch() const { return hw_.get(); } diff --git a/fboss/agent/hw/mock/MockPlatform.h b/fboss/agent/hw/mock/MockPlatform.h index e71a6fdb87a30..40d6b1534b15e 100644 --- a/fboss/agent/hw/mock/MockPlatform.h +++ b/fboss/agent/hw/mock/MockPlatform.h @@ -65,12 +65,9 @@ class MockPlatform : public Platform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional fabricNodeRole) override; + const cfg::SwitchInfo& switchInfo, + std::optional role) override; void createTmpDir(); void cleanupTmpDir(); diff --git a/fboss/agent/hw/mock/MockPlatformMapping.cpp b/fboss/agent/hw/mock/MockPlatformMapping.cpp index 6f201d46371bc..1884ee2e418b3 100644 --- a/fboss/agent/hw/mock/MockPlatformMapping.cpp +++ b/fboss/agent/hw/mock/MockPlatformMapping.cpp @@ -9,8 +9,6 @@ */ #include "fboss/agent/hw/mock/MockPlatformMapping.h" -#include - namespace facebook::fboss { MockPlatformMapping::MockPlatformMapping() : Wedge100PlatformMapping() { diff --git a/fboss/agent/hw/mock/MockRxPacket.cpp b/fboss/agent/hw/mock/MockRxPacket.cpp index 9f2fbe2672eec..9815a19f48666 100644 --- a/fboss/agent/hw/mock/MockRxPacket.cpp +++ b/fboss/agent/hw/mock/MockRxPacket.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/mock/MockRxPacket.h" -#include #include #include #include "fboss/agent/packet/PktUtil.h" diff --git a/fboss/agent/hw/mock/MockTestHandle.cpp b/fboss/agent/hw/mock/MockTestHandle.cpp index fdd31f8054afd..177e06dae7b50 100644 --- a/fboss/agent/hw/mock/MockTestHandle.cpp +++ b/fboss/agent/hw/mock/MockTestHandle.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/mock/MockTestHandle.h" #include -#include #include "fboss/agent/hw/mock/MockRxPacket.h" diff --git a/fboss/agent/hw/sai/api/AclApi.h b/fboss/agent/hw/sai/api/AclApi.h index bbdd21ee2a2eb..3923876151914 100644 --- a/fboss/agent/hw/sai/api/AclApi.h +++ b/fboss/agent/hw/sai/api/AclApi.h @@ -27,8 +27,6 @@ namespace facebook::fboss { class AclApi; -inline auto constexpr kAclTable1 = "AclTable1"; - struct SaiAclTableGroupTraits { static constexpr sai_object_type_t ObjectType = SAI_OBJECT_TYPE_ACL_TABLE_GROUP; @@ -198,6 +196,40 @@ struct SaiAclTableTraits { #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) using FieldIpv6NextHeader = SaiAttribute; +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + using UserDefinedFieldGroupMin0 = SaiAttribute< + EnumType, + SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN, + sai_object_id_t, + SaiObjectIdDefault>; + using UserDefinedFieldGroupMin1 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 1), + sai_object_id_t, + SaiObjectIdDefault>; + using UserDefinedFieldGroupMin2 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 2), + sai_object_id_t, + SaiObjectIdDefault>; + using UserDefinedFieldGroupMin3 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 3), + sai_object_id_t, + SaiObjectIdDefault>; + using UserDefinedFieldGroupMin4 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_TABLE_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 4), + sai_object_id_t, + SaiObjectIdDefault>; #endif }; @@ -237,6 +269,17 @@ struct SaiAclTableTraits { #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) , std::optional +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + , + std::optional, + std::optional, + std::optional, + std::optional, + std::optional #endif >; @@ -279,6 +322,16 @@ SAI_ATTRIBUTE_NAME(AclTable, FieldBthOpcode); #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) SAI_ATTRIBUTE_NAME(AclTable, FieldIpv6NextHeader); #endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) +SAI_ATTRIBUTE_NAME(AclTable, UserDefinedFieldGroupMin0); +SAI_ATTRIBUTE_NAME(AclTable, UserDefinedFieldGroupMin1); +SAI_ATTRIBUTE_NAME(AclTable, UserDefinedFieldGroupMin2); +SAI_ATTRIBUTE_NAME(AclTable, UserDefinedFieldGroupMin3); +SAI_ATTRIBUTE_NAME(AclTable, UserDefinedFieldGroupMin4); +#endif struct SaiAclEntryTraits { static constexpr sai_object_type_t ObjectType = SAI_OBJECT_TYPE_ACL_ENTRY; @@ -405,6 +458,35 @@ struct SaiAclEntryTraits { EnumType, SAI_ACL_ENTRY_ATTR_FIELD_IPV6_NEXT_HEADER, AclEntryFieldU8>; +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + using UserDefinedFieldGroupMin0 = SaiAttribute< + EnumType, + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN, + AclEntryFieldU8List>; + using UserDefinedFieldGroupMin1 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 1), + AclEntryFieldU8List>; + using UserDefinedFieldGroupMin2 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 2), + AclEntryFieldU8List>; + using UserDefinedFieldGroupMin3 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 3), + AclEntryFieldU8List>; + using UserDefinedFieldGroupMin4 = SaiAttribute< + EnumType, + static_cast( + SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 4), + AclEntryFieldU8List>; #endif using ActionPacketAction = SaiAttribute< EnumType, @@ -486,6 +568,16 @@ struct SaiAclEntryTraits { #endif #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) std::optional, +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, #endif std::optional, std::optional, @@ -538,6 +630,16 @@ SAI_ATTRIBUTE_NAME(AclEntry, FieldBthOpcode); #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) SAI_ATTRIBUTE_NAME(AclEntry, FieldIpv6NextHeader); #endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) +SAI_ATTRIBUTE_NAME(AclEntry, UserDefinedFieldGroupMin0); +SAI_ATTRIBUTE_NAME(AclEntry, UserDefinedFieldGroupMin1); +SAI_ATTRIBUTE_NAME(AclEntry, UserDefinedFieldGroupMin2); +SAI_ATTRIBUTE_NAME(AclEntry, UserDefinedFieldGroupMin3); +SAI_ATTRIBUTE_NAME(AclEntry, UserDefinedFieldGroupMin4); +#endif SAI_ATTRIBUTE_NAME(AclEntry, ActionPacketAction); SAI_ATTRIBUTE_NAME(AclEntry, ActionCounter); SAI_ATTRIBUTE_NAME(AclEntry, ActionSetTC); diff --git a/fboss/agent/hw/sai/api/ArsProfileApi.h b/fboss/agent/hw/sai/api/ArsProfileApi.h index e179770a08578..1e78c7083c4fe 100644 --- a/fboss/agent/hw/sai/api/ArsProfileApi.h +++ b/fboss/agent/hw/sai/api/ArsProfileApi.h @@ -134,6 +134,7 @@ SAI_ATTRIBUTE_NAME(ArsProfile, PortLoadCurrent) SAI_ATTRIBUTE_NAME(ArsProfile, PortLoadExponent) SAI_ATTRIBUTE_NAME(ArsProfile, LoadCurrentMinVal) SAI_ATTRIBUTE_NAME(ArsProfile, LoadCurrentMaxVal) +SAI_ATTRIBUTE_NAME(ArsProfile, MaxFlows) class ArsProfileApi : public SaiApi { public: diff --git a/fboss/agent/hw/sai/api/FdbApi.cpp b/fboss/agent/hw/sai/api/FdbApi.cpp index 0d2266f13b513..242be8e58c7b4 100644 --- a/fboss/agent/hw/sai/api/FdbApi.cpp +++ b/fboss/agent/hw/sai/api/FdbApi.cpp @@ -11,8 +11,6 @@ #include "fboss/agent/hw/sai/api/FdbApi.h" #include "fboss/agent/Constants.h" -#include - #include namespace { diff --git a/fboss/agent/hw/sai/api/LoggingUtil.cpp b/fboss/agent/hw/sai/api/LoggingUtil.cpp index 5014f265868d1..729a596d9961f 100644 --- a/fboss/agent/hw/sai/api/LoggingUtil.cpp +++ b/fboss/agent/hw/sai/api/LoggingUtil.cpp @@ -17,7 +17,7 @@ #include extern "C" { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) #include #ifndef IS_OSS_BRCM_SAI #include @@ -30,7 +30,7 @@ extern "C" { namespace facebook::fboss { folly::StringPiece saiApiTypeToString(sai_api_t apiType) { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) if (UNLIKELY(apiType >= SAI_API_MAX)) { switch (static_cast(apiType)) { case SAI_API_TAM_EVENT_AGING_GROUP: @@ -149,11 +149,11 @@ folly::StringPiece saiApiTypeToString(sai_api_t apiType) { } folly::StringPiece saiObjectTypeToString(sai_object_type_t objectType) { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) if (UNLIKELY(objectType >= SAI_OBJECT_TYPE_MAX)) { switch (static_cast(objectType)) { case SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP: - return "event-aging-group"; + return "tam-event-aging-group"; default: throw FbossError("object type extension invalid: ", objectType); } diff --git a/fboss/agent/hw/sai/api/MirrorApi.h b/fboss/agent/hw/sai/api/MirrorApi.h index 0ede3ad5cc3a9..2db7a66c59f96 100644 --- a/fboss/agent/hw/sai/api/MirrorApi.h +++ b/fboss/agent/hw/sai/api/MirrorApi.h @@ -40,9 +40,16 @@ struct SaiMirrorTraits { EnumType, SAI_MIRROR_SESSION_ATTR_MONITOR_PORT, SaiObjectIdT>; + struct AttributeTcBufferLimit { + std::optional operator()(); + }; + using TcBufferLimit = + SaiExtensionAttribute; }; - using CreateAttributes = - std::tuple; + using CreateAttributes = std::tuple< + Attributes::Type, + Attributes::MonitorPort, + std::optional>; using AdapterHostKey = CreateAttributes; }; @@ -96,6 +103,11 @@ struct SaiMirrorTraits { EnumType, SAI_MIRROR_SESSION_ATTR_SAMPLE_RATE, sai_uint32_t>; + struct AttributeTcBufferLimit { + std::optional operator()(); + }; + using TcBufferLimit = + SaiExtensionAttribute; }; using CreateAttributes = std::tuple< Attributes::Type, @@ -110,7 +122,8 @@ struct SaiMirrorTraits { Attributes::IpHeaderVersion, std::optional, std::optional, - std::optional>; + std::optional, + std::optional>; using AdapterHostKey = std::tuple< Attributes::Type, Attributes::MonitorPort, @@ -241,6 +254,7 @@ using SaiMirrorTraits = ConditionObjectTraits< using SaiMirrorAdapterHostKey = typename SaiMirrorTraits::AdapterHostKey; using SaiMirrorAdaptertKey = typename SaiMirrorTraits::AdapterKey; +SAI_ATTRIBUTE_NAME(LocalMirror, TcBufferLimit) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, Type) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, MonitorPort) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, TruncateSize) @@ -254,6 +268,7 @@ SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, SrcMacAddress) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, DstMacAddress) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, IpHeaderVersion) SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, SampleRate) +SAI_ATTRIBUTE_NAME(EnhancedRemoteMirror, TcBufferLimit) SAI_ATTRIBUTE_NAME(SflowMirror, UdpSrcPort) SAI_ATTRIBUTE_NAME(SflowMirror, UdpDstPort) SAI_ATTRIBUTE_NAME(SflowMirror, TcBufferLimit) diff --git a/fboss/agent/hw/sai/api/NeighborApi.cpp b/fboss/agent/hw/sai/api/NeighborApi.cpp index affe4bb737a27..75e8cc0f9cdc1 100644 --- a/fboss/agent/hw/sai/api/NeighborApi.cpp +++ b/fboss/agent/hw/sai/api/NeighborApi.cpp @@ -12,8 +12,6 @@ #include "fboss/agent/Constants.h" -#include - #include namespace std { diff --git a/fboss/agent/hw/sai/api/PortApi.h b/fboss/agent/hw/sai/api/PortApi.h index 88dde6c95cfd8..4eda989e6b1ac 100644 --- a/fboss/agent/hw/sai/api/PortApi.h +++ b/fboss/agent/hw/sai/api/PortApi.h @@ -445,6 +445,11 @@ struct SaiPortTraits { sai_uint32_t, AttributeCondEntropyRehashSeed, SaiIntDefault>; + struct AttributeShelEnable { + std::optional operator()(); + }; + using ShelEnable = + SaiExtensionAttribute; }; using AdapterKey = PortSaiId; @@ -553,7 +558,8 @@ struct SaiPortTraits { std::optional, std::optional, std::optional, - std::optional>; + std::optional, + std::optional>; static constexpr std::array CounterIdsToRead = { SAI_PORT_STAT_IF_IN_OCTETS, SAI_PORT_STAT_IF_IN_UCAST_PKTS, @@ -708,6 +714,7 @@ SAI_ATTRIBUTE_NAME(Port, ReachabilityGroup) SAI_ATTRIBUTE_NAME(Port, CondEntropyRehashEnable) SAI_ATTRIBUTE_NAME(Port, CondEntropyRehashPeriodUS) SAI_ATTRIBUTE_NAME(Port, CondEntropyRehashSeed) +SAI_ATTRIBUTE_NAME(Port, ShelEnable) template <> struct SaiObjectHasStats : public std::true_type {}; diff --git a/fboss/agent/hw/sai/api/RouteApi.cpp b/fboss/agent/hw/sai/api/RouteApi.cpp index 7a49ebd16e50c..1532b3511fcea 100644 --- a/fboss/agent/hw/sai/api/RouteApi.cpp +++ b/fboss/agent/hw/sai/api/RouteApi.cpp @@ -12,8 +12,6 @@ #include "fboss/agent/Constants.h" -#include - #include namespace { diff --git a/fboss/agent/hw/sai/api/SaiApiTable.cpp b/fboss/agent/hw/sai/api/SaiApiTable.cpp index 348470e2a7044..6c6e40b09fbb5 100644 --- a/fboss/agent/hw/sai/api/SaiApiTable.cpp +++ b/fboss/agent/hw/sai/api/SaiApiTable.cpp @@ -197,7 +197,7 @@ const TamApi& SaiApiTable::tamApi() const { return getApi(); } -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) const TamEventAgingGroupApi& SaiApiTable::tamEventAgingGroupApi() const { return getApi(); } diff --git a/fboss/agent/hw/sai/api/SaiApiTable.h b/fboss/agent/hw/sai/api/SaiApiTable.h index c8c829f2fd94f..51190e6076b30 100644 --- a/fboss/agent/hw/sai/api/SaiApiTable.h +++ b/fboss/agent/hw/sai/api/SaiApiTable.h @@ -128,7 +128,7 @@ class SaiApiTable { const TamApi& tamApi() const; -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) const TamEventAgingGroupApi& tamEventAgingGroupApi() const; #endif @@ -190,7 +190,7 @@ class SaiApiTable { std::unique_ptr, std::unique_ptr, std::unique_ptr, -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) std::unique_ptr, #endif std::unique_ptr, diff --git a/fboss/agent/hw/sai/api/SaiDefaultAttributeValues.h b/fboss/agent/hw/sai/api/SaiDefaultAttributeValues.h index db61d131b4734..e6ad4928690d7 100644 --- a/fboss/agent/hw/sai/api/SaiDefaultAttributeValues.h +++ b/fboss/agent/hw/sai/api/SaiDefaultAttributeValues.h @@ -194,6 +194,12 @@ struct SaiHostifUserDefinedTrapDefaultPriority { } }; +struct SaiIpAddressDefault { + folly::IPAddress operator()() const { + return folly::IPAddressV6("::"); + } +}; + using SaiObjectIdListDefault = SaiListDefault; using SaiU32ListDefault = SaiListDefault; using SaiS8ListDefault = SaiListDefault; diff --git a/fboss/agent/hw/sai/api/SaiVersion.h b/fboss/agent/hw/sai/api/SaiVersion.h index eb7b5e11d83fb..7bbd87f2c9ccb 100644 --- a/fboss/agent/hw/sai/api/SaiVersion.h +++ b/fboss/agent/hw/sai/api/SaiVersion.h @@ -50,7 +50,8 @@ defined(SAI_VERSION_10_0_EA_ODP) || \ defined(SAI_VERSION_10_0_EA_SIM_ODP) || \ defined(SAI_VERSION_10_2_0_0_ODP) || defined(SAI_VERSION_11_0_EA_ODP) || \ - defined(SAI_VERSION_11_0_EA_SIM_ODP) || defined(SAI_VERSION_11_3_0_0_ODP) + defined(SAI_VERSION_11_0_EA_SIM_ODP) || \ + defined(SAI_VERSION_11_3_0_0_ODP) || defined(SAI_VERSION_11_7_0_0_ODP) #define BRCM_SAI_SDK_XGS #endif @@ -81,7 +82,8 @@ defined(SAI_VERSION_11_0_EA_DNX_ODP) || \ defined(SAI_VERSION_11_0_EA_DNX_SIM_ODP) || \ defined(SAI_VERSION_11_3_0_0_DNX_ODP) || \ - defined(SAI_VERSION_11_3_0_0_ODP) || defined(SAI_VERSION_11_7_0_0_DNX_ODP) + defined(SAI_VERSION_11_3_0_0_ODP) || \ + defined(SAI_VERSION_11_7_0_0_DNX_ODP) || defined(SAI_VERSION_11_7_0_0_ODP) #define BRCM_SAI_SDK_GTE_11_0 #endif @@ -113,19 +115,24 @@ * - TAJO_SDK_GTE_24_4_90: Flags for SDK >= 24.4.90 * - TAJO_SDK: Flags for all TAJO SDK */ -#if defined(TAJO_SDK_VERSION_24_4_90) || defined(TAJO_SDK_VERSION_24_7_0) || \ - defined(TAJO_SDK_VERSION_24_8_3001) || defined(TAJO_SDK_VERSION_24_10_0) +#if defined(TAJO_SDK_VERSION_24_4_90) || defined(TAJO_SDK_VERSION_24_7_0) || \ + defined(TAJO_SDK_VERSION_24_8_3001) || \ + defined(TAJO_SDK_VERSION_24_10_0) || defined(TAJO_SDK_VERSION_24_8_90) || \ + defined(TAJO_SDK_VERSION_24_8_91) #define TAJO_P4_WB_SDK #endif #if defined(TAJO_SDK_VERSION_1_42_8) || defined(TAJO_SDK_VERSION_24_4_90) || \ defined(TAJO_SDK_VERSION_24_7_0) || defined(TAJO_SDK_VERSION_24_8_3001) || \ - defined(TAJO_SDK_VERSION_24_10_0) + defined(TAJO_SDK_VERSION_24_10_0) || defined(TAJO_SDK_VERSION_24_8_90) || \ + defined(TAJO_SDK_VERSION_24_8_91) #define TAJO_SDK_EBRO #endif -#if defined(TAJO_SDK_VERSION_24_4_90) || defined(TAJO_SDK_VERSION_24_7_0) || \ - defined(TAJO_SDK_VERSION_24_8_3001) || defined(TAJO_SDK_VERSION_24_10_0) +#if defined(TAJO_SDK_VERSION_24_4_90) || defined(TAJO_SDK_VERSION_24_7_0) || \ + defined(TAJO_SDK_VERSION_24_8_3001) || \ + defined(TAJO_SDK_VERSION_24_10_0) || defined(TAJO_SDK_VERSION_24_8_90) || \ + defined(TAJO_SDK_VERSION_24_8_91) #define TAJO_SDK_GTE_24_4_90 #endif diff --git a/fboss/agent/hw/sai/api/SwitchApi.h b/fboss/agent/hw/sai/api/SwitchApi.h index 1158ef643399a..5db7bff25895e 100644 --- a/fboss/agent/hw/sai/api/SwitchApi.h +++ b/fboss/agent/hw/sai/api/SwitchApi.h @@ -278,11 +278,25 @@ struct SaiSwitchTraits { SAI_SWITCH_ATTR_ECN_ECT_THRESHOLD_ENABLE, bool, SaiBoolDefaultFalse>; + struct AttributeFirmwareCoreTouse { + std::optional operator()(); + }; + using FirmwareCoreToUse = SaiExtensionAttribute< + sai_uint8_t, + AttributeFirmwareCoreTouse, + SaiIntDefault>; using FirmwarePathName = SaiAttribute< EnumType, SAI_SWITCH_ATTR_FIRMWARE_PATH_NAME, std::vector, SaiS8ListDefault>; + struct AttributeFirmwareLogFile { + std::optional operator()(); + }; + using FirmwareLogFile = SaiExtensionAttribute< + std::vector, + AttributeFirmwareLogFile, + SaiS8ListDefault>; using FirmwareLoadMethod = SaiAttribute< EnumType, SAI_SWITCH_ATTR_FIRMWARE_LOAD_METHOD, @@ -576,8 +590,87 @@ struct SaiSwitchTraits { struct AttributeNoAclsForTrapsWrapper { std::optional operator()(); }; - using NoAclsForTraps = - SaiExtensionAttribute; + using NoAclsForTraps = SaiExtensionAttribute< + bool, + AttributeNoAclsForTrapsWrapper, + SaiBoolDefaultFalse>; + struct AttributeMaxSystemPortId { + std::optional operator()(); + }; + using MaxSystemPortId = SaiExtensionAttribute< + sai_int32_t, + AttributeMaxSystemPortId, + SaiIntDefault>; + struct AttributeMaxLocalSystemPortId { + std::optional operator()(); + }; + using MaxLocalSystemPortId = SaiExtensionAttribute< + sai_int32_t, + AttributeMaxLocalSystemPortId, + SaiIntDefault>; + struct AttributeMaxSystemPorts { + std::optional operator()(); + }; + using MaxSystemPorts = SaiExtensionAttribute< + sai_int32_t, + AttributeMaxSystemPorts, + SaiIntDefault>; + struct AttributeMaxVoqs { + std::optional operator()(); + }; + using MaxVoqs = SaiExtensionAttribute< + sai_int32_t, + AttributeMaxVoqs, + SaiIntDefault>; + struct AttributeFabricCllfcTxCreditThWrapper { + std::optional operator()(); + }; + using FabricCllfcTxCreditTh = SaiExtensionAttribute< + sai_uint16_t, + AttributeFabricCllfcTxCreditThWrapper, + SaiIntDefault>; + struct AttributeVoqDramBoundThWrapper { + std::optional operator()(); + }; + using VoqDramBoundTh = SaiExtensionAttribute< + std::vector, + AttributeVoqDramBoundThWrapper, + SaiU32ListDefault>; + struct AttributeCondEntropyRehashPeriodUS { + std::optional operator()(); + }; + using CondEntropyRehashPeriodUS = SaiExtensionAttribute< + sai_uint32_t, + AttributeCondEntropyRehashPeriodUS, + SaiIntDefault>; + struct AttributeShelSrcIp { + std::optional operator()(); + }; + using ShelSrcIp = SaiExtensionAttribute< + folly::IPAddress, + AttributeShelSrcIp, + SaiIpAddressDefault>; + struct AttributeShelDstIp { + std::optional operator()(); + }; + using ShelDstIp = SaiExtensionAttribute< + folly::IPAddress, + AttributeShelDstIp, + SaiIpAddressDefault>; + struct AttributeShelSrcMac { + std::optional operator()(); + }; + using ShelSrcMac = SaiExtensionAttribute< + folly::MacAddress, + AttributeShelSrcMac, + SaiMacAddressDefault>; + struct AttributeShelPeriodicInterval { + std::optional operator()(); + }; + using ShelPeriodicInterval = SaiExtensionAttribute< + sai_uint32_t, + AttributeShelPeriodicInterval, + SaiIntDefault>; }; using AdapterKey = SwitchSaiId; using AdapterHostKey = std::monostate; @@ -605,7 +698,9 @@ struct SaiSwitchTraits { std::optional, std::optional, std::optional, + std::optional, std::optional, + std::optional, std::optional, std::optional, std::optional, @@ -649,7 +744,18 @@ struct SaiSwitchTraits { std::optional, std::optional, std::optional, - std::optional>; + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional, + std::optional>; #if SAI_API_VERSION >= SAI_VERSION(1, 12, 0) static constexpr std::array CounterIdsToRead = { @@ -670,6 +776,12 @@ struct SaiSwitchTraits { static const std::vector& dramBlockTime(); static const std::vector& egressCoreBufferWatermarkBytes(); static const std::vector& deletedCredits(); + static const std::vector& sramMinBufferWatermarkBytes(); + static const std::vector& fdrFifoWatermarkBytes(); + static const std::vector& egressFabricCellError(); + static const std::vector& egressNonFabricCellError(); + static const std::vector& egressNonFabricCellUnpackError(); + static const std::vector& egressParityCellError(); }; SAI_ATTRIBUTE_NAME(Switch, InitSwitch) @@ -732,7 +844,9 @@ SAI_ATTRIBUTE_NAME(Switch, UseEcnThresholds) SAI_ATTRIBUTE_NAME(Switch, EgressPoolAvaialableSize) SAI_ATTRIBUTE_NAME(Switch, CounterRefreshInterval) +SAI_ATTRIBUTE_NAME(Switch, FirmwareCoreToUse) SAI_ATTRIBUTE_NAME(Switch, FirmwarePathName) +SAI_ATTRIBUTE_NAME(Switch, FirmwareLogFile) SAI_ATTRIBUTE_NAME(Switch, FirmwareLoadMethod) SAI_ATTRIBUTE_NAME(Switch, FirmwareLoadType) SAI_ATTRIBUTE_NAME(Switch, HardwareAccessBus) @@ -771,12 +885,12 @@ SAI_ATTRIBUTE_NAME(Switch, FabricRemoteReachablePortList) SAI_ATTRIBUTE_NAME(Switch, RouteNoImplicitMetaData) SAI_ATTRIBUTE_NAME(Switch, RouteAllowImplicitMetaData) SAI_ATTRIBUTE_NAME(Switch, MultiStageLocalSwitchIds) -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLocalNs); -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLocalNs); -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLevel1Ns); -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLevel1Ns); -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLevel2Ns); -SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLevel2Ns); +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLocalNs) +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLocalNs) +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLevel1Ns) +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLevel1Ns) +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMinLevel2Ns) +SAI_ATTRIBUTE_NAME(Switch, VoqLatencyMaxLevel2Ns) #if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) SAI_ATTRIBUTE_NAME(Switch, ArsProfile) #endif @@ -784,7 +898,18 @@ SAI_ATTRIBUTE_NAME(Switch, ReachabilityGroupList); SAI_ATTRIBUTE_NAME(Switch, FabricLinkLayerFlowControlThreshold); SAI_ATTRIBUTE_NAME(Switch, SramFreePercentXoffTh); SAI_ATTRIBUTE_NAME(Switch, SramFreePercentXonTh); -SAI_ATTRIBUTE_NAME(Switch, NoAclsForTraps) +SAI_ATTRIBUTE_NAME(Switch, NoAclsForTraps); +SAI_ATTRIBUTE_NAME(Switch, MaxSystemPortId); +SAI_ATTRIBUTE_NAME(Switch, MaxLocalSystemPortId); +SAI_ATTRIBUTE_NAME(Switch, MaxSystemPorts); +SAI_ATTRIBUTE_NAME(Switch, MaxVoqs); +SAI_ATTRIBUTE_NAME(Switch, FabricCllfcTxCreditTh); +SAI_ATTRIBUTE_NAME(Switch, VoqDramBoundTh); +SAI_ATTRIBUTE_NAME(Switch, CondEntropyRehashPeriodUS) +SAI_ATTRIBUTE_NAME(Switch, ShelSrcIp) +SAI_ATTRIBUTE_NAME(Switch, ShelDstIp) +SAI_ATTRIBUTE_NAME(Switch, ShelSrcMac) +SAI_ATTRIBUTE_NAME(Switch, ShelPeriodicInterval) template <> struct SaiObjectHasStats : public std::true_type {}; diff --git a/fboss/agent/hw/sai/api/SystemPortApi.h b/fboss/agent/hw/sai/api/SystemPortApi.h index c76eb315e0194..79ff449fce7e1 100644 --- a/fboss/agent/hw/sai/api/SystemPortApi.h +++ b/fboss/agent/hw/sai/api/SystemPortApi.h @@ -65,6 +65,13 @@ struct SaiSystemPortTraits { SAI_SYSTEM_PORT_ATTR_QOS_TC_TO_QUEUE_MAP, SaiObjectIdT, SaiObjectIdDefault>; + struct AttributeShelPktDstEnable { + std::optional operator()(); + }; + using ShelPktDstEnable = SaiExtensionAttribute< + bool, + AttributeShelPktDstEnable, + SaiBoolDefaultFalse>; }; using AdapterKey = SystemPortSaiId; using AdapterHostKey = Attributes::ConfigInfo; @@ -72,7 +79,8 @@ struct SaiSystemPortTraits { using CreateAttributes = std::tuple< Attributes::ConfigInfo, Attributes::AdminState, - std::optional>; + std::optional, + std::optional>; }; SAI_ATTRIBUTE_NAME(SystemPort, Type) @@ -82,6 +90,7 @@ SAI_ATTRIBUTE_NAME(SystemPort, Port) SAI_ATTRIBUTE_NAME(SystemPort, AdminState) SAI_ATTRIBUTE_NAME(SystemPort, ConfigInfo) SAI_ATTRIBUTE_NAME(SystemPort, QosTcToQueueMap) +SAI_ATTRIBUTE_NAME(SystemPort, ShelPktDstEnable) class SystemPortApi : public SaiApi { public: diff --git a/fboss/agent/hw/sai/api/TamEventAgingGroupApi.h b/fboss/agent/hw/sai/api/TamEventAgingGroupApi.h index a27844c30b91f..010892e152b17 100644 --- a/fboss/agent/hw/sai/api/TamEventAgingGroupApi.h +++ b/fboss/agent/hw/sai/api/TamEventAgingGroupApi.h @@ -2,7 +2,7 @@ #pragma once -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) #include "fboss/agent/hw/sai/api/SaiApi.h" #include "fboss/agent/hw/sai/api/SaiAttribute.h" @@ -45,9 +45,6 @@ struct SaiTamEventAgingGroupTraits { using AdapterHostKey = std::tuple; using CreateAttributes = AdapterHostKey; }; -// Workaround for CS00012373477: sai_get_object_count() INVALID_PARAMETER -template <> -struct GetObjectKeySupported : std::false_type {}; SAI_ATTRIBUTE_NAME(TamEventAgingGroup, Type) SAI_ATTRIBUTE_NAME(TamEventAgingGroup, AgingTime) diff --git a/fboss/agent/hw/sai/api/bcm/BufferApi.cpp b/fboss/agent/hw/sai/api/bcm/BufferApi.cpp index 32aa79ee7616d..78f4d7553f145 100644 --- a/fboss/agent/hw/sai/api/bcm/BufferApi.cpp +++ b/fboss/agent/hw/sai/api/bcm/BufferApi.cpp @@ -24,8 +24,7 @@ SaiBufferProfileTraits::Attributes::AttributeSharedFadtMaxTh::operator()() { std::optional SaiBufferProfileTraits::Attributes::AttributeSharedFadtMinTh::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_BUFFER_PROFILE_ATTR_SHARED_FADT_MIN_TH; #else return std::nullopt; @@ -34,8 +33,7 @@ SaiBufferProfileTraits::Attributes::AttributeSharedFadtMinTh::operator()() { std::optional SaiBufferProfileTraits::Attributes::AttributeSramFadtMinTh::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_BUFFER_PROFILE_ATTR_SRAM_FADT_MIN_TH; #else return std::nullopt; @@ -44,8 +42,7 @@ SaiBufferProfileTraits::Attributes::AttributeSramFadtMinTh::operator()() { std::optional SaiBufferProfileTraits::Attributes::AttributeSramFadtMaxTh::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_BUFFER_PROFILE_ATTR_SRAM_FADT_MAX_TH; #else return std::nullopt; @@ -54,8 +51,7 @@ SaiBufferProfileTraits::Attributes::AttributeSramFadtMaxTh::operator()() { std::optional SaiBufferProfileTraits::Attributes::AttributeSramFadtXonOffset::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_BUFFER_PROFILE_ATTR_SRAM_FADT_XON_OFFSET; #else return std::nullopt; diff --git a/fboss/agent/hw/sai/api/bcm/MirrorApi.cpp b/fboss/agent/hw/sai/api/bcm/MirrorApi.cpp index 3b06c27e2abbf..aa64e9f5d583c 100644 --- a/fboss/agent/hw/sai/api/bcm/MirrorApi.cpp +++ b/fboss/agent/hw/sai/api/bcm/MirrorApi.cpp @@ -3,7 +3,7 @@ #include "fboss/agent/hw/sai/api/MirrorApi.h" // TODO: Add support for 12.0 as well -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) extern "C" { #ifndef IS_OSS_BRCM_SAI @@ -18,8 +18,25 @@ namespace facebook::fboss { std::optional SaiSflowMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { -// TODO: Add support for 12.0 as well -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + return SAI_MIRROR_SESSION_ATTR_TC_BUFFER_LIMIT; +#else + return std::nullopt; +#endif +} + +std::optional SaiEnhancedRemoteMirrorTraits::Attributes:: + AttributeTcBufferLimit::operator()() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + return SAI_MIRROR_SESSION_ATTR_TC_BUFFER_LIMIT; +#else + return std::nullopt; +#endif +} + +std::optional +SaiLocalMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_MIRROR_SESSION_ATTR_TC_BUFFER_LIMIT; #else return std::nullopt; diff --git a/fboss/agent/hw/sai/api/bcm/PortApi.cpp b/fboss/agent/hw/sai/api/bcm/PortApi.cpp index b2dcccffa822c..6895fd8c1e571 100644 --- a/fboss/agent/hw/sai/api/bcm/PortApi.cpp +++ b/fboss/agent/hw/sai/api/bcm/PortApi.cpp @@ -269,4 +269,14 @@ SaiPortTraits::Attributes::AttributeCondEntropyRehashSeed::operator()() { return std::nullopt; #endif } + +std::optional +SaiPortTraits::Attributes::AttributeShelEnable::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_PORT_ATTR_SHEL_ENABLE; +#else + return std::nullopt; +#endif +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/bcm/SwitchApi.cpp b/fboss/agent/hw/sai/api/bcm/SwitchApi.cpp index 2317473220db3..3a17cefdb56a1 100644 --- a/fboss/agent/hw/sai/api/bcm/SwitchApi.cpp +++ b/fboss/agent/hw/sai/api/bcm/SwitchApi.cpp @@ -74,8 +74,7 @@ SaiSwitchTraits::Attributes::AttributeSdkBootTimeWrapper::operator()() { std::optional SaiSwitchTraits::Attributes:: AttributeSramFreePercentXoffThWrapper::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_SWITCH_ATTR_SRAM_FREE_PERCENT_XOFF_TH; #else return std::nullopt; @@ -84,14 +83,32 @@ std::optional SaiSwitchTraits::Attributes:: std::optional SaiSwitchTraits::Attributes:: AttributeSramFreePercentXonThWrapper::operator()() { -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_SWITCH_ATTR_SRAM_FREE_PERCENT_XON_TH; #else return std::nullopt; #endif } +std::optional SaiSwitchTraits::Attributes:: + AttributeFabricCllfcTxCreditThWrapper::operator()() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + return SAI_SWITCH_ATTR_FABRIC_CLLFC_TX_CREDIT_TH; +#else + return std::nullopt; +#endif +} + +std::optional +SaiSwitchTraits::Attributes::AttributeVoqDramBoundThWrapper::operator()() { +// TODO: Support is not yet available in 12.0 +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) + return SAI_SWITCH_ATTR_VOQ_DRAM_BOUND_TH; +#else + return std::nullopt; +#endif +} + const std::vector& SaiSwitchTraits::dramStats() { #if defined(BRCM_SAI_SDK_DNX) static const std::vector stats{ @@ -155,6 +172,69 @@ const std::vector& SaiSwitchTraits::deletedCredits() { return stats; } +const std::vector& +SaiSwitchTraits::sramMinBufferWatermarkBytes() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + static const std::vector stats{ + SAI_SWITCH_STAT_ING_MIN_SRAM_BUFFER_BYTES}; +#else + static const std::vector stats; +#endif + return stats; +} + +const std::vector& SaiSwitchTraits::fdrFifoWatermarkBytes() { +// TODO: Support is not yet available in 12.0 +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) + static const std::vector stats{ + SAI_SWITCH_STAT_FDR_RX_QUEUE_WM_LEVEL}; +#else + static const std::vector stats; +#endif + return stats; +} + +const std::vector& SaiSwitchTraits::egressFabricCellError() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + static const std::vector stats{ + SAI_SWITCH_STAT_EGRESS_FABRIC_CELL_ERROR}; +#else + static const std::vector stats; +#endif + return stats; +} + +const std::vector& SaiSwitchTraits::egressNonFabricCellError() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + static const std::vector stats{ + SAI_SWITCH_STAT_EGRESS_NON_FABRIC_CELL_ERROR}; +#else + static const std::vector stats; +#endif + return stats; +} + +const std::vector& +SaiSwitchTraits::egressNonFabricCellUnpackError() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + static const std::vector stats{ + SAI_SWITCH_STAT_EGRESS_CUP_NON_FABRIC_CELL_ERROR}; +#else + static const std::vector stats; +#endif + return stats; +} + +const std::vector& SaiSwitchTraits::egressParityCellError() { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + static const std::vector stats{ + SAI_SWITCH_STAT_EGRESS_PARITY_CELL_ERROR}; +#else + static const std::vector stats; +#endif + return stats; +} + void SwitchApi::registerSwitchEventCallback( SwitchSaiId id, void* switch_event_cb) const { @@ -171,7 +251,20 @@ void SwitchApi::registerSwitchEventCallback( rv, ApiType, "Unable to register parity error switch event callback"); // Register switch events -#if defined BRCM_SAI_SDK_GTE_11_0 +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + // SAI_SWITCH_EVENT_TYPE_FIRMWARE_CRASHED is not supported on 12.0 yet + std::array events = { + SAI_SWITCH_EVENT_TYPE_PARITY_ERROR, + SAI_SWITCH_EVENT_TYPE_STABLE_FULL, + SAI_SWITCH_EVENT_TYPE_STABLE_ERROR, + SAI_SWITCH_EVENT_TYPE_UNCONTROLLED_SHUTDOWN, + SAI_SWITCH_EVENT_TYPE_WARM_BOOT_DOWNGRADE, + SAI_SWITCH_EVENT_TYPE_INTERRUPT, + SAI_SWITCH_EVENT_TYPE_FABRIC_AUTO_ISOLATE, + SAI_SWITCH_EVENT_TYPE_FIRMWARE_CRASHED, + SAI_SWITCH_EVENT_TYPE_REMOTE_LINK_CHANGE}; +#elif defined BRCM_SAI_SDK_GTE_11_0 std::array events = { SAI_SWITCH_EVENT_TYPE_PARITY_ERROR, SAI_SWITCH_EVENT_TYPE_STABLE_FULL, @@ -334,4 +427,98 @@ SaiSwitchTraits::Attributes::AttributeNoAclsForTrapsWrapper::operator()() { #endif } +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPortId::operator()() { +#if defined(BRCM_SAI_SDK_DNX) && defined(BRCM_SAI_SDK_GTE_12_0) + return SAI_SWITCH_ATTR_MAX_SYSTEM_PORT_ID; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxLocalSystemPortId::operator()() { +#if defined(BRCM_SAI_SDK_DNX) && defined(BRCM_SAI_SDK_GTE_12_0) + return SAI_SWITCH_ATTR_MAX_LOCAL_SYSTEM_PORT_ID; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPorts::operator()() { +#if defined(BRCM_SAI_SDK_DNX) && defined(BRCM_SAI_SDK_GTE_12_0) + return SAI_SWITCH_ATTR_MAX_SYSTEM_PORTS; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxVoqs::operator()() { +#if defined(BRCM_SAI_SDK_DNX) && defined(BRCM_SAI_SDK_GTE_12_0) + return SAI_SWITCH_ATTR_MAX_VOQS; +#endif + return std::nullopt; +} +std::optional +SaiSwitchTraits::Attributes::AttributeCondEntropyRehashPeriodUS::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_COND_ENTROPY_REHASH_PERIOD_US; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcIp::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_SHEL_SRC_IP; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelDstIp::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_SHEL_DST_IP; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcMac::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_SHEL_SRC_MAC; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelPeriodicInterval::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_SHEL_PERIODIC_INTERVAL; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareCoreTouse::operator()() { +// TODO(skhare): Update when 12.x supports this attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_FIRMWARE_CORE_TO_USE; +#endif + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareLogFile::operator()() { +// TODO(skhare): Update when 12.x supports this attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SWITCH_ATTR_FIRMWARE_LOG_FILE; +#endif + return std::nullopt; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/bcm/SystemPortApi.cpp b/fboss/agent/hw/sai/api/bcm/SystemPortApi.cpp new file mode 100644 index 0000000000000..ba0d734f85f87 --- /dev/null +++ b/fboss/agent/hw/sai/api/bcm/SystemPortApi.cpp @@ -0,0 +1,27 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/hw/sai/api/SystemPortApi.h" + +extern "C" { +#include + +#ifndef IS_OSS_BRCM_SAI +#include +#else +#include +#endif +} + +namespace facebook::fboss { + +std::optional +SaiSystemPortTraits::Attributes::AttributeShelPktDstEnable::operator()() { +// TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + return SAI_SYSTEM_PORT_ATTR_SHEL_PKT_DEST_ENABLE; +#else + return std::nullopt; +#endif +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/bcm/TamApi.cpp b/fboss/agent/hw/sai/api/bcm/TamApi.cpp index d25a93b568587..d00bb291be0f2 100644 --- a/fboss/agent/hw/sai/api/bcm/TamApi.cpp +++ b/fboss/agent/hw/sai/api/bcm/TamApi.cpp @@ -19,7 +19,7 @@ SaiTamEventTraits::Attributes::AttributeSwitchEventType::operator()() { std::optional SaiTamEventTraits::Attributes::AttributeDeviceId::operator()() { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_TAM_EVENT_ATTR_DEVICE_ID; #endif return std::nullopt; @@ -27,7 +27,7 @@ SaiTamEventTraits::Attributes::AttributeDeviceId::operator()() { std::optional SaiTamEventTraits::Attributes::AttributeEventId::operator()() { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_TAM_EVENT_ATTR_EVENT_ID; #endif return std::nullopt; @@ -35,7 +35,7 @@ SaiTamEventTraits::Attributes::AttributeEventId::operator()() { std::optional SaiTamEventTraits::Attributes::AttributeExtensionsCollectorList::operator()() { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_TAM_EVENT_ATTR_EXTENSIONS_COLLECTOR_LIST; #endif return std::nullopt; @@ -43,7 +43,7 @@ SaiTamEventTraits::Attributes::AttributeExtensionsCollectorList::operator()() { std::optional SaiTamEventTraits::Attributes::AttributePacketDropTypeMmu::operator()() { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_TAM_EVENT_ATTR_PACKET_DROP_TYPE_MMU; #endif return std::nullopt; @@ -51,7 +51,7 @@ SaiTamEventTraits::Attributes::AttributePacketDropTypeMmu::operator()() { std::optional SaiTamEventTraits::Attributes::AttributeAgingGroup::operator()() { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) return SAI_TAM_EVENT_ATTR_AGING_GROUP; #endif return std::nullopt; diff --git a/fboss/agent/hw/sai/api/fake/FakeSaiExtensions.cpp b/fboss/agent/hw/sai/api/fake/FakeSaiExtensions.cpp index 0cdffb0310a68..9a2982d2bf37b 100644 --- a/fboss/agent/hw/sai/api/fake/FakeSaiExtensions.cpp +++ b/fboss/agent/hw/sai/api/fake/FakeSaiExtensions.cpp @@ -6,6 +6,7 @@ #include "fboss/agent/hw/sai/api/PortApi.h" #include "fboss/agent/hw/sai/api/QueueApi.h" #include "fboss/agent/hw/sai/api/SwitchApi.h" +#include "fboss/agent/hw/sai/api/SystemPortApi.h" #include "fboss/agent/hw/sai/api/TamApi.h" extern "C" { @@ -242,6 +243,16 @@ SaiSflowMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { return std::nullopt; } +std::optional +SaiLocalMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + +std::optional SaiEnhancedRemoteMirrorTraits::Attributes:: + AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + std::optional SaiSwitchTraits::Attributes::AttributeNoAclsForTrapsWrapper::operator()() { return std::nullopt; @@ -283,6 +294,38 @@ const std::vector& SaiQueueTraits::egressGvoqWatermarkBytes() { return stats; } +const std::vector& +SaiSwitchTraits::sramMinBufferWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::fdrFifoWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressNonFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& +SaiSwitchTraits::egressNonFabricCellUnpackError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressParityCellError() { + static const std::vector stats; + return stats; +} + std::optional SaiSwitchTraits::Attributes::AttributeVoqLatencyMinLocalNs::operator()() { return SAI_SWITCH_ATTR_VOQ_LATENCY_MIN_LOCAL; @@ -333,6 +376,41 @@ std::optional SaiSwitchTraits::Attributes:: return SAI_SWITCH_ATTR_SRAM_FREE_PERCENT_XON_TH; } +std::optional SaiSwitchTraits::Attributes:: + AttributeFabricCllfcTxCreditThWrapper::operator()() { + return SAI_SWITCH_ATTR_FABRIC_CLLFC_TX_CREDIT_TH; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeVoqDramBoundThWrapper::operator()() { + return SAI_SWITCH_ATTR_VOQ_DRAM_BOUND_TH; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeCondEntropyRehashPeriodUS::operator()() { + return SAI_SWITCH_ATTR_COND_ENTROPY_REHASH_PERIOD_US; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcIp::operator()() { + return SAI_SWITCH_ATTR_SHEL_SRC_IP; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelDstIp::operator()() { + return SAI_SWITCH_ATTR_SHEL_DST_IP; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcMac::operator()() { + return SAI_SWITCH_ATTR_SHEL_SRC_MAC; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelPeriodicInterval::operator()() { + return SAI_SWITCH_ATTR_SHEL_PERIODIC_INTERVAL; +} + std::optional SaiPortSerdesTraits::Attributes::AttributeTxDiffEncoderEnWrapper::operator()() { return SAI_PORT_SERDES_ATTR_EXT_TX_DIFF_ENCODER_EN; @@ -472,4 +550,45 @@ std::optional SaiPortTraits::Attributes::AttributeCondEntropyRehashSeed::operator()() { return std::nullopt; } + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPortId::operator()() { + return SAI_SWITCH_ATTR_MAX_SYSTEM_PORT_ID; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxLocalSystemPortId::operator()() { + return SAI_SWITCH_ATTR_MAX_LOCAL_SYSTEM_PORT_ID; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPorts::operator()() { + return SAI_SWITCH_ATTR_MAX_SYSTEM_PORTS; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxVoqs::operator()() { + return SAI_SWITCH_ATTR_MAX_VOQS; +} + +std::optional +SaiPortTraits::Attributes::AttributeShelEnable::operator()() { + return std::nullopt; +} + +std::optional +SaiSystemPortTraits::Attributes::AttributeShelPktDstEnable::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareCoreTouse::operator()() { + return SAI_SWITCH_ATTR_FIRMWARE_CORE_TO_USE; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareLogFile::operator()() { + return SAI_SWITCH_ATTR_FIRMWARE_LOG_FILE; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/fake/saifakeextensions.h b/fboss/agent/hw/sai/api/fake/saifakeextensions.h index 1b29e78d8cbf8..71557e1a2370c 100644 --- a/fboss/agent/hw/sai/api/fake/saifakeextensions.h +++ b/fboss/agent/hw/sai/api/fake/saifakeextensions.h @@ -76,6 +76,19 @@ typedef enum _sai_switch_extensions_attr_t { SAI_SWITCH_ATTR_FABRIC_LLFC_THRESHOLD, SAI_SWITCH_ATTR_SRAM_FREE_PERCENT_XOFF_TH, SAI_SWITCH_ATTR_SRAM_FREE_PERCENT_XON_TH, + SAI_SWITCH_ATTR_MAX_SYSTEM_PORT_ID, + SAI_SWITCH_ATTR_MAX_LOCAL_SYSTEM_PORT_ID, + SAI_SWITCH_ATTR_MAX_SYSTEM_PORTS, + SAI_SWITCH_ATTR_MAX_VOQS, + SAI_SWITCH_ATTR_FABRIC_CLLFC_TX_CREDIT_TH, + SAI_SWITCH_ATTR_VOQ_DRAM_BOUND_TH, + SAI_SWITCH_ATTR_COND_ENTROPY_REHASH_PERIOD_US, + SAI_SWITCH_ATTR_SHEL_SRC_IP, + SAI_SWITCH_ATTR_SHEL_DST_IP, + SAI_SWITCH_ATTR_SHEL_SRC_MAC, + SAI_SWITCH_ATTR_SHEL_PERIODIC_INTERVAL, + SAI_SWITCH_ATTR_FIRMWARE_CORE_TO_USE, + SAI_SWITCH_ATTR_FIRMWARE_LOG_FILE, } sai_switch_extensions_attr_t; typedef enum _sai_tam_event_extensions_attr_t { diff --git a/fboss/agent/hw/sai/api/oss/MirrorApi.cpp b/fboss/agent/hw/sai/api/oss/MirrorApi.cpp index 923ba68da9566..4aa903629a470 100644 --- a/fboss/agent/hw/sai/api/oss/MirrorApi.cpp +++ b/fboss/agent/hw/sai/api/oss/MirrorApi.cpp @@ -9,4 +9,14 @@ SaiSflowMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { return std::nullopt; } +std::optional SaiEnhancedRemoteMirrorTraits::Attributes:: + AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + +std::optional +SaiLocalMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/oss/PortApi.cpp b/fboss/agent/hw/sai/api/oss/PortApi.cpp index 769eba114bff1..f524b94383109 100644 --- a/fboss/agent/hw/sai/api/oss/PortApi.cpp +++ b/fboss/agent/hw/sai/api/oss/PortApi.cpp @@ -207,4 +207,9 @@ std::optional SaiPortTraits::Attributes::AttributeCondEntropyRehashSeed::operator()() { return std::nullopt; } + +std::optional +SaiPortTraits::Attributes::AttributeShelEnable::operator()() { + return std::nullopt; +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/oss/SwitchApi.cpp b/fboss/agent/hw/sai/api/oss/SwitchApi.cpp index 7bbcd6bf8fe8f..25fee80c69cb3 100644 --- a/fboss/agent/hw/sai/api/oss/SwitchApi.cpp +++ b/fboss/agent/hw/sai/api/oss/SwitchApi.cpp @@ -124,6 +124,38 @@ SaiSwitchTraits::egressCoreBufferWatermarkBytes() { return stats; } +const std::vector& +SaiSwitchTraits::sramMinBufferWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::fdrFifoWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressNonFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& +SaiSwitchTraits::egressNonFabricCellUnpackError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressParityCellError() { + static const std::vector stats; + return stats; +} + void SwitchApi::registerSwitchEventCallback( SwitchSaiId /*id*/, void* /*switch_event_cb*/) const {} @@ -178,4 +210,68 @@ std::optional SaiSwitchTraits::Attributes:: return std::nullopt; } +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPortId::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxLocalSystemPortId::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPorts::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxVoqs::operator()() { + return std::nullopt; +} + +std::optional SaiSwitchTraits::Attributes:: + AttributeFabricCllfcTxCreditThWrapper::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeVoqDramBoundThWrapper::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeCondEntropyRehashPeriodUS::operator()() { + return std::nullopt; +} +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcIp::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelDstIp::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcMac::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelPeriodicInterval::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareCoreTouse::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareLogFile::operator()() { + return std::nullopt; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/oss/SystemPortApi.cpp b/fboss/agent/hw/sai/api/oss/SystemPortApi.cpp new file mode 100644 index 0000000000000..2da4f8868ac58 --- /dev/null +++ b/fboss/agent/hw/sai/api/oss/SystemPortApi.cpp @@ -0,0 +1,12 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/hw/sai/api/SystemPortApi.h" + +namespace facebook::fboss { + +std::optional +SaiSystemPortTraits::Attributes::AttributeShelPktDstEnable::operator()() { + return std::nullopt; +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/tajo/MirrorApi.cpp b/fboss/agent/hw/sai/api/tajo/MirrorApi.cpp index 923ba68da9566..4aa903629a470 100644 --- a/fboss/agent/hw/sai/api/tajo/MirrorApi.cpp +++ b/fboss/agent/hw/sai/api/tajo/MirrorApi.cpp @@ -9,4 +9,14 @@ SaiSflowMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { return std::nullopt; } +std::optional SaiEnhancedRemoteMirrorTraits::Attributes:: + AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + +std::optional +SaiLocalMirrorTraits::Attributes::AttributeTcBufferLimit::operator()() { + return std::nullopt; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/tajo/PortApi.cpp b/fboss/agent/hw/sai/api/tajo/PortApi.cpp index 28e50027cdc91..6fec0a3b9bea8 100644 --- a/fboss/agent/hw/sai/api/tajo/PortApi.cpp +++ b/fboss/agent/hw/sai/api/tajo/PortApi.cpp @@ -221,4 +221,8 @@ SaiPortTraits::Attributes::AttributeCondEntropyRehashSeed::operator()() { return std::nullopt; } +std::optional +SaiPortTraits::Attributes::AttributeShelEnable::operator()() { + return std::nullopt; +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/tajo/SwitchApi.cpp b/fboss/agent/hw/sai/api/tajo/SwitchApi.cpp index 7675d7812fcb5..7e9cdb1cd4d7d 100644 --- a/fboss/agent/hw/sai/api/tajo/SwitchApi.cpp +++ b/fboss/agent/hw/sai/api/tajo/SwitchApi.cpp @@ -146,6 +146,38 @@ SaiSwitchTraits::egressCoreBufferWatermarkBytes() { return stats; } +const std::vector& +SaiSwitchTraits::sramMinBufferWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::fdrFifoWatermarkBytes() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressNonFabricCellError() { + static const std::vector stats; + return stats; +} + +const std::vector& +SaiSwitchTraits::egressNonFabricCellUnpackError() { + static const std::vector stats; + return stats; +} + +const std::vector& SaiSwitchTraits::egressParityCellError() { + static const std::vector stats; + return stats; +} + void SwitchApi::registerSwitchEventCallback( SwitchSaiId /*id*/, void* /*switch_event_cb*/) const {} @@ -198,4 +230,70 @@ std::optional SaiSwitchTraits::Attributes:: AttributeSramFreePercentXonThWrapper::operator()() { return std::nullopt; } + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPortId::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxLocalSystemPortId::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxSystemPorts::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeMaxVoqs::operator()() { + return std::nullopt; +} + +std::optional SaiSwitchTraits::Attributes:: + AttributeFabricCllfcTxCreditThWrapper::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeVoqDramBoundThWrapper::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeCondEntropyRehashPeriodUS::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcIp::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelDstIp::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelSrcMac::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeShelPeriodicInterval::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareCoreTouse::operator()() { + return std::nullopt; +} + +std::optional +SaiSwitchTraits::Attributes::AttributeFirmwareLogFile::operator()() { + return std::nullopt; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/tajo/SystemPortApi.cpp b/fboss/agent/hw/sai/api/tajo/SystemPortApi.cpp new file mode 100644 index 0000000000000..2da4f8868ac58 --- /dev/null +++ b/fboss/agent/hw/sai/api/tajo/SystemPortApi.cpp @@ -0,0 +1,12 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/hw/sai/api/SystemPortApi.h" + +namespace facebook::fboss { + +std::optional +SaiSystemPortTraits::Attributes::AttributeShelPktDstEnable::operator()() { + return std::nullopt; +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/api/tests/AclApiTest.cpp b/fboss/agent/hw/sai/api/tests/AclApiTest.cpp index 3bdba78828921..cefa8fdb10b7d 100644 --- a/fboss/agent/hw/sai/api/tests/AclApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/AclApiTest.cpp @@ -21,6 +21,8 @@ using namespace facebook::fboss; class AclApiTest : public ::testing::Test { public: + using UdfGroupData = + std::pair, std::vector>; void SetUp() override { fs = FakeSai::getInstance(); sai_api_initialize(0, nullptr); @@ -247,6 +249,32 @@ class AclApiTest : public ::testing::Test { return std::make_pair(17, 0xFF); } + sai_object_id_t kUserDefinedFieldGroup0() const { + return 100; + } + + sai_object_id_t kUserDefinedFieldGroup1() const { + return 101; + } + + sai_object_id_t kUserDefinedFieldGroup2() const { + return 102; + } + + sai_object_id_t kUserDefinedFieldGroup3() const { + return 103; + } + + sai_object_id_t kUserDefinedFieldGroup4() const { + return 104; + } + + UdfGroupData kUDFGroupData() const { + std::vector data = {0x11, 0x22}; + std::vector mask = {0xFF, 0xFF}; + return std::make_pair(std::move(data), std::move(mask)); + } + sai_uint32_t kPacketAction() const { return SAI_PACKET_ACTION_DROP; } @@ -372,6 +400,11 @@ class AclApiTest : public ::testing::Test { true, // outer vlan id true, // bth opcode true, // ipv6 next header + kUserDefinedFieldGroup0(), // udf group 0 + kUserDefinedFieldGroup1(), // udf group 1 + kUserDefinedFieldGroup2(), // udf group 2 + kUserDefinedFieldGroup3(), // udf group 3 + kUserDefinedFieldGroup4(), // udf group 4 }, kSwitchID()); } @@ -456,6 +489,16 @@ class AclApiTest : public ::testing::Test { AclEntryFieldU8(kBthOpcode())}; SaiAclEntryTraits::Attributes::FieldIpv6NextHeader aclFieldIpv6NextHeaderAttribute{AclEntryFieldU8(kIpv6NextHeader())}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin0 + aclUserDefinedGroup0{AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin1 + aclUserDefinedGroup1{AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin2 + aclUserDefinedGroup2{AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin3 + aclUserDefinedGroup3{AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin4 + aclUserDefinedGroup4{AclEntryFieldU8List{kUDFGroupData()}}; SaiAclEntryTraits::Attributes::ActionPacketAction aclActionPacketAction{ AclEntryActionU32(kPacketAction())}; SaiAclEntryTraits::Attributes::ActionCounter aclActionCounter{ @@ -507,6 +550,11 @@ class AclApiTest : public ::testing::Test { aclFieldOuterVlanIdAttribute, aclFieldBthOpcodeAttribute, aclFieldIpv6NextHeaderAttribute, + aclUserDefinedGroup0, + aclUserDefinedGroup1, + aclUserDefinedGroup2, + aclUserDefinedGroup3, + aclUserDefinedGroup4, aclActionPacketAction, aclActionCounter, aclActionSetTC, @@ -639,6 +687,11 @@ class AclApiTest : public ::testing::Test { const std::pair& outerVlanId, const std::pair& bthOpcode, const std::pair& ipv6NextHeader, + const UdfGroupData& udfGroupData0, + const UdfGroupData& udfGroupData1, + const UdfGroupData& udfGroupData2, + const UdfGroupData& udfGroupData3, + const UdfGroupData& udfGroupData4, sai_uint32_t packetAction, sai_object_id_t counter, sai_uint8_t setTC, @@ -706,6 +759,16 @@ class AclApiTest : public ::testing::Test { aclEntryId, SaiAclEntryTraits::Attributes::FieldBthOpcode()); auto aclFieldIpv6NextHeaderGot = aclApi->getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::FieldIpv6NextHeader()); + auto aclUdfGroupData0Got = aclApi->getAttribute( + aclEntryId, SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin0()); + auto aclUdfGroupData1Got = aclApi->getAttribute( + aclEntryId, SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin1()); + auto aclUdfGroupData2Got = aclApi->getAttribute( + aclEntryId, SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin2()); + auto aclUdfGroupData3Got = aclApi->getAttribute( + aclEntryId, SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin3()); + auto aclUdfGroupData4Got = aclApi->getAttribute( + aclEntryId, SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin4()); auto aclActionPacketActionGot = aclApi->getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::ActionPacketAction()); @@ -757,6 +820,11 @@ class AclApiTest : public ::testing::Test { EXPECT_EQ(aclFieldOuterVlanIdGot.getDataAndMask(), outerVlanId); EXPECT_EQ(aclFieldBthOpcodeGot.getDataAndMask(), bthOpcode); EXPECT_EQ(aclFieldIpv6NextHeaderGot.getDataAndMask(), ipv6NextHeader); + EXPECT_EQ(aclUdfGroupData0Got.getDataAndMask(), udfGroupData0); + EXPECT_EQ(aclUdfGroupData1Got.getDataAndMask(), udfGroupData1); + EXPECT_EQ(aclUdfGroupData2Got.getDataAndMask(), udfGroupData2); + EXPECT_EQ(aclUdfGroupData3Got.getDataAndMask(), udfGroupData3); + EXPECT_EQ(aclUdfGroupData4Got.getDataAndMask(), udfGroupData4); EXPECT_EQ(aclActionPacketActionGot.getData(), packetAction); EXPECT_EQ(aclActionCounterGot.getData(), counter); @@ -913,6 +981,16 @@ TEST_F(AclApiTest, getAclTableAttribute) { aclTableId, SaiAclTableTraits::Attributes::FieldRouteDstUserMeta()); auto aclTableFieldNeighborDstUserMetaGot = aclApi->getAttribute( aclTableId, SaiAclTableTraits::Attributes::FieldNeighborDstUserMeta()); + auto aclTableUserDefinedFieldGroup0 = aclApi->getAttribute( + aclTableId, SaiAclTableTraits::Attributes::UserDefinedFieldGroupMin0()); + auto aclTableUserDefinedFieldGroup1 = aclApi->getAttribute( + aclTableId, SaiAclTableTraits::Attributes::UserDefinedFieldGroupMin1()); + auto aclTableUserDefinedFieldGroup2 = aclApi->getAttribute( + aclTableId, SaiAclTableTraits::Attributes::UserDefinedFieldGroupMin2()); + auto aclTableUserDefinedFieldGroup3 = aclApi->getAttribute( + aclTableId, SaiAclTableTraits::Attributes::UserDefinedFieldGroupMin3()); + auto aclTableUserDefinedFieldGroup4 = aclApi->getAttribute( + aclTableId, SaiAclTableTraits::Attributes::UserDefinedFieldGroupMin4()); EXPECT_EQ(aclTableStageGot, SAI_ACL_STAGE_INGRESS); EXPECT_EQ(aclTableBindPointTypeListGot.size(), 1); @@ -944,6 +1022,11 @@ TEST_F(AclApiTest, getAclTableAttribute) { EXPECT_EQ(aclTableFieldFdbDstUserMetaGot, true); EXPECT_EQ(aclTableFieldRouteDstUserMetaGot, true); EXPECT_EQ(aclTableFieldNeighborDstUserMetaGot, true); + EXPECT_EQ(aclTableUserDefinedFieldGroup0, kUserDefinedFieldGroup0()); + EXPECT_EQ(aclTableUserDefinedFieldGroup1, kUserDefinedFieldGroup1()); + EXPECT_EQ(aclTableUserDefinedFieldGroup2, kUserDefinedFieldGroup2()); + EXPECT_EQ(aclTableUserDefinedFieldGroup3, kUserDefinedFieldGroup3()); + EXPECT_EQ(aclTableUserDefinedFieldGroup4, kUserDefinedFieldGroup4()); } TEST_F(AclApiTest, getAclEntryAttribute) { @@ -982,6 +1065,11 @@ TEST_F(AclApiTest, getAclEntryAttribute) { kOuterVlanId(), kBthOpcode(), kIpv6NextHeader(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), kPacketAction(), kCounter(), kSetTC(), @@ -1168,6 +1256,16 @@ TEST_F(AclApiTest, setAclEntryAttribute) { AclEntryFieldU8(kBthOpcode())}; SaiAclEntryTraits::Attributes::FieldIpv6NextHeader aclFieldIpv6NextHeader{ AclEntryFieldU8(kIpv6NextHeader())}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin0 aclUserDefinedGroup0{ + AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin1 aclUserDefinedGroup1{ + AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin2 aclUserDefinedGroup2{ + AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin3 aclUserDefinedGroup3{ + AclEntryFieldU8List{kUDFGroupData()}}; + SaiAclEntryTraits::Attributes::UserDefinedFieldGroupMin4 aclUserDefinedGroup4{ + AclEntryFieldU8List{kUDFGroupData()}}; SaiAclEntryTraits::Attributes::ActionPacketAction aclActionPacketAction2{ AclEntryActionU32(kPacketAction2())}; @@ -1217,6 +1315,11 @@ TEST_F(AclApiTest, setAclEntryAttribute) { aclApi->setAttribute(aclEntryId, aclFieldOuterVlanId); aclApi->setAttribute(aclEntryId, aclFieldBthOpcode); aclApi->setAttribute(aclEntryId, aclFieldIpv6NextHeader); + aclApi->setAttribute(aclEntryId, aclUserDefinedGroup0); + aclApi->setAttribute(aclEntryId, aclUserDefinedGroup1); + aclApi->setAttribute(aclEntryId, aclUserDefinedGroup2); + aclApi->setAttribute(aclEntryId, aclUserDefinedGroup3); + aclApi->setAttribute(aclEntryId, aclUserDefinedGroup4); aclApi->setAttribute(aclEntryId, aclActionPacketAction2); aclApi->setAttribute(aclEntryId, aclActionCounter2); aclApi->setAttribute(aclEntryId, aclActionSetTC2); @@ -1256,6 +1359,11 @@ TEST_F(AclApiTest, setAclEntryAttribute) { kOuterVlanId(), kBthOpcode(), kIpv6NextHeader(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), + kUDFGroupData(), kPacketAction2(), kCounter2(), kSetTC2(), diff --git a/fboss/agent/hw/sai/api/tests/AddressUtilTest.cpp b/fboss/agent/hw/sai/api/tests/AddressUtilTest.cpp index 568cdece5d2a3..f4858ad061977 100644 --- a/fboss/agent/hw/sai/api/tests/AddressUtilTest.cpp +++ b/fboss/agent/hw/sai/api/tests/AddressUtilTest.cpp @@ -10,13 +10,9 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" #include -#include #include -#include -#include - using namespace facebook::fboss; static constexpr folly::StringPiece str4 = "42.42.12.34"; diff --git a/fboss/agent/hw/sai/api/tests/AttributeTest.cpp b/fboss/agent/hw/sai/api/tests/AttributeTest.cpp index 659a0a1db8b23..55dac8726295f 100644 --- a/fboss/agent/hw/sai/api/tests/AttributeTest.cpp +++ b/fboss/agent/hw/sai/api/tests/AttributeTest.cpp @@ -10,8 +10,6 @@ #include "fboss/agent/hw/sai/api/LoggingUtil.h" #include "fboss/agent/hw/sai/api/SaiAttribute.h" -#include - #include #include #include diff --git a/fboss/agent/hw/sai/api/tests/LagApiTest.cpp b/fboss/agent/hw/sai/api/tests/LagApiTest.cpp index e9a25b464a0e8..d6c0bd388baf7 100644 --- a/fboss/agent/hw/sai/api/tests/LagApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/LagApiTest.cpp @@ -1,7 +1,6 @@ // Copyright 2004-present Facebook. All Rights Reserved. #include "fboss/agent/hw/sai/api/LagApi.h" -#include "fboss/agent/hw/sai/api/PortApi.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include diff --git a/fboss/agent/hw/sai/api/tests/MirrorApiTest.cpp b/fboss/agent/hw/sai/api/tests/MirrorApiTest.cpp index 897fe37717fa3..9872f413daa25 100644 --- a/fboss/agent/hw/sai/api/tests/MirrorApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/MirrorApiTest.cpp @@ -38,7 +38,7 @@ class MirrorApiTest : public ::testing::Test { MirrorSaiId createLocalMirror(const sai_object_id_t portId) const { return mirrorApi->create( - {SAI_MIRROR_SESSION_TYPE_LOCAL, portId}, 0); + {SAI_MIRROR_SESSION_TYPE_LOCAL, portId, std::nullopt}, 0); } MirrorSaiId createEnhancedRemoteMirror( @@ -66,7 +66,8 @@ class MirrorApiTest : public ::testing::Test { ipHeaderVersion, ttl, truncateSize, - samplingRate}, + samplingRate, + std::nullopt}, 0); } diff --git a/fboss/agent/hw/sai/api/tests/NeighborApiTest.cpp b/fboss/agent/hw/sai/api/tests/NeighborApiTest.cpp index 0a70edfa7a63d..d24683d9d0d27 100644 --- a/fboss/agent/hw/sai/api/tests/NeighborApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/NeighborApiTest.cpp @@ -8,7 +8,6 @@ * */ #include "fboss/agent/hw/sai/api/NeighborApi.h" -#include "fboss/agent/hw/sai/api/MplsApi.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include diff --git a/fboss/agent/hw/sai/api/tests/PortApiTest.cpp b/fboss/agent/hw/sai/api/tests/PortApiTest.cpp index eea55e665d8f5..4ec8759845a03 100644 --- a/fboss/agent/hw/sai/api/tests/PortApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/PortApiTest.cpp @@ -82,6 +82,7 @@ class PortApiTest : public ::testing::Test { std::nullopt, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; return portApi->create(a, 0); } diff --git a/fboss/agent/hw/sai/api/tests/SystemPortApiTest.cpp b/fboss/agent/hw/sai/api/tests/SystemPortApiTest.cpp index bd84615c2265c..ce3f17f377123 100644 --- a/fboss/agent/hw/sai/api/tests/SystemPortApiTest.cpp +++ b/fboss/agent/hw/sai/api/tests/SystemPortApiTest.cpp @@ -41,7 +41,7 @@ class SystemPortApiTest : public ::testing::Test { SaiSystemPortTraits::Attributes::ConfigInfo confInfo{config}; SaiSystemPortTraits::Attributes::AdminState admin{enabled}; SaiSystemPortTraits::CreateAttributes sysPort{ - confInfo, admin, std::nullopt}; + confInfo, admin, std::nullopt, std::nullopt}; auto saiId = systemPortApi->create(sysPort, 0); return saiId; } diff --git a/fboss/agent/hw/sai/benchmarks/BUCK b/fboss/agent/hw/sai/benchmarks/BUCK index 05b0fe97fa3e4..d0b31cd12fa17 100644 --- a/fboss/agent/hw/sai/benchmarks/BUCK +++ b/fboss/agent/hw/sai/benchmarks/BUCK @@ -29,6 +29,7 @@ sai_mono_agent_benchmark( "//fboss/agent/hw/benchmarks:hw_init_and_exit_voq", "//fboss/agent/hw/benchmarks:hw_rib_resolution_speed", "//fboss/agent/hw/benchmarks:hw_rib_sync_fib_speed", + "//fboss/agent/hw/benchmarks:hw_rx_slow_path_arp_rate", "//fboss/agent/hw/benchmarks:hw_rx_slow_path_rate", "//fboss/agent/hw/benchmarks:hw_stats_collection_speed", "//fboss/agent/hw/benchmarks:hw_switch_reachability_change_speed", diff --git a/fboss/agent/hw/sai/diag/DiagShell.cpp b/fboss/agent/hw/sai/diag/DiagShell.cpp index e4ed57eb74dc1..89146d3852288 100644 --- a/fboss/agent/hw/sai/diag/DiagShell.cpp +++ b/fboss/agent/hw/sai/diag/DiagShell.cpp @@ -22,7 +22,6 @@ #include #include -#include #include #include diff --git a/fboss/agent/hw/sai/diag/DiagShellClient.cpp b/fboss/agent/hw/sai/diag/DiagShellClient.cpp index ff4443e972b89..76e6f9ba3f886 100644 --- a/fboss/agent/hw/sai/diag/DiagShellClient.cpp +++ b/fboss/agent/hw/sai/diag/DiagShellClient.cpp @@ -16,11 +16,9 @@ #include #include #include -#include #include #include #include -#include #include "fboss/agent/hw/sai/diag/DiagShellClient.h" #include diff --git a/fboss/agent/hw/sai/fake/FakeSai.cpp b/fboss/agent/hw/sai/fake/FakeSai.cpp index 1888dfd83661e..11652a6eb953d 100644 --- a/fboss/agent/hw/sai/fake/FakeSai.cpp +++ b/fboss/agent/hw/sai/fake/FakeSai.cpp @@ -12,8 +12,6 @@ #include #include -#include - namespace { struct singleton_tag_type {}; } // namespace diff --git a/fboss/agent/hw/sai/fake/FakeSaiAcl.cpp b/fboss/agent/hw/sai/fake/FakeSaiAcl.cpp index 4466766ab1238..c7ebaf0b4c2a3 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiAcl.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiAcl.cpp @@ -837,6 +837,24 @@ sai_status_t set_acl_entry_attribute_fn( return res; } +sai_status_t acl_entry_copy_attr_to_u8list( + std::vector& data, + std::vector& mask, + sai_acl_field_data_t* aclfield) { + if (aclfield->data.u8list.count < data.size() || + aclfield->mask.u8list.count < mask.size()) { + aclfield->data.u8list.count = data.size(); + aclfield->mask.u8list.count = mask.size(); + return SAI_STATUS_BUFFER_OVERFLOW; + } + aclfield->enable = true; + aclfield->data.u8list.count = data.size(); + aclfield->mask.u8list.count = mask.size(); + aclfield->data.u8list.list = data.data(); + aclfield->mask.u8list.list = mask.data(); + return SAI_STATUS_SUCCESS; +} + sai_status_t get_acl_entry_attribute_fn( sai_object_id_t acl_entry_id, uint32_t attr_count, @@ -1011,65 +1029,30 @@ sai_status_t get_acl_entry_attribute_fn( attr_list[i].value.aclfield.mask.u8 = aclEntry.fieldIpv6NextHeaderMask; break; case SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN: - attr_list[i].value.aclfield.enable = - aclEntry.userDefinedFieldGroupMinEnable; - attr_list[i].value.aclfield.data.u8list.count = - aclEntry.userDefinedFieldGroupMinData.size(); - attr_list[i].value.aclfield.mask.u8list.count = - aclEntry.userDefinedFieldGroupMinMask.size(); - attr_list[i].value.aclfield.data.u8list.list = - aclEntry.userDefinedFieldGroupMinData.data(); - attr_list[i].value.aclfield.mask.u8list.list = - aclEntry.userDefinedFieldGroupMinMask.data(); - break; + return acl_entry_copy_attr_to_u8list( + aclEntry.userDefinedFieldGroupMinData, + aclEntry.userDefinedFieldGroupMinMask, + &attr_list[i].value.aclfield); case (SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 1): - attr_list[i].value.aclfield.enable = - aclEntry.userDefinedFieldGroupMin1Enable; - attr_list[i].value.aclfield.data.u8list.count = - aclEntry.userDefinedFieldGroupMin1Data.size(); - attr_list[i].value.aclfield.mask.u8list.count = - aclEntry.userDefinedFieldGroupMin1Mask.size(); - attr_list[i].value.aclfield.data.u8list.list = - aclEntry.userDefinedFieldGroupMin1Data.data(); - attr_list[i].value.aclfield.mask.u8list.list = - aclEntry.userDefinedFieldGroupMin1Mask.data(); - break; + return acl_entry_copy_attr_to_u8list( + aclEntry.userDefinedFieldGroupMin1Data, + aclEntry.userDefinedFieldGroupMin1Mask, + &attr_list[i].value.aclfield); case (SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 2): - attr_list[i].value.aclfield.enable = - aclEntry.userDefinedFieldGroupMin2Enable; - attr_list[i].value.aclfield.data.u8list.count = - aclEntry.userDefinedFieldGroupMin2Data.size(); - attr_list[i].value.aclfield.mask.u8list.count = - aclEntry.userDefinedFieldGroupMin2Mask.size(); - attr_list[i].value.aclfield.data.u8list.list = - aclEntry.userDefinedFieldGroupMin2Data.data(); - attr_list[i].value.aclfield.mask.u8list.list = - aclEntry.userDefinedFieldGroupMin2Mask.data(); - break; + return acl_entry_copy_attr_to_u8list( + aclEntry.userDefinedFieldGroupMin2Data, + aclEntry.userDefinedFieldGroupMin2Mask, + &attr_list[i].value.aclfield); case (SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 3): - attr_list[i].value.aclfield.enable = - aclEntry.userDefinedFieldGroupMin3Enable; - attr_list[i].value.aclfield.data.u8list.count = - aclEntry.userDefinedFieldGroupMin3Data.size(); - attr_list[i].value.aclfield.mask.u8list.count = - aclEntry.userDefinedFieldGroupMin3Mask.size(); - attr_list[i].value.aclfield.data.u8list.list = - aclEntry.userDefinedFieldGroupMin3Data.data(); - attr_list[i].value.aclfield.mask.u8list.list = - aclEntry.userDefinedFieldGroupMin3Mask.data(); - break; + return acl_entry_copy_attr_to_u8list( + aclEntry.userDefinedFieldGroupMin3Data, + aclEntry.userDefinedFieldGroupMin3Mask, + &attr_list[i].value.aclfield); case (SAI_ACL_ENTRY_ATTR_USER_DEFINED_FIELD_GROUP_MIN + 4): - attr_list[i].value.aclfield.enable = - aclEntry.userDefinedFieldGroupMin4Enable; - attr_list[i].value.aclfield.data.u8list.count = - aclEntry.userDefinedFieldGroupMin4Data.size(); - attr_list[i].value.aclfield.mask.u8list.count = - aclEntry.userDefinedFieldGroupMin4Mask.size(); - attr_list[i].value.aclfield.data.u8list.list = - aclEntry.userDefinedFieldGroupMin4Data.data(); - attr_list[i].value.aclfield.mask.u8list.list = - aclEntry.userDefinedFieldGroupMin4Mask.data(); - break; + return acl_entry_copy_attr_to_u8list( + aclEntry.userDefinedFieldGroupMin4Data, + aclEntry.userDefinedFieldGroupMin4Mask, + &attr_list[i].value.aclfield); case SAI_ACL_ENTRY_ATTR_ACTION_PACKET_ACTION: attr_list[i].value.aclaction.enable = aclEntry.actionPacketActionEnable; diff --git a/fboss/agent/hw/sai/fake/FakeSaiBridge.cpp b/fboss/agent/hw/sai/fake/FakeSaiBridge.cpp index e0227de485639..7f4aeadbde445 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiBridge.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiBridge.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiBridge.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeSai; diff --git a/fboss/agent/hw/sai/fake/FakeSaiBuffer.cpp b/fboss/agent/hw/sai/fake/FakeSaiBuffer.cpp index fc5b42687b95b..b67913f9b15da 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiBuffer.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiBuffer.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiBuffer.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeQueue; diff --git a/fboss/agent/hw/sai/fake/FakeSaiFdb.cpp b/fboss/agent/hw/sai/fake/FakeSaiFdb.cpp index 92f86853e5455..d46d022c34ddb 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiFdb.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiFdb.cpp @@ -12,9 +12,6 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include -#include - using facebook::fboss::FakeFdb; using facebook::fboss::FakeSai; diff --git a/fboss/agent/hw/sai/fake/FakeSaiHostif.cpp b/fboss/agent/hw/sai/fake/FakeSaiHostif.cpp index c9b52bcb00e40..c3686fe0bd4f2 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiHostif.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiHostif.cpp @@ -8,7 +8,6 @@ * */ #include "fboss/agent/hw/sai/fake/FakeSaiHostif.h" -#include "fboss/agent/hw/sai/api/SaiVersion.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include diff --git a/fboss/agent/hw/sai/fake/FakeSaiMirror.cpp b/fboss/agent/hw/sai/fake/FakeSaiMirror.cpp index c7ba80fc55f37..74e3c4edbb0b0 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiMirror.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiMirror.cpp @@ -8,11 +8,9 @@ * */ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include "fboss/agent/hw/sai/api/SaiVersion.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include "fboss/agent/hw/sai/fake/FakeSaiPort.h" -#include #include using facebook::fboss::FakePort; diff --git a/fboss/agent/hw/sai/fake/FakeSaiNeighbor.cpp b/fboss/agent/hw/sai/fake/FakeSaiNeighbor.cpp index 32fa5cfb394b2..7122c079e9ecd 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiNeighbor.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiNeighbor.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include #include using facebook::fboss::FakeNeighbor; diff --git a/fboss/agent/hw/sai/fake/FakeSaiNextHop.cpp b/fboss/agent/hw/sai/fake/FakeSaiNextHop.cpp index e81f9f2b4b55f..7ccfb8a53ba31 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiNextHop.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiNextHop.cpp @@ -8,11 +8,9 @@ * */ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include "fboss/agent/hw/sai/api/SaiVersion.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include "fboss/agent/hw/sai/fake/FakeSaiPort.h" -#include #include using facebook::fboss::FakePort; diff --git a/fboss/agent/hw/sai/fake/FakeSaiObject.cpp b/fboss/agent/hw/sai/fake/FakeSaiObject.cpp index d2b7c8573243d..00636dc24b2cb 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiObject.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiObject.cpp @@ -9,11 +9,8 @@ */ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include "fboss/agent/hw/sai/api/SaiVersion.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include - sai_status_t sai_get_object_count( sai_object_id_t /* switch_id */, sai_object_type_t object_type, diff --git a/fboss/agent/hw/sai/fake/FakeSaiQosMap.cpp b/fboss/agent/hw/sai/fake/FakeSaiQosMap.cpp index 23c5b964aa7f5..0fe3893270fb1 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiQosMap.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiQosMap.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiQosMap.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeQosMap; diff --git a/fboss/agent/hw/sai/fake/FakeSaiQueue.cpp b/fboss/agent/hw/sai/fake/FakeSaiQueue.cpp index 51324cc319c0a..3546183a1401e 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiQueue.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiQueue.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiQueue.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeQueue; diff --git a/fboss/agent/hw/sai/fake/FakeSaiRoute.cpp b/fboss/agent/hw/sai/fake/FakeSaiRoute.cpp index e737a4d9692c6..8aed86fcc0a4c 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiRoute.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiRoute.cpp @@ -12,8 +12,6 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include - using facebook::fboss::FakeRoute; using facebook::fboss::FakeSai; diff --git a/fboss/agent/hw/sai/fake/FakeSaiRouterInterface.cpp b/fboss/agent/hw/sai/fake/FakeSaiRouterInterface.cpp index e0e1712fa6534..759f478478a78 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiRouterInterface.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiRouterInterface.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiRouterInterface.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeRouterInterface; diff --git a/fboss/agent/hw/sai/fake/FakeSaiSamplePacket.cpp b/fboss/agent/hw/sai/fake/FakeSaiSamplePacket.cpp index 44434b1405d20..65a800bb0ae45 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiSamplePacket.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiSamplePacket.cpp @@ -8,11 +8,9 @@ * */ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include "fboss/agent/hw/sai/api/SaiVersion.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" #include "fboss/agent/hw/sai/fake/FakeSaiPort.h" -#include #include using facebook::fboss::FakePort; diff --git a/fboss/agent/hw/sai/fake/FakeSaiScheduler.cpp b/fboss/agent/hw/sai/fake/FakeSaiScheduler.cpp index 96982f62a2862..34a10f42e6fa9 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiScheduler.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiScheduler.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiScheduler.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeSai; diff --git a/fboss/agent/hw/sai/fake/FakeSaiSwitch.cpp b/fboss/agent/hw/sai/fake/FakeSaiSwitch.cpp index 6a228e0baa651..55b68b7921c3e 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiSwitch.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiSwitch.cpp @@ -276,6 +276,9 @@ sai_status_t set_switch_attribute_fn( sw.setPfcDlrPacketAction( static_cast(attr->value.s32)); break; + case SAI_SWITCH_ATTR_TAM_OBJECT_ID: + sw.setTamObjectId(attr->value.oid); + break; default: res = SAI_STATUS_INVALID_PARAMETER; break; @@ -531,6 +534,9 @@ sai_status_t get_switch_attribute_fn( case SAI_SWITCH_ATTR_PFC_DLR_PACKET_ACTION: attr[i].value.s32 = sw.getPfcDlrPacketAction(); break; + case SAI_SWITCH_ATTR_TAM_OBJECT_ID: + attr[i].value.oid = sw.getTamObjectId(); + break; default: return SAI_STATUS_INVALID_PARAMETER; } diff --git a/fboss/agent/hw/sai/fake/FakeSaiSwitch.h b/fboss/agent/hw/sai/fake/FakeSaiSwitch.h index 37378d3da5976..e10651586a790 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiSwitch.h +++ b/fboss/agent/hw/sai/fake/FakeSaiSwitch.h @@ -282,6 +282,14 @@ class FakeSwitch { return pfcDlrPacketAction_; } + void setTamObjectId(sai_object_id_t objectId) { + tamObjectId_ = objectId; + } + + sai_object_id_t getTamObjectId() const { + return tamObjectId_; + } + sai_object_id_t id; sai_status_t setLed(const sai_attribute_t* attr); @@ -334,6 +342,7 @@ class FakeSwitch { bool creditWatchDogEnable_{true}; uint32_t creditWatchDogMs_{500}; sai_packet_action_t pfcDlrPacketAction_{SAI_PACKET_ACTION_DROP}; + sai_object_id_t tamObjectId_{SAI_NULL_OBJECT_ID}; }; using FakeSwitchManager = FakeManager; diff --git a/fboss/agent/hw/sai/fake/FakeSaiSystemPort.cpp b/fboss/agent/hw/sai/fake/FakeSaiSystemPort.cpp index b0fd5f4ba8497..f551b33c0d664 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiSystemPort.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiSystemPort.cpp @@ -12,9 +12,6 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include -#include - using facebook::fboss::FakeSai; using facebook::fboss::FakeSystemPort; diff --git a/fboss/agent/hw/sai/fake/FakeSaiVirtualRouter.cpp b/fboss/agent/hw/sai/fake/FakeSaiVirtualRouter.cpp index c18cd5ce851d0..6df1c3ef27d28 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiVirtualRouter.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiVirtualRouter.cpp @@ -12,8 +12,6 @@ #include "fboss/agent/hw/sai/api/AddressUtil.h" -#include - using facebook::fboss::FakeSai; using facebook::fboss::FakeVirtualRouter; diff --git a/fboss/agent/hw/sai/fake/FakeSaiVlan.cpp b/fboss/agent/hw/sai/fake/FakeSaiVlan.cpp index 5dbff55c2faec..3e00368675e6e 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiVlan.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiVlan.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiVlan.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include #include using facebook::fboss::FakeSai; diff --git a/fboss/agent/hw/sai/fake/FakeSaiWred.cpp b/fboss/agent/hw/sai/fake/FakeSaiWred.cpp index 1938837d8dafb..0248064d406f1 100644 --- a/fboss/agent/hw/sai/fake/FakeSaiWred.cpp +++ b/fboss/agent/hw/sai/fake/FakeSaiWred.cpp @@ -10,8 +10,6 @@ #include "fboss/agent/hw/sai/fake/FakeSaiWred.h" #include "fboss/agent/hw/sai/fake/FakeSai.h" -#include - using facebook::fboss::FakeSai; sai_status_t set_wred_attribute_fn( diff --git a/fboss/agent/hw/sai/hw_test/HwTestAclUtils.cpp b/fboss/agent/hw/sai/hw_test/HwTestAclUtils.cpp index 72db67b8de271..3c50d4740393e 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestAclUtils.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestAclUtils.cpp @@ -31,7 +31,9 @@ std::string getActualAclTableName( // single acl table. Now support multiple tables so can accept table name. If // table name not provided we are still using single table, so continue using // kAclTable1. - return aclTableName.has_value() ? aclTableName.value() : kAclTable1; + return aclTableName.has_value() + ? aclTableName.value() + : cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); } std::shared_ptr getSwAcl( diff --git a/fboss/agent/hw/sai/hw_test/HwTestAclUtilsThriftHandler.cpp b/fboss/agent/hw/sai/hw_test/HwTestAclUtilsThriftHandler.cpp index 216d101e11331..bae4ae844f754 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestAclUtilsThriftHandler.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestAclUtilsThriftHandler.cpp @@ -5,6 +5,7 @@ #include "fboss/agent/hw/sai/switch/SaiAclTableManager.h" #include "fboss/agent/hw/sai/switch/SaiSwitch.h" +#include "fboss/agent/gen-cpp2/switch_config_constants.h" #include "fboss/agent/test/utils/AclTestUtils.h" namespace { @@ -14,8 +15,10 @@ std::string getActualAclTableName( // single acl table. Now support multiple tables so can accept table name. If // table name not provided we are still using single table, so continue using // kAclTable1. - return aclTableName.has_value() ? aclTableName.value() - : facebook::fboss::kAclTable1; + return aclTableName.has_value() + ? aclTableName.value() + : facebook::fboss::cfg::switch_config_constants:: + DEFAULT_INGRESS_ACL_TABLE(); } } // namespace @@ -39,8 +42,8 @@ int32_t HwTestThriftHandler::getAclTableNumAclEntries( } bool HwTestThriftHandler::isDefaultAclTableEnabled() { - return isAclTableEnabled( - std::make_unique(facebook::fboss::kAclTable1)); + return isAclTableEnabled(std::make_unique( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE())); } bool HwTestThriftHandler::isAclTableEnabled(std::unique_ptr name) { @@ -85,7 +88,8 @@ bool HwTestThriftHandler::isStatProgrammedInDefaultAclTable( std::move(aclEntryNames), std::move(counterName), std::move(types), - std::make_unique(facebook::fboss::kAclTable1)); + std::make_unique( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE())); } bool HwTestThriftHandler::isStatProgrammedInAclTable( diff --git a/fboss/agent/hw/sai/hw_test/HwTestCoppUtils.cpp b/fboss/agent/hw/sai/hw_test/HwTestCoppUtils.cpp index a2f57fcc3c1ff..d30cdf043a5c4 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestCoppUtils.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestCoppUtils.cpp @@ -12,10 +12,6 @@ #include "fboss/agent/hw/sai/switch/SaiHostifManager.h" #include "fboss/agent/hw/sai/switch/SaiManagerTable.h" #include "fboss/agent/hw/sai/switch/SaiSwitch.h" -#include "fboss/agent/hw/switch_asics/HwAsic.h" - -#include "fboss/agent/SwitchStats.h" -#include "fboss/agent/state/ControlPlane.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/sai/hw_test/HwTestEcmpUtilsThriftHandler.cpp b/fboss/agent/hw/sai/hw_test/HwTestEcmpUtilsThriftHandler.cpp index 51ce6b6101ea4..c846d08547c11 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestEcmpUtilsThriftHandler.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestEcmpUtilsThriftHandler.cpp @@ -19,6 +19,26 @@ int HwTestThriftHandler::getHwEcmpSize( return getEcmpMembersInHw(hwSwitch_, ecmpPrefix, rid, sizeInSw).size(); } +void HwTestThriftHandler::getEcmpWeights( + std::map<::std::int32_t, ::std::int32_t>& weights, + std::unique_ptr prefix, + int routerID) { + folly::CIDRNetwork ecmpPrefix = std::make_pair( + folly::IPAddress(prefix->IPAddress_ref().value()), + prefix->mask_ref().value()); + facebook::fboss::RouterID rid = + static_cast(routerID); + auto members = + getEcmpMembersInHw(hwSwitch_, ecmpPrefix, rid, FLAGS_ecmp_width); + int index = 0; + for (auto member : members) { + weights.insert( + std::make_pair(index, getEcmpMemberWeight(hwSwitch_, members, member))); + index++; + } + return; +} + } // namespace utility } // namespace fboss } // namespace facebook diff --git a/fboss/agent/hw/sai/hw_test/HwTestFlowletSwitchingUtils.cpp b/fboss/agent/hw/sai/hw_test/HwTestFlowletSwitchingUtils.cpp index 604988695c31e..b03a03d6021ba 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestFlowletSwitchingUtils.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestFlowletSwitchingUtils.cpp @@ -9,7 +9,17 @@ */ #include "fboss/agent/hw/test/HwTestFlowletSwitchingUtils.h" + #include +#include "fboss/agent/hw/sai/api/SaiApiTable.h" +#include "fboss/agent/hw/sai/switch/SaiArsManager.h" +#include "fboss/agent/hw/sai/switch/SaiArsProfileManager.h" +#include "fboss/agent/hw/sai/switch/SaiNextHopGroupManager.h" +#include "fboss/agent/hw/sai/switch/SaiPortManager.h" +#include "fboss/agent/hw/sai/switch/SaiRouteManager.h" +#include "fboss/agent/hw/sai/switch/SaiSwitch.h" +#include "fboss/agent/hw/sai/switch/SaiSwitchManager.h" +#include "fboss/agent/hw/sai/switch/SaiVirtualRouterManager.h" namespace facebook::fboss { class TestEnsembleIf; @@ -17,68 +27,214 @@ class TestEnsembleIf; namespace facebook::fboss::utility { +void verifyArsProfile( + ArsProfileSaiId arsProfileSaiId, + const cfg::FlowletSwitchingConfig& flowletCfg) { + ArsProfileSaiId nullArsProfileSaiId{SAI_NULL_OBJECT_ID}; + EXPECT_NE(arsProfileSaiId, nullArsProfileSaiId); + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto& arsProfileApi = SaiApiTable::getInstance()->arsProfileApi(); + + auto samplingInterval = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::SamplingInterval()); + EXPECT_EQ(*flowletCfg.dynamicSampleRate(), samplingInterval); + auto randomSeed = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::RandomSeed()); + EXPECT_EQ(SaiArsProfileManager::kArsRandomSeed, randomSeed); + auto portLoadPastWeight = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::PortLoadPastWeight()); + EXPECT_EQ(*flowletCfg.dynamicEgressLoadExponent(), portLoadPastWeight); + auto loadPastMinVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadPastMinVal()); + EXPECT_EQ(*flowletCfg.dynamicEgressMinThresholdBytes(), loadPastMinVal); + auto loadPastMaxVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadPastMaxVal()); + EXPECT_EQ(*flowletCfg.dynamicEgressMaxThresholdBytes(), loadPastMaxVal); + auto portLoadFutureWeight = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::PortLoadFutureWeight()); + EXPECT_EQ(*flowletCfg.dynamicQueueExponent(), portLoadFutureWeight); + auto loadFutureMinVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadFutureMinVal()); + EXPECT_EQ(*flowletCfg.dynamicQueueMinThresholdBytes(), loadFutureMinVal); + auto loadFutureMaxVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadFutureMaxVal()); + EXPECT_EQ(*flowletCfg.dynamicQueueMaxThresholdBytes(), loadFutureMaxVal); + auto portLoadExponent = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::PortLoadExponent()); + EXPECT_EQ(*flowletCfg.dynamicPhysicalQueueExponent(), portLoadExponent); + auto loadCurrentMinVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadCurrentMinVal()); + EXPECT_EQ( + *flowletCfg.dynamicQueueMinThresholdBytes() >> 1, loadCurrentMinVal); + auto loadCurrentMaxVal = arsProfileApi.getAttribute( + arsProfileSaiId, SaiArsProfileTraits::Attributes::LoadCurrentMaxVal()); + EXPECT_EQ( + *flowletCfg.dynamicQueueMaxThresholdBytes() >> 1, loadCurrentMaxVal); +#endif +} + +void verifyArs( + const HwSwitch* hw, + ArsSaiId arsSaiId, + const cfg::FlowletSwitchingConfig& cfg) { + ArsSaiId nullArsSaiId{SAI_NULL_OBJECT_ID}; + EXPECT_NE(arsSaiId, nullArsSaiId); + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto& arsApi = SaiApiTable::getInstance()->arsApi(); + const auto saiSwitch = static_cast(hw); + + auto mode = arsApi.getAttribute(arsSaiId, SaiArsTraits::Attributes::Mode()); + auto switchingMode = + saiSwitch->managerTable()->arsManager().cfgSwitchingModeToSai( + *cfg.switchingMode()); + EXPECT_EQ(switchingMode, mode); + auto idleTime = + arsApi.getAttribute(arsSaiId, SaiArsTraits::Attributes::IdleTime()); + EXPECT_EQ(*cfg.inactivityIntervalUsecs(), idleTime); + auto maxFlows = + arsApi.getAttribute(arsSaiId, SaiArsTraits::Attributes::MaxFlows()); + EXPECT_EQ(*cfg.flowletTableSize(), maxFlows); +#endif +} + +void verifyPortArsAttributes( + PortSaiId portSaiId, + const cfg::PortFlowletConfig& cfg, + bool enable) { + auto& portApi = SaiApiTable::getInstance()->portApi(); + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto arsEnable = + portApi.getAttribute(portSaiId, SaiPortTraits::Attributes::ArsEnable()); + EXPECT_EQ(enable, arsEnable); + auto portLoadScalingFactor = portApi.getAttribute( + portSaiId, SaiPortTraits::Attributes::ArsPortLoadScalingFactor()); + EXPECT_EQ(*cfg.scalingFactor(), portLoadScalingFactor); + auto portLoadPastWeight = portApi.getAttribute( + portSaiId, SaiPortTraits::Attributes::ArsPortLoadPastWeight()); + EXPECT_EQ(*cfg.loadWeight(), portLoadPastWeight); + auto portLoadFutureWeight = portApi.getAttribute( + portSaiId, SaiPortTraits::Attributes::ArsPortLoadFutureWeight()); + EXPECT_EQ(*cfg.queueWeight(), portLoadFutureWeight); +#endif +} + bool validateFlowletSwitchingEnabled( - const HwSwitch* /* unused */, - const cfg::FlowletSwitchingConfig& /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. - EXPECT_TRUE(false); - return false; + const HwSwitch* hw, + const cfg::FlowletSwitchingConfig& flowletCfg) { + const auto saiSwitch = static_cast(hw); + SwitchSaiId switchId = + saiSwitch->managerTable()->switchManager().getSwitchSaiId(); + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto arsProfileId = SaiApiTable::getInstance()->switchApi().getAttribute( + switchId, SaiSwitchTraits::Attributes::ArsProfile()); + + verifyArsProfile(static_cast(arsProfileId), flowletCfg); +#endif + return true; +} + +NextHopGroupSaiId getNextHopGroupSaiId( + const SaiSwitch* saiSwitch, + const folly::CIDRNetwork& ip) { + const auto* managerTable = saiSwitch->managerTable(); + const auto* vrHandle = + managerTable->virtualRouterManager().getVirtualRouterHandle(RouterID(0)); + auto routeEntry = SaiRouteTraits::RouteEntry{ + saiSwitch->getSaiSwitchId(), vrHandle->virtualRouter->adapterKey(), ip}; + const auto* routeHandle = + managerTable->routeManager().getRouteHandle(routeEntry); + return static_cast( + routeHandle->nextHopGroupHandle()->adapterKey()); } bool verifyEcmpForFlowletSwitching( - const HwSwitch* /* unused */, - const folly::CIDRNetwork& /* unused */, - const cfg::FlowletSwitchingConfig& /* unused */, - const cfg::PortFlowletConfig& /* unused */, - bool /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. - EXPECT_TRUE(false); - return false; + const HwSwitch* hw, + const folly::CIDRNetwork& ip, + const cfg::FlowletSwitchingConfig& flowletCfg, + const cfg::PortFlowletConfig& cfg, + const bool flowletEnable) { + const auto saiSwitch = static_cast(hw); + auto nextHopGroupSaiId = getNextHopGroupSaiId(saiSwitch, ip); + bool isVerified = true; + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto arsId = SaiApiTable::getInstance()->nextHopGroupApi().getAttribute( + nextHopGroupSaiId, SaiNextHopGroupTraits::Attributes::ArsObjectId()); + + if (flowletEnable) { + isVerified = (arsId != SAI_NULL_OBJECT_ID); + if (isVerified) { + verifyArs(hw, static_cast(arsId), flowletCfg); + } + } else { + isVerified = (arsId == SAI_NULL_OBJECT_ID); + } +#endif + + return isVerified; } bool verifyEcmpForNonFlowlet( - const HwSwitch* /* unused */, - const folly::CIDRNetwork& /* unused */, - const bool /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. - EXPECT_TRUE(false); - return false; + const HwSwitch* hw, + const folly::CIDRNetwork& ip, + const bool flowletEnable) { + const auto saiSwitch = static_cast(hw); + auto nextHopGroupSaiId = getNextHopGroupSaiId(saiSwitch, ip); + bool isVerified = true; + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto arsId = SaiApiTable::getInstance()->nextHopGroupApi().getAttribute( + nextHopGroupSaiId, SaiNextHopGroupTraits::Attributes::ArsObjectId()); + + if (flowletEnable) { + isVerified = (arsId != SAI_NULL_OBJECT_ID); + } else { + isVerified = (arsId == SAI_NULL_OBJECT_ID); + } +#endif + return isVerified; } bool validatePortFlowletQuality( - const HwSwitch* /* unused */, - const PortID& /* unused */, - const cfg::PortFlowletConfig& /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. - return false; + const HwSwitch* hw, + const PortID& portId, + const cfg::PortFlowletConfig& cfg, + bool enable) { + const auto& portManager = + static_cast(hw)->managerTable()->portManager(); + auto portHandle = portManager.getPortHandle(portId); + auto saiPortId = portHandle->port->adapterKey(); + + verifyPortArsAttributes(static_cast(saiPortId), cfg, enable); + return true; } -bool validateFlowletSwitchingDisabled(const HwSwitch* /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. +bool validateFlowletSwitchingDisabled(const HwSwitch* hw) { + const auto saiSwitch = static_cast(hw); + SwitchSaiId switchId = + saiSwitch->managerTable()->switchManager().getSwitchSaiId(); + +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + auto arsProfileId = SaiApiTable::getInstance()->switchApi().getAttribute( + switchId, SaiSwitchTraits::Attributes::ArsProfile()); + + return arsProfileId == SAI_NULL_OBJECT_ID; +#else return false; +#endif } void setEcmpMemberStatus(const TestEnsembleIf* /* unused */) { - // This function is not implemented yet. - // If the test is running on SAI Switches, - // it should throw an error. - EXPECT_TRUE(false); + // not applicable to SAI } bool validateFlowSetTable( const HwSwitch* /*unit*/, const bool /*expectFlowsetSizeZero*/) { - EXPECT_TRUE(false); return false; } diff --git a/fboss/agent/hw/sai/hw_test/HwTestPacketTrapEntry.cpp b/fboss/agent/hw/sai/hw_test/HwTestPacketTrapEntry.cpp index 8e4ac48620aea..04e99837f3f54 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestPacketTrapEntry.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestPacketTrapEntry.cpp @@ -81,8 +81,8 @@ HwTestPacketTrapEntry::HwTestPacketTrapEntry( const uint16_t l4DstPort) : hwSwitch_(hwSwitch) { auto saiSwitch = static_cast(hwSwitch_); - int priority = - saiSwitch->managerTable()->aclTableManager().aclEntryCount(kAclTable1); + int priority = saiSwitch->managerTable()->aclTableManager().aclEntryCount( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto aclEntry = std::make_shared( priority, std::string("AclEntry" + folly::to(priority))); @@ -92,7 +92,7 @@ HwTestPacketTrapEntry::HwTestPacketTrapEntry( aclEntry->setAclAction(matchAction); saiSwitch->managerTable()->aclTableManager().addAclEntry( - aclEntry, kAclTable1); + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); aclEntries_.push_back(aclEntry); } @@ -101,11 +101,12 @@ HwTestPacketTrapEntry::HwTestPacketTrapEntry( const std::set& ports) : hwSwitch_(hwSwitch) { auto saiSwitch = static_cast(hwSwitch_); - int priority = getNextFreePriority(saiSwitch, kAclTable1); + int priority = getNextFreePriority( + saiSwitch, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); for (auto port : ports) { auto aclEntry = getTrapAclEntry(true, port, std::nullopt, priority++); saiSwitch->managerTable()->aclTableManager().addAclEntry( - aclEntry, kAclTable1); + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); aclEntries_.push_back(aclEntry); } } @@ -115,11 +116,12 @@ HwTestPacketTrapEntry::HwTestPacketTrapEntry( const std::set& dstPrefixes) : hwSwitch_(hwSwitch) { auto saiSwitch = static_cast(hwSwitch_); - int priority = getNextFreePriority(saiSwitch, kAclTable1); + int priority = getNextFreePriority( + saiSwitch, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); for (const auto& dstPrefix : dstPrefixes) { auto aclEntry = getTrapAclEntry(false, std::nullopt, dstPrefix, priority++); saiSwitch->managerTable()->aclTableManager().addAclEntry( - aclEntry, kAclTable1); + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); aclEntries_.push_back(aclEntry); } } @@ -128,7 +130,7 @@ HwTestPacketTrapEntry::~HwTestPacketTrapEntry() { auto saiSwitch = static_cast(hwSwitch_); for (const auto& aclEntry : aclEntries_) { saiSwitch->managerTable()->aclTableManager().removeAclEntry( - aclEntry, kAclTable1); + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); } } diff --git a/fboss/agent/hw/sai/hw_test/HwTestPortUtilsThriftHandler.cpp b/fboss/agent/hw/sai/hw_test/HwTestPortUtilsThriftHandler.cpp index f6e5e629a5227..f17e0a2925042 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestPortUtilsThriftHandler.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestPortUtilsThriftHandler.cpp @@ -1,9 +1,11 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. #include "fboss/agent/hw/sai/diag/DiagShell.h" +#include "fboss/agent/hw/sai/switch/SaiLagManager.h" #include "fboss/agent/hw/sai/switch/SaiSwitch.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/HwTestThriftHandler.h" +#include "fboss/agent/platforms/common/utils/Wedge100LedUtils.h" #include "folly/testing/TestUtil.h" @@ -92,6 +94,180 @@ void HwTestThriftHandler::getPortInfo( return; } +bool HwTestThriftHandler::verifyPortLedStatus(int portId, bool status) { + SaiPlatform* platform = static_cast(hwSwitch_->getPlatform()); + SaiPlatformPort* platformPort = platform->getPort(PortID(portId)); + uint32_t currentVal = platformPort->getCurrentLedState(); + uint32_t expectedVal = 0; + switch (platform->getType()) { + case PlatformType::PLATFORM_WEDGE100: { + expectedVal = static_cast(Wedge100LedUtils::getExpectedLEDState( + platform->getLaneCount(platformPort->getCurrentProfile()), + status, + status)); + return currentVal == expectedVal; + } + default: + throw FbossError("Unsupported platform type"); + } +} + +bool HwTestThriftHandler::verifyPGSettings(int portId, bool pfcEnabled) { + auto swPort = hwSwitch_->getProgrammedState()->getPorts()->getNodeIf(portId); + auto swPgConfig = swPort->getPortPgConfigs(); + + auto portHandle = static_cast(hwSwitch_) + ->managerTable() + ->portManager() + .getPortHandle(PortID(swPort->getID())); + // Ensure that both SW and HW has the same number of PG IDs + if (portHandle->configuredIngressPriorityGroups.size() != + swPort->getPortPgConfigs()->size()) { + XLOG(DBG2) << "Number of PGs mismatch for port " << swPort->getName() + << " hw size: " + << portHandle->configuredIngressPriorityGroups.size() + << " sw size: " << swPort->getPortPgConfigs()->size(); + return false; + } + for (const auto& pgConfig : std::as_const(*swPgConfig)) { + auto id = pgConfig->cref()->cref(); + auto iter = portHandle->configuredIngressPriorityGroups.find( + static_cast(id)); + if (iter == portHandle->configuredIngressPriorityGroups.end()) { + XLOG(DBG2) << "Priority group config canot be found for PG id " << id + << " on port " << swPort->getName(); + return false; + } + auto bufferProfile = iter->second.bufferProfile; + if (pgConfig->cref()->cref() != + SaiApiTable::getInstance()->bufferApi().getAttribute( + bufferProfile->adapterKey(), + SaiBufferProfileTraits::Attributes::XonOffsetTh{})) { + XLOG(DBG2) << "Resume offset mismatch for pg " << id; + return false; + } + if (pgConfig->cref()->cref() != + SaiApiTable::getInstance()->bufferApi().getAttribute( + bufferProfile->adapterKey(), + SaiBufferProfileTraits::Attributes::ReservedBytes{})) { + XLOG(DBG2) << "Min limit mismatch for pg " << id; + return false; + } + if (pgConfig->cref()->cref() != + SaiApiTable::getInstance()->bufferApi().getAttribute( + bufferProfile->adapterKey(), + SaiBufferProfileTraits::Attributes::ReservedBytes{})) { + XLOG(DBG2) << "Min limit mismatch for pg " << id; + return false; + } + if (auto pgHdrmOpt = + pgConfig->cref()) { + if (pgHdrmOpt->cref() != + SaiApiTable::getInstance()->bufferApi().getAttribute( + bufferProfile->adapterKey(), + SaiBufferProfileTraits::Attributes::XoffTh{})) { + XLOG(DBG2) << "Headroom mismatch for pg " << id; + return false; + } + } + + // Buffer pool configs + const auto bufferPool = + pgConfig->cref(); + if (bufferPool->cref()->cref() * + static_cast(hwSwitch_) + ->getPlatform() + ->getAsic() + ->getNumMemoryBuffers() != + SaiApiTable::getInstance()->bufferApi().getAttribute( + static_cast(hwSwitch_) + ->managerTable() + ->bufferManager() + .getIngressBufferPoolHandle() + ->bufferPool->adapterKey(), + SaiBufferPoolTraits::Attributes::XoffSize{})) { + XLOG(DBG2) << "Headroom mismatch for buffer pool"; + return false; + } + + // Port PFC configurations + if (SaiApiTable::getInstance()->portApi().getAttribute( + portHandle->port->adapterKey(), + SaiPortTraits::Attributes::PriorityFlowControlMode{}) == + SAI_PORT_PRIORITY_FLOW_CONTROL_MODE_COMBINED) { + auto hwPfcEnabled = SaiApiTable::getInstance()->portApi().getAttribute( + portHandle->port->adapterKey(), + SaiPortTraits::Attributes::PriorityFlowControl{}) + ? 1 + : 0; + if (hwPfcEnabled != pfcEnabled) { + XLOG(DBG2) << "PFC mismatch for port " << swPort->getName(); + return false; + } + } else { +#if !defined(TAJO_SDK) + auto hwPfcEnabled = + SaiApiTable::getInstance()->portApi().getAttribute( + portHandle->port->adapterKey(), + SaiPortTraits::Attributes::PriorityFlowControlTx{}) + ? 1 + : 0; + if (hwPfcEnabled != pfcEnabled) { + XLOG(DBG2) << "PFC mismatch for port " << swPort->getName(); + return false; + } +#else + XLOG(DBG2) << "Flow control mode SEPARATE unsupported!"; + return false; +#endif + } + } + return true; +} + +void HwTestThriftHandler::getAggPortInfo( + ::std::vector<::facebook::fboss::utility::AggPortInfo>& aggPortInfos, + std::unique_ptr<::std::vector<::std::int32_t>> aggPortIds) { + auto saiSwitch = static_cast(hwSwitch_); + auto& lagManager = saiSwitch->managerTable()->lagManager(); + for (const auto& portId : *aggPortIds) { + AggPortInfo aggPortInfo; + AggregatePortID aggPortId = AggregatePortID(portId); + try { + lagManager.getLagHandle(aggPortId); + aggPortInfo.isPresent() = true; + aggPortInfo.numMembers() = lagManager.getLagMemberCount(aggPortId); + aggPortInfo.numActiveMembers() = + lagManager.getActiveMemberCount(aggPortId); + + } catch (const std::exception& e) { + XLOG(DBG2) << "Lag handle not found for port " << aggPortId; + aggPortInfo.isPresent() = false; + } + aggPortInfos.push_back(aggPortInfo); + } + return; +} + +int HwTestThriftHandler::getNumAggPorts() { + auto saiSwitch = static_cast(hwSwitch_); + return saiSwitch->managerTable()->lagManager().getLagCount(); +} + +bool HwTestThriftHandler::verifyPktFromAggPort(int aggPortId) { + std::array data{}; + // TODO (T159867926): Set the right queue ID once the vendor + // set the right queue ID in the rx callback. + auto rxPacket = std::make_unique( + data.size(), + data.data(), + AggregatePortID(aggPortId), + VlanID(1), + cfg::PacketRxReason::UNMATCHED, + 0 /* queue Id */); + return rxPacket->isFromAggregatePort(); +} + } // namespace utility } // namespace fboss } // namespace facebook diff --git a/fboss/agent/hw/sai/hw_test/HwTestTamUtils.cpp b/fboss/agent/hw/sai/hw_test/HwTestTamUtils.cpp index 0cd4f49e7c94c..90b2631e98cc9 100644 --- a/fboss/agent/hw/sai/hw_test/HwTestTamUtils.cpp +++ b/fboss/agent/hw/sai/hw_test/HwTestTamUtils.cpp @@ -7,7 +7,6 @@ #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/hw/sai/api/SwitchApi.h" -#include "fboss/agent/hw/sai/api/TamApi.h" namespace facebook::fboss { namespace { diff --git a/fboss/agent/hw/sai/hw_test/SaiAclTableGroupTests.cpp b/fboss/agent/hw/sai/hw_test/SaiAclTableGroupTests.cpp index ce02ef654eab5..468435da75c55 100644 --- a/fboss/agent/hw/sai/hw_test/SaiAclTableGroupTests.cpp +++ b/fboss/agent/hw/sai/hw_test/SaiAclTableGroupTests.cpp @@ -165,6 +165,10 @@ class SaiAclTableGroupTest : public HwTest { return "table1_counter_acl2"; } + std::string kTable1CounterAcl3() const { + return "table1_counter_acl3"; + } + std::string kTable1Counter1Name() const { return "table1_counter1"; } @@ -173,6 +177,10 @@ class SaiAclTableGroupTest : public HwTest { return "table1_counter2"; } + std::string kTable1Counter3Name() const { + return "table1_counter3"; + } + std::string kTable2CounterAcl1() const { return "table2_counter_acl1"; } @@ -197,6 +205,10 @@ class SaiAclTableGroupTest : public HwTest { return "table2_counter3"; } + std::string kAclTableGroup() const { + return "Ingress Table Group"; + } + void addQphDscpAclTable( cfg::SwitchConfig* newCfg, bool addExtraQualifier = false) { @@ -218,7 +230,7 @@ class SaiAclTableGroupTest : public HwTest { * This field is used to modify the properties of the ACL table. * This will force a recreate of the acl table during delta processing. */ - qualifiers.push_back(cfg::AclTableQualifier::OUT_PORT); + qualifiers.push_back(cfg::AclTableQualifier::OUTER_VLAN); } // Table 1: For QPH and Dscp Acl. @@ -244,7 +256,7 @@ class SaiAclTableGroupTest : public HwTest { } void addTwoAclTables(cfg::SwitchConfig* newCfg) { - utility::addAclTableGroup(newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(newCfg, kAclStage(), kAclTableGroup()); // Table 1: Create QPH and DSCP ACLs in the same table. addQphDscpAclTableWithEntry(newCfg); @@ -281,12 +293,12 @@ class SaiAclTableGroupTest : public HwTest { switch (tableAdd) { case tableAddType::table1: - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); // Add Table 1: Create QPH and DSCP ACLs in the same table. addQphDscpAclTableWithEntry(&newCfg); break; case tableAddType::table2: - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); // Add Table 2: TtlTable utility::addTtlAclTable(&newCfg, 2 /* priority */); break; @@ -305,12 +317,16 @@ class SaiAclTableGroupTest : public HwTest { const std::string& aclTableName, const std::string& aclEntryName, const std::string& counterName, - uint8_t dscp) { + uint8_t dscp, + bool addVlan = false) { std::vector counterTypes{cfg::CounterType::PACKETS}; auto* counterAcl = utility::addAcl( cfg, aclEntryName, cfg::AclActionType::PERMIT, aclTableName); utility::addAclStat(cfg, aclEntryName, counterName, counterTypes); counterAcl->dscp() = dscp; + if (addVlan) { + counterAcl->vlanID() = 2000; + } } void addCounterAclsToQphTable(cfg::SwitchConfig* cfg) { @@ -372,7 +388,7 @@ class SaiAclTableGroupTest : public HwTest { cfg::SwitchConfig getMultiAclConfig(bool addExtraQualifier = false) { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addQphDscpAclTable(&newCfg, addExtraQualifier); utility::addQueuePerHostAclEntry( &newCfg, kQphDscpTable(), getHwSwitchEnsemble()->isSai()); @@ -394,7 +410,18 @@ class SaiAclTableGroupTest : public HwTest { table2EntryCount); } - void verifyAclEntryModificationTestHelper(bool addQualifierDuringWarmboot) { + // This helper has dual functionality and performs canary on/off + // + // The first argument indicates canary on or off. canaryOn=True would add an + // ACL entry (and qualifier depending on the 2nd argument) post warmboot + // and vice-versa for false + // + // The 2nd argument adds an ACL qualifier when moving between canary phases + // - When canaryOn, qualifier=true would add a qualifier post warmboot + // - when canaryOff, qualifier=true would add a qualifier pre warmboot + void verifyAclEntryModificationTestHelper( + bool canaryOn, + bool addRemoveAclQualifier) { ASSERT_TRUE(isSupported()); auto setup = [this]() { @@ -418,7 +445,7 @@ class SaiAclTableGroupTest : public HwTest { }; auto setupPostWarmboot = [=, this]() { - auto newCfg = getMultiAclConfig(addQualifierDuringWarmboot); + auto newCfg = getMultiAclConfig(addRemoveAclQualifier); // Add Dscp acl to table 1 post warmboot utility::addDscpAclEntryWithCounter( &newCfg, kQphDscpTable(), this->getHwSwitchEnsemble()->isSai()); @@ -446,15 +473,29 @@ class SaiAclTableGroupTest : public HwTest { kTable2CounterAcl1(), kTable2Counter1Name(), 4); + // add an ACL entry in table 1 using the new qualifier + addCounterAclToAclTable( + &newCfg, + kQphDscpTable(), + kTable1CounterAcl3(), + kTable1Counter3Name(), + 3, + addRemoveAclQualifier /* addVlan */); applyNewConfig(newCfg); }; auto verifyPostWarmboot = [=, this]() { verifyAclEntryTestHelper( - 37 /* table1EntryCount*/, 3 /* table1EntryCount*/); + 38 /* table1EntryCount*/, 3 /* table1EntryCount*/); }; - verifyAcrossWarmBoots(setup, verify, setupPostWarmboot, verifyPostWarmboot); + if (canaryOn) { + verifyAcrossWarmBoots( + setup, verify, setupPostWarmboot, verifyPostWarmboot); + } else { + verifyAcrossWarmBoots( + setupPostWarmboot, verifyPostWarmboot, setup, verify); + } } }; @@ -464,7 +505,7 @@ TEST_F(SaiAclTableGroupTest, SingleAclTableGroup) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); applyNewConfig(newCfg); }; @@ -482,7 +523,7 @@ TEST_F(SaiAclTableGroupTest, MultipleTablesNoEntries) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable2(newCfg); @@ -504,7 +545,7 @@ TEST_F(SaiAclTableGroupTest, MultipleTablesWithEntries) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable1Entry1(newCfg, kAclTable1()); addAclTable2(newCfg); @@ -524,7 +565,7 @@ TEST_F(SaiAclTableGroupTest, AddTablesThenEntries) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable2(newCfg); applyNewConfig(newCfg); @@ -545,7 +586,7 @@ TEST_F(SaiAclTableGroupTest, RemoveAclTable) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable1Entry1(newCfg, kAclTable1()); addAclTable2(newCfg); @@ -742,7 +783,10 @@ TEST_F(SaiAclTableGroupTest, TestAclTableGroupRoundtrip) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "ingress-ACL-Table-Group"); + utility::addAclTableGroup( + &newCfg, + kAclStage(), + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE_GROUP()); utility::addDefaultAclTable(newCfg); applyNewConfig(newCfg); @@ -763,7 +807,7 @@ TEST_F(SaiAclTableGroupTest, RepositionAclEntriesPostWarmboot) { auto setup = [this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable2(newCfg); addDefaultCounterAclsToTable(newCfg, false); @@ -782,7 +826,7 @@ TEST_F(SaiAclTableGroupTest, RepositionAclEntriesPostWarmboot) { auto setupPostWarmboot = [=, this]() { auto newCfg = initialConfig(); - utility::addAclTableGroup(&newCfg, kAclStage(), "Ingress Table Group"); + utility::addAclTableGroup(&newCfg, kAclStage(), kAclTableGroup()); addAclTable1(newCfg); addAclTable2(newCfg); addDefaultCounterAclsToTable(newCfg, true); @@ -807,7 +851,7 @@ TEST_F(SaiAclTableGroupTest, RepositionAclEntriesPostWarmboot) { * Verify that all entries are present. */ TEST_F(SaiAclTableGroupTest, AddAclEntriesToAclTablesPostWarmboot) { - verifyAclEntryModificationTestHelper(false); + verifyAclEntryModificationTestHelper(true, false); } /* @@ -819,6 +863,18 @@ TEST_F(SaiAclTableGroupTest, AddAclEntriesToAclTablesPostWarmboot) { TEST_F( SaiAclTableGroupTest, AddAclEntriesAndQualifiersToAclTablesPostWarmboot) { - verifyAclEntryModificationTestHelper(true); + verifyAclEntryModificationTestHelper(true, true); +} + +// only ACL entry removed, no change to table +TEST_F(SaiAclTableGroupTest, RemoveAclEntriesFromAclTablesPostWarmboot) { + verifyAclEntryModificationTestHelper(false, false); +} + +// ACL entry is removed and table is modified +TEST_F( + SaiAclTableGroupTest, + RemoveAclEntriesAndQualifiersFromAclTablesPostWarmboot) { + verifyAclEntryModificationTestHelper(false, true); } } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/hw_test/SaiAclTableTests.cpp b/fboss/agent/hw/sai/hw_test/SaiAclTableTests.cpp index e6628e836b301..56b50ff65f217 100644 --- a/fboss/agent/hw/sai/hw_test/SaiAclTableTests.cpp +++ b/fboss/agent/hw/sai/hw_test/SaiAclTableTests.cpp @@ -6,7 +6,6 @@ #include "fboss/agent/hw/sai/switch/SaiSwitch.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestAclUtils.h" -#include "fboss/agent/platforms/sai/SaiPlatform.h" namespace facebook::fboss { @@ -41,14 +40,20 @@ TEST_F(SaiAclTableRecreateTests, AclEntryCount) { applyNewConfig(config); const auto* saiSwitch = static_cast(getHwSwitch()); const auto& aclTableManager = saiSwitch->managerTable()->aclTableManager(); - EXPECT_EQ(aclTableManager.aclEntryCount(kAclTable1), 2); + EXPECT_EQ( + aclTableManager.aclEntryCount( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), + 2); }; auto verify = [=]() { // ensure acl table exists with same number of acl entries after force // recreate. const auto* saiSwitch = static_cast(getHwSwitch()); const auto& aclTableManager = saiSwitch->managerTable()->aclTableManager(); - EXPECT_EQ(aclTableManager.aclEntryCount(kAclTable1), 2); + EXPECT_EQ( + aclTableManager.aclEntryCount( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), + 2); }; verifyAcrossWarmBoots(setup, verify); } diff --git a/fboss/agent/hw/sai/hw_test/SaiNeighborRollbackTests.cpp b/fboss/agent/hw/sai/hw_test/SaiNeighborRollbackTests.cpp index 65c406a7a771f..f0f881c477a46 100644 --- a/fboss/agent/hw/sai/hw_test/SaiNeighborRollbackTests.cpp +++ b/fboss/agent/hw/sai/hw_test/SaiNeighborRollbackTests.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/test/HwTestEcmpUtils.h" #include "fboss/agent/hw/test/HwTestRouteUtils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/sai/hw_test/SaiNextHopGroupTest.cpp b/fboss/agent/hw/sai/hw_test/SaiNextHopGroupTest.cpp index 9ecf6d3fcca6d..240b3b4a412fd 100644 --- a/fboss/agent/hw/sai/hw_test/SaiNextHopGroupTest.cpp +++ b/fboss/agent/hw/sai/hw_test/SaiNextHopGroupTest.cpp @@ -5,7 +5,6 @@ #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/hw/sai/switch/SaiNextHopGroupManager.h" -#include "fboss/agent/hw/sai/switch/SaiPortManager.h" #include "fboss/agent/hw/sai/switch/SaiRouteManager.h" #include "fboss/agent/hw/sai/switch/SaiVirtualRouterManager.h" diff --git a/fboss/agent/hw/sai/hw_test/SaiSwitchEnsemble.cpp b/fboss/agent/hw/sai/hw_test/SaiSwitchEnsemble.cpp index 192e01a539469..0d6898596e94a 100644 --- a/fboss/agent/hw/sai/hw_test/SaiSwitchEnsemble.cpp +++ b/fboss/agent/hw/sai/hw_test/SaiSwitchEnsemble.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/SetupThrift.h" #include "fboss/agent/hw/sai/switch/SaiAclTableManager.h" #include "fboss/agent/hw/sai/switch/SaiLagManager.h" -#include "fboss/agent/hw/sai/switch/SaiPortManager.h" #include #include "fboss/agent/hw/sai/diag/SaiRepl.h" @@ -22,12 +21,9 @@ #include "fboss/agent/test/LinkStateToggler.h" #include "fboss/agent/HwSwitch.h" -#include "fboss/agent/SwitchStats.h" #include -#include - #include #include #include diff --git a/fboss/agent/hw/sai/hw_test/dataplane_tests/SaiAclTableGroupTrafficTests.cpp b/fboss/agent/hw/sai/hw_test/dataplane_tests/SaiAclTableGroupTrafficTests.cpp index e35df6e07a128..cbcd3ccadff8f 100644 --- a/fboss/agent/hw/sai/hw_test/dataplane_tests/SaiAclTableGroupTrafficTests.cpp +++ b/fboss/agent/hw/sai/hw_test/dataplane_tests/SaiAclTableGroupTrafficTests.cpp @@ -56,7 +56,7 @@ class SaiAclTableGroupTrafficTest : public HwLinkStateDependentTest { getAsic()->desiredLoopbackModes()); utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &cfg, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); return cfg; } diff --git a/fboss/agent/hw/sai/store/SaiObject.cpp b/fboss/agent/hw/sai/store/SaiObject.cpp index 6abb8fab5b170..2b85f55935f6c 100644 --- a/fboss/agent/hw/sai/store/SaiObject.cpp +++ b/fboss/agent/hw/sai/store/SaiObject.cpp @@ -61,7 +61,7 @@ SaiObject::adapterHostKeyToFollyDynamic() { template <> typename SaiNextHopGroupTraits::AdapterHostKey SaiObject::follyDynamicToAdapterHostKey( - folly::dynamic json) { + const folly::dynamic& json) { SaiNextHopGroupTraits::AdapterHostKey key; for (auto object : json) { auto type = @@ -138,7 +138,8 @@ folly::dynamic SaiObject::adapterHostKeyToFollyDynamic() { template <> typename SaiLagTraits::AdapterHostKey -SaiObject::follyDynamicToAdapterHostKey(folly::dynamic json) { +SaiObject::follyDynamicToAdapterHostKey( + const folly::dynamic& json) { std::string label = json.asString(); SaiLagTraits::AdapterHostKey::ValueType key{}; std::copy(std::begin(label), std::end(label), std::begin(key)); @@ -182,7 +183,7 @@ folly::dynamic SaiObject::adapterHostKeyToFollyDynamic() { template void pupulateOptionalAttrtToKey( - folly::dynamic& array, + const folly::dynamic& array, SaiWredTraits::AdapterHostKey& adapterHostKey, int index) { if (!array[index].isString()) { @@ -192,7 +193,8 @@ void pupulateOptionalAttrtToKey( template <> typename SaiWredTraits::AdapterHostKey -SaiObject::follyDynamicToAdapterHostKey(folly::dynamic json) { +SaiObject::follyDynamicToAdapterHostKey( + const folly::dynamic& json) { SaiWredTraits::AdapterHostKey key; std::get(key) = json[0].asBool(); pupulateOptionalAttrtToKey( @@ -219,7 +221,7 @@ folly::dynamic SaiObject::adapterHostKeyToFollyDynamic() { template <> typename SaiAclTableTraits::AdapterHostKey SaiObject::follyDynamicToAdapterHostKey( - folly::dynamic json) { + const folly::dynamic& json) { return json.asString(); } @@ -231,7 +233,7 @@ folly::dynamic SaiObject::adapterHostKeyToFollyDynamic() { template <> typename SaiUdfGroupTraits::AdapterHostKey SaiObject::follyDynamicToAdapterHostKey( - folly::dynamic json) { + const folly::dynamic& json) { return json.asString(); } } // namespace fboss diff --git a/fboss/agent/hw/sai/store/SaiObject.h b/fboss/agent/hw/sai/store/SaiObject.h index 5e524db492d7d..330c8758f8cc1 100644 --- a/fboss/agent/hw/sai/store/SaiObject.h +++ b/fboss/agent/hw/sai/store/SaiObject.h @@ -372,7 +372,7 @@ class SaiObject { folly::dynamic adapterHostKeyToFollyDynamic(); static typename SaiObjectTraits::AdapterHostKey follyDynamicToAdapterHostKey( - folly::dynamic); + const folly::dynamic&); void setIgnoreMissingInHwOnDelete(bool ignore) { ignoreMissingInHwOnDelete_ = ignore; diff --git a/fboss/agent/hw/sai/store/SaiStore.h b/fboss/agent/hw/sai/store/SaiStore.h index 6ca2abaa9cc91..258fbde239c72 100644 --- a/fboss/agent/hw/sai/store/SaiStore.h +++ b/fboss/agent/hw/sai/store/SaiStore.h @@ -10,6 +10,7 @@ #pragma once #include "fboss/agent/FbossError.h" +#include "fboss/agent/gen-cpp2/switch_config_constants.h" #include "fboss/agent/hw/sai/api/AclApi.h" #include "fboss/agent/hw/sai/api/AdapterKeySerializers.h" #include "fboss/agent/hw/sai/api/LagApi.h" @@ -437,7 +438,10 @@ class SaiObjectStore { if constexpr (std::is_same_v) { // TODO(pshaikh): hack to allow warm boot from version which doesn't // save ahk - return ObjectType(key, SaiAclTableTraits::AdapterHostKey{kAclTable1}); + return ObjectType( + key, + SaiAclTableTraits::AdapterHostKey{ + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()}); } if constexpr (std::is_same_v) { // a special handling has been added to deal with next hop group to @@ -637,7 +641,7 @@ class SaiStore { SaiObjectStore, SaiObjectStore, SaiObjectStore, -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) SaiObjectStore, #endif SaiObjectStore, diff --git a/fboss/agent/hw/sai/store/tests/AclTableGroupStoreTest.cpp b/fboss/agent/hw/sai/store/tests/AclTableGroupStoreTest.cpp index a21609cae1e09..cc391ee146835 100644 --- a/fboss/agent/hw/sai/store/tests/AclTableGroupStoreTest.cpp +++ b/fboss/agent/hw/sai/store/tests/AclTableGroupStoreTest.cpp @@ -70,6 +70,11 @@ class AclTableGroupStoreTest : public SaiStoreTest { true, // outer vlan id true, // bth opcode true, // ipv6 next header + 0, // udf group 0 + 1, // udf group 1 + 2, // udf group 2 + 3, // udf group 3 + 4, // udf group 4 }, 0); } diff --git a/fboss/agent/hw/sai/store/tests/AclTableStoreTest.cpp b/fboss/agent/hw/sai/store/tests/AclTableStoreTest.cpp index 3111876385df4..57afb900818b1 100644 --- a/fboss/agent/hw/sai/store/tests/AclTableStoreTest.cpp +++ b/fboss/agent/hw/sai/store/tests/AclTableStoreTest.cpp @@ -208,10 +208,23 @@ class AclTableStoreTest : public SaiStoreTest { return 0; } + sai_object_id_t kUdfGroupId() const { + return 1; + } + + std::pair, std::vector> kUdfGroupData() + const { + std::vector data = {0x11, 0x22}; + std::vector mask = {0xFF, 0xFF}; + return std::make_pair(std::move(data), std::move(mask)); + } + AclTableSaiId createAclTable(sai_int32_t stage) const { return saiApiTable->aclApi().create( { - stage, kBindPointTypeList(), kActionTypeList(), + stage, + kBindPointTypeList(), + kActionTypeList(), true, // srcIpv6 true, // dstIpv6 true, // srcIpv4 @@ -238,6 +251,11 @@ class AclTableStoreTest : public SaiStoreTest { true, // outer vlan id true, // bth opcode true, // ipv6 next header + kUdfGroupId(), // udf group 0 + kUdfGroupId() + 1, // udf group 1 + kUdfGroupId() + 2, // udf group 2 + kUdfGroupId() + 3, // udf group 3 + kUdfGroupId() + 4, // udf group 4 }, 0); } @@ -275,6 +293,11 @@ class AclTableStoreTest : public SaiStoreTest { AclEntryFieldU16(this->kOuterVlanId()), AclEntryFieldU8(this->kBthOpcode()), AclEntryFieldU8(this->kIpv6NextHeader()), + AclEntryFieldU8List(this->kUdfGroupData()), + AclEntryFieldU8List(this->kUdfGroupData()), + AclEntryFieldU8List(this->kUdfGroupData()), + AclEntryFieldU8List(this->kUdfGroupData()), + AclEntryFieldU8List(this->kUdfGroupData()), AclEntryActionU32(this->kPacketAction()), AclEntryActionSaiObjectIdT(this->kCounter()), AclEntryActionU8(this->kSetTC()), @@ -311,7 +334,8 @@ TEST_F(AclTableStoreTest, loadAclTables) { s.reload(); auto& store = s.get(); - SaiAclTableTraits::AdapterHostKey k{"AclTable1"}; + SaiAclTableTraits::AdapterHostKey k{ + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()}; auto got = store.get(k); EXPECT_NE(got, nullptr); @@ -358,7 +382,8 @@ TEST_P(AclTableStoreParamTest, loadAclCounter) { TEST_P(AclTableStoreParamTest, aclTableCtorLoad) { auto aclTableId = createAclTable(GetParam()); - auto obj = createObj(aclTableId, "AclTable1"); + auto obj = createObj( + aclTableId, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_EQ(obj.adapterKey(), aclTableId); } @@ -381,7 +406,9 @@ TEST_P(AclTableStoreParamTest, aclCounterLoadCtor) { TEST_P(AclTableStoreParamTest, aclTableCtorCreate) { SaiAclTableTraits::CreateAttributes c{ - GetParam(), this->kBindPointTypeList(), this->kActionTypeList(), + GetParam(), + this->kBindPointTypeList(), + this->kActionTypeList(), true, // srcIpv6 true, // dstIpv6 true, // srcIpv4 @@ -408,9 +435,15 @@ TEST_P(AclTableStoreParamTest, aclTableCtorCreate) { true, // outer vlan id true, // bth opcode true, // ipv6 next header + kUdfGroupId(), // udf group 0 + kUdfGroupId() + 1, // udf group 1 + kUdfGroupId() + 2, // udf group 2 + kUdfGroupId() + 3, // udf group 3 + kUdfGroupId() + 4, // udf group 4 }; - SaiAclTableTraits::AdapterHostKey k{"AclTable1"}; + SaiAclTableTraits::AdapterHostKey k{ + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()}; SaiObject obj = createObj(k, c, 0); EXPECT_EQ(GET_ATTR(AclTable, Stage, obj.attributes()), GetParam()); @@ -451,6 +484,11 @@ TEST_P(AclTableStoreParamTest, AclEntryCreateCtor) { this->kOuterVlanId(), this->kBthOpcode(), this->kIpv6NextHeader(), + this->kUdfGroupData(), + this->kUdfGroupData(), + this->kUdfGroupData(), + this->kUdfGroupData(), + this->kUdfGroupData(), this->kPacketAction(), this->kCounter(), this->kSetTC(), diff --git a/fboss/agent/hw/sai/store/tests/MirrorStoreTest.cpp b/fboss/agent/hw/sai/store/tests/MirrorStoreTest.cpp index af2ee360bbc03..c5701804f824e 100644 --- a/fboss/agent/hw/sai/store/tests/MirrorStoreTest.cpp +++ b/fboss/agent/hw/sai/store/tests/MirrorStoreTest.cpp @@ -36,7 +36,7 @@ class MirrorStoreTest : public SaiStoreTest { MirrorSaiId createLocalMirror(int portId) { SaiLocalMirrorTraits::CreateAttributes c{ - SAI_MIRROR_SESSION_TYPE_LOCAL, portId}; + SAI_MIRROR_SESSION_TYPE_LOCAL, portId, std::nullopt}; return saiApiTable->mirrorApi().create(c, 0); } @@ -51,7 +51,8 @@ class MirrorStoreTest : public SaiStoreTest { folly::MacAddress& dstMac, uint8_t ipHeaderVersion, uint16_t greProtocol, - uint32_t samplingRate) { + uint32_t samplingRate, + std::optional tcBufferLimit) { return saiApiTable->mirrorApi().create( {SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE, portId, @@ -65,7 +66,8 @@ class MirrorStoreTest : public SaiStoreTest { greProtocol, ttl, truncateSize, - samplingRate}, + samplingRate, + tcBufferLimit}, 0); } }; @@ -73,14 +75,15 @@ class MirrorStoreTest : public SaiStoreTest { TEST_F(MirrorStoreTest, loadMirrorSessions) { auto mirrorId1 = createLocalMirror(0); auto mirrorId2 = createEnhancedRemoteMirror( - 1, 16, 240, 255, srcIp, dstIp, srcMac, dstMac, 4, 2148, 0); + 1, 16, 240, 255, srcIp, dstIp, srcMac, dstMac, 4, 2148, 0, std::nullopt); SaiStore s(0); s.reload(); auto& store1 = s.get(); auto& store2 = s.get(); - SaiLocalMirrorTraits::AdapterHostKey k1{SAI_MIRROR_SESSION_TYPE_LOCAL, 0}; + SaiLocalMirrorTraits::AdapterHostKey k1{ + SAI_MIRROR_SESSION_TYPE_LOCAL, 0, std::nullopt}; SaiEnhancedRemoteMirrorTraits::AdapterHostKey k2{ SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE, 1, srcIp, dstIp}; auto got1 = store1.get(k1); @@ -99,8 +102,10 @@ TEST_F(MirrorStoreTest, mirrorLoadCtor) { } TEST_F(MirrorStoreTest, mirrorCreateCtor) { - SaiLocalMirrorTraits::AdapterHostKey k{SAI_MIRROR_SESSION_TYPE_LOCAL, 0}; - SaiLocalMirrorTraits::CreateAttributes c{SAI_MIRROR_SESSION_TYPE_LOCAL, 0}; + SaiLocalMirrorTraits::AdapterHostKey k{ + SAI_MIRROR_SESSION_TYPE_LOCAL, 0, std::nullopt}; + SaiLocalMirrorTraits::CreateAttributes c{ + SAI_MIRROR_SESSION_TYPE_LOCAL, 0, std::nullopt}; auto obj = createObj(k, c, 0); EXPECT_EQ( GET_ATTR(LocalMirror, Type, obj.attributes()), @@ -114,7 +119,7 @@ TEST_F(MirrorStoreTest, localSpanSerDeser) { TEST_F(MirrorStoreTest, erSpanSerDeser) { auto mirrorId = createEnhancedRemoteMirror( - 2, 16, 220, 255, srcIp, dstIp, srcMac, dstMac, 4, 2200, 0); + 2, 16, 220, 255, srcIp, dstIp, srcMac, dstMac, 4, 2200, 0, std::nullopt); verifyAdapterKeySerDeser({mirrorId}); } @@ -122,6 +127,6 @@ TEST_F(MirrorStoreTest, toStr) { std::ignore = createLocalMirror(0); verifyToStr(); std::ignore = createEnhancedRemoteMirror( - 20, 16, 220, 180, srcIp, dstIp, srcMac, dstMac, 4, 2200, 0); + 20, 16, 220, 180, srcIp, dstIp, srcMac, dstMac, 4, 2200, 0, std::nullopt); verifyToStr(); } diff --git a/fboss/agent/hw/sai/store/tests/PortStoreTest.cpp b/fboss/agent/hw/sai/store/tests/PortStoreTest.cpp index 1babf7f64c2ed..bb84fe49cdb1d 100644 --- a/fboss/agent/hw/sai/store/tests/PortStoreTest.cpp +++ b/fboss/agent/hw/sai/store/tests/PortStoreTest.cpp @@ -76,6 +76,7 @@ class PortStoreTest : public SaiStoreTest { std::nullopt, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; } diff --git a/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.cpp b/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.cpp index 52352a20bd0c4..5ad1582702ad4 100644 --- a/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.cpp @@ -25,7 +25,7 @@ SaiAclTableGroupManager::SaiAclTableGroupManager( : saiStore_(saiStore), managerTable_(managerTable), platform_(platform) {} sai_acl_stage_t SaiAclTableGroupManager::cfgAclStageToSaiAclStage( - cfg::AclStage aclStage) const { + cfg::AclStage aclStage) { switch (aclStage) { case cfg::AclStage::INGRESS: return SAI_ACL_STAGE_INGRESS; @@ -33,6 +33,8 @@ sai_acl_stage_t SaiAclTableGroupManager::cfgAclStageToSaiAclStage( return SAI_ACL_STAGE_INGRESS_MACSEC; case cfg::AclStage::EGRESS_MACSEC: return SAI_ACL_STAGE_EGRESS_MACSEC; + case cfg::AclStage::EGRESS: + return SAI_ACL_STAGE_EGRESS; } // should return in one of the cases diff --git a/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.h b/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.h index 03109a832f151..9b4b2fc56c479 100644 --- a/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.h +++ b/fboss/agent/hw/sai/switch/SaiAclTableGroupManager.h @@ -76,7 +76,7 @@ class SaiAclTableGroupManager { const SaiAclTableGroupHandle* aclTableGroupHandle, const std::string& aclTableName) const; - sai_acl_stage_t cfgAclStageToSaiAclStage(cfg::AclStage aclStage) const; + static sai_acl_stage_t cfgAclStageToSaiAclStage(cfg::AclStage aclStage); private: SaiAclTableGroupHandle* FOLLY_NULLABLE diff --git a/fboss/agent/hw/sai/switch/SaiAclTableManager.cpp b/fboss/agent/hw/sai/switch/SaiAclTableManager.cpp index 670b4b57e3d1a..3a27e47a3761e 100644 --- a/fboss/agent/hw/sai/switch/SaiAclTableManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiAclTableManager.cpp @@ -98,7 +98,7 @@ AclTableSaiId SaiAclTableManager::addAclTable( const std::shared_ptr& addedAclTable, cfg::AclStage aclStage) { auto saiAclStage = - managerTable_->aclTableGroupManager().cfgAclStageToSaiAclStage(aclStage); + SaiAclTableGroupManager::cfgAclStageToSaiAclStage(aclStage); /* * TODO(skhare) @@ -107,7 +107,7 @@ AclTableSaiId SaiAclTableManager::addAclTable( * addAclTable. * * After ACL table is added, add it to appropriate ACL group: - * managerTable_->switchManager().addTableGroupMember(SAI_ACL_STAGE_INGRESS, + * managerTable_->switchManager().addTableGroupMember(aclStage, * aclTableSaiId); */ @@ -150,7 +150,7 @@ AclTableSaiId SaiAclTableManager::addAclTable( // Add ACL Table to group based on the stage if (platform_->getAsic()->isSupported(HwAsic::Feature::ACL_TABLE_GROUP)) { managerTable_->aclTableGroupManager().addAclTableGroupMember( - SAI_ACL_STAGE_INGRESS, aclTableSaiId, aclTableName); + saiAclStage, aclTableSaiId, aclTableName); } return aclTableSaiId; @@ -158,13 +158,15 @@ AclTableSaiId SaiAclTableManager::addAclTable( void SaiAclTableManager::removeAclTable( const std::shared_ptr& removedAclTable, - cfg::AclStage /*aclStage*/) { + cfg::AclStage aclStage) { + auto saiAclStage = + SaiAclTableGroupManager::cfgAclStageToSaiAclStage(aclStage); auto aclTableName = removedAclTable->getID(); // remove from acl table group if (hasTableGroups_) { managerTable_->aclTableGroupManager().removeAclTableGroupMember( - SAI_ACL_STAGE_INGRESS, aclTableName); + saiAclStage, aclTableName); } // remove from handles @@ -176,7 +178,9 @@ bool SaiAclTableManager::needsAclTableRecreate( const std::shared_ptr& newAclTable) { if (oldAclTable->getActionTypes() != newAclTable->getActionTypes() || oldAclTable->getPriority() != newAclTable->getPriority() || - oldAclTable->getQualifiers() != newAclTable->getQualifiers()) { + oldAclTable->getQualifiers() != newAclTable->getQualifiers() || + oldAclTable->getUdfGroups()->toThrift() != + newAclTable->getUdfGroups()->toThrift()) { XLOG(DBG2) << "Recreating ACL table"; return true; } @@ -196,8 +200,13 @@ void SaiAclTableManager::removeAclEntriesFromTable( void SaiAclTableManager::addAclEntriesToTable( const std::shared_ptr& aclTable, std::shared_ptr& aclMap) { + auto newAclMap = aclTable->getAclMap().unwrap(); for (auto const& iter : std::as_const(*aclMap)) { const auto& entry = iter.second; + // only re-add the ACL entry if present in new table + if (!newAclMap->getEntryIf(entry->getID())) { + continue; + } auto aclEntry = aclMap->getEntry(entry->getID()); addAclEntry(aclEntry, aclTable->getID()); } @@ -394,6 +403,11 @@ SaiAclTableManager::cfgActionTypeListToSaiActionTypeList( case cfg::AclTableActionType::SET_USER_DEFINED_TRAP: saiActionType = SAI_ACL_ACTION_TYPE_SET_USER_TRAP_ID; break; +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + case cfg::AclTableActionType::DISABLE_ARS_FORWARDING: + saiActionType = SAI_ACL_ACTION_TYPE_DISABLE_ARS_FORWARDING; + break; +#endif default: // should return in one of the cases throw FbossError("Unsupported Acl Table action type"); @@ -697,7 +711,10 @@ AclEntrySaiId SaiAclTableManager::addAclEntry( #endif std::optional fieldIpProtocol{ std::nullopt}; - auto qualifierSet = getSupportedQualifierSet(); + + auto stage = static_cast( + GET_ATTR(AclTable, Stage, aclTableHandle->aclTable->attributes())); + auto qualifierSet = getSupportedQualifierSet(stage); if (qualifierSet.find(cfg::AclTableQualifier::IP_PROTOCOL) != qualifierSet.end() && matchV4 && addedAclEntry->getProto()) { @@ -1181,6 +1198,16 @@ AclEntrySaiId SaiAclTableManager::addAclEntry( #endif #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) fieldIpv6NextHeader, +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, + std::nullopt, #endif aclActionPacketAction, aclActionCounter, @@ -1239,8 +1266,8 @@ void SaiAclTableManager::removeAclEntry( if (itr == aclTableHandle->aclTableMembers.end()) { // an acl entry that uses cpu port as qualifier may not have been created // even if it exists in switch state. - XLOG(ERR) << "attempted to remove aclEntry which does not exist: ", - removedAclEntry->getID(); + XLOG(ERR) << "attempted to remove aclEntry which does not exist: " + << removedAclEntry->getID(); return; } @@ -1397,8 +1424,18 @@ std::pair SaiAclTableManager::getAclResourceUsage() { return std::make_pair(aclEntriesFree, aclCountersFree); } -std::set SaiAclTableManager::getSupportedQualifierSet() - const { +std::set SaiAclTableManager::getSupportedQualifierSet( + cfg::AclStage stage) const { + return getSupportedQualifierSet( + SaiAclTableGroupManager::cfgAclStageToSaiAclStage(stage)); +} + +std::set SaiAclTableManager::getSupportedQualifierSet( + sai_acl_stage_t aclStage) const { + if (aclStage == SAI_ACL_STAGE_EGRESS && + platform_->getAsic()->isSupported(HwAsic::Feature::EGRESS_ACL_TABLE)) { + throw FbossError("egress acl table is not supported on switch asic"); + } /* * Not all the qualifiers are supported by every ASIC. * Moreover, different ASICs have different max key widths. @@ -1494,22 +1531,28 @@ std::set SaiAclTableManager::getSupportedQualifierSet() return jericho3Qualifiers; } else if (isChenab) { /* TODO(pshaikh): review the qualifiers */ - std::set chenabQualifiers = { - cfg::AclTableQualifier::SRC_IPV6, - cfg::AclTableQualifier::DST_IPV6, - cfg::AclTableQualifier::SRC_IPV4, - cfg::AclTableQualifier::DST_IPV4, - cfg::AclTableQualifier::L4_SRC_PORT, - cfg::AclTableQualifier::L4_DST_PORT, - cfg::AclTableQualifier::IP_PROTOCOL, - cfg::AclTableQualifier::SRC_PORT, - cfg::AclTableQualifier::DSCP, - cfg::AclTableQualifier::TTL, - cfg::AclTableQualifier::OUTER_VLAN, - // TODO(pshaikh): Add UDF? - }; - - return chenabQualifiers; + if (aclStage == SAI_ACL_STAGE_INGRESS) { + return { + cfg::AclTableQualifier::SRC_IPV6, + cfg::AclTableQualifier::DST_IPV6, + cfg::AclTableQualifier::SRC_IPV4, + cfg::AclTableQualifier::DST_IPV4, + cfg::AclTableQualifier::L4_SRC_PORT, + cfg::AclTableQualifier::L4_DST_PORT, + cfg::AclTableQualifier::IP_PROTOCOL, + cfg::AclTableQualifier::SRC_PORT, + cfg::AclTableQualifier::DSCP, + cfg::AclTableQualifier::TTL, + cfg::AclTableQualifier::OUTER_VLAN, + // TODO(pshaikh): Add UDF? + }; + } else { + return { + cfg::AclTableQualifier::OUT_PORT, + cfg::AclTableQualifier::LOOKUP_CLASS_L2, + cfg::AclTableQualifier::LOOKUP_CLASS_ROUTE, + }; + } } else { std::set bcmQualifiers = { cfg::AclTableQualifier::SRC_IPV6, @@ -1556,28 +1599,34 @@ std::set SaiAclTableManager::getSupportedQualifierSet() } } -void SaiAclTableManager::addDefaultAclTable() { - if (handles_.find(kAclTable1) != handles_.end()) { - throw FbossError("default acl table already exists."); +void SaiAclTableManager::addDefaultAclTable( + cfg::AclStage stage, + const std::string& name) { + if (handles_.find(name) != handles_.end()) { + throw FbossError("default acl table ", name, " already exists."); } // TODO(saranicholas): set appropriate table priority state::AclTableFields aclTableFields{}; aclTableFields.priority() = 0; - aclTableFields.id() = kAclTable1; + aclTableFields.id() = name; auto table1 = std::make_shared(std::move(aclTableFields)); - addAclTable(table1, cfg::AclStage::INGRESS); + addAclTable(table1, stage); } -void SaiAclTableManager::removeDefaultAclTable() { - if (handles_.find(kAclTable1) == handles_.end()) { +void SaiAclTableManager::removeDefaultAclTable( + cfg::AclStage stage, + const std::string& name) { + if (handles_.find(name) == handles_.end()) { return; } // remove from acl table group + sai_acl_stage_t saiAclStage = + SaiAclTableGroupManager::cfgAclStageToSaiAclStage(stage); if (platform_->getAsic()->isSupported(HwAsic::Feature::ACL_TABLE_GROUP)) { managerTable_->aclTableGroupManager().removeAclTableGroupMember( - SAI_ACL_STAGE_INGRESS, kAclTable1); + saiAclStage, name); } - handles_.erase(kAclTable1); + handles_.erase(cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); } bool SaiAclTableManager::isQualifierSupported( @@ -1743,7 +1792,8 @@ bool SaiAclTableManager::areQualifiersSupported( bool SaiAclTableManager::areQualifiersSupportedInDefaultAclTable( const std::set& qualifiers) const { - return areQualifiersSupported(kAclTable1, qualifiers); + return areQualifiersSupported( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(), qualifiers); } void SaiAclTableManager::recreateAclTable( @@ -1865,4 +1915,15 @@ std::shared_ptr SaiAclTableManager::reconstructAclEntry( int /*priority*/) const { throw FbossError("reconstructAclEntry not implemented in SaiAclTableManager"); } + +void SaiAclTableManager::addDefaultIngressAclTable() { + addDefaultAclTable( + cfg::AclStage::INGRESS, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); +} +void SaiAclTableManager::removeDefaultIngressAclTable() { + removeDefaultAclTable( + cfg::AclStage::INGRESS, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/SaiAclTableManager.h b/fboss/agent/hw/sai/switch/SaiAclTableManager.h index 2ddb32c06e9c2..3e31f63e42ca2 100644 --- a/fboss/agent/hw/sai/switch/SaiAclTableManager.h +++ b/fboss/agent/hw/sai/switch/SaiAclTableManager.h @@ -188,10 +188,11 @@ class SaiAclTableManager { std::pair getAclResourceUsage(); - std::set getSupportedQualifierSet() const; + std::set getSupportedQualifierSet( + cfg::AclStage stage) const; - void addDefaultAclTable(); - void removeDefaultAclTable(); + void addDefaultIngressAclTable(); + void removeDefaultIngressAclTable(); bool isQualifierSupported( const std::string& aclTableName, @@ -238,6 +239,7 @@ class SaiAclTableManager { std::vector getActionTypeList( const std::shared_ptr& addedAclTable); std::set getQualifierSet( + sai_acl_stage_t aclStage, const std::shared_ptr& addedAclTable); std::pair< @@ -272,6 +274,12 @@ class SaiAclTableManager { const SaiAclCounterTraits::CreateAttributes& fromStore, const SaiAclCounterTraits::CreateAttributes& fromSw); + std::set getSupportedQualifierSet( + sai_acl_stage_t aclStage) const; + + void addDefaultAclTable(cfg::AclStage stage, const std::string& name); + void removeDefaultAclTable(cfg::AclStage stage, const std::string& name); + SaiStore* saiStore_; SaiManagerTable* managerTable_; const SaiPlatform* platform_; diff --git a/fboss/agent/hw/sai/switch/SaiArsManager.cpp b/fboss/agent/hw/sai/switch/SaiArsManager.cpp index 14aae5f91863e..28fd6989715e9 100644 --- a/fboss/agent/hw/sai/switch/SaiArsManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiArsManager.cpp @@ -29,7 +29,8 @@ SaiArsManager::SaiArsManager( } #if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) -sai_int32_t cfgSwitchingModeToSai(cfg::SwitchingMode switchingMode) { +sai_int32_t SaiArsManager::cfgSwitchingModeToSai( + cfg::SwitchingMode switchingMode) const { switch (switchingMode) { case cfg::SwitchingMode::FLOWLET_QUALITY: return SAI_ARS_MODE_FLOWLET_QUALITY; @@ -55,7 +56,9 @@ void SaiArsManager::addArs( void SaiArsManager::removeArs( const std::shared_ptr& flowletSwitchConfig) { - arsHandle_.reset(); + if (arsHandle_->ars) { + arsHandle_->ars.reset(); + } } void SaiArsManager::changeArs( diff --git a/fboss/agent/hw/sai/switch/SaiArsManager.h b/fboss/agent/hw/sai/switch/SaiArsManager.h index ffa5b8532f1ac..09e5bbfb0738b 100644 --- a/fboss/agent/hw/sai/switch/SaiArsManager.h +++ b/fboss/agent/hw/sai/switch/SaiArsManager.h @@ -22,7 +22,7 @@ namespace facebook::fboss { class SaiManagerTable; class SaiPlatform; -class SaiNextHopGroupHandle; +struct SaiNextHopGroupHandle; class SaiStore; #if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) @@ -50,6 +50,7 @@ class SaiArsManager { const std::shared_ptr& oldFlowletSwitchingConfig, const std::shared_ptr& newFlowletSwitchingConfig); SaiArsHandle* getArsHandle(); + sai_int32_t cfgSwitchingModeToSai(cfg::SwitchingMode switchingMode) const; #endif private: diff --git a/fboss/agent/hw/sai/switch/SaiArsProfileManager.cpp b/fboss/agent/hw/sai/switch/SaiArsProfileManager.cpp index 61cb690e5d4c1..dc40b7620ee01 100644 --- a/fboss/agent/hw/sai/switch/SaiArsProfileManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiArsProfileManager.cpp @@ -32,7 +32,7 @@ SaiArsProfileManager::SaiArsProfileManager( SaiArsProfileTraits::CreateAttributes SaiArsProfileManager::createAttributes( const std::shared_ptr& flowletSwitchConfig) { auto samplingInterval = flowletSwitchConfig->getDynamicSampleRate(); - sai_uint32_t randomSeed = 0x5555; + sai_uint32_t randomSeed = kArsRandomSeed; auto portLoadPastWeight = flowletSwitchConfig->getDynamicEgressLoadExponent(); auto portLoadFutureWeight = flowletSwitchConfig->getDynamicQueueExponent(); auto portLoadExponent = @@ -82,7 +82,9 @@ void SaiArsProfileManager::addArsProfile( void SaiArsProfileManager::removeArsProfile( const std::shared_ptr& flowletSwitchConfig) { - arsProfileHandle_.reset(); + if (arsProfileHandle_->arsProfile) { + arsProfileHandle_->arsProfile.reset(); + } } void SaiArsProfileManager::changeArsProfile( diff --git a/fboss/agent/hw/sai/switch/SaiArsProfileManager.h b/fboss/agent/hw/sai/switch/SaiArsProfileManager.h index 749dba593a0e6..c0f846a482260 100644 --- a/fboss/agent/hw/sai/switch/SaiArsProfileManager.h +++ b/fboss/agent/hw/sai/switch/SaiArsProfileManager.h @@ -40,6 +40,7 @@ class SaiArsProfileManager { SaiStore* saiStore, SaiManagerTable* managerTable, const SaiPlatform* platform); + static auto constexpr kArsRandomSeed = 0x5555; #if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) void addArsProfile( const std::shared_ptr& flowletSwitchingConfig); diff --git a/fboss/agent/hw/sai/switch/SaiBufferManager.cpp b/fboss/agent/hw/sai/switch/SaiBufferManager.cpp index a6bd97742288c..de9ee6319d222 100644 --- a/fboss/agent/hw/sai/switch/SaiBufferManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiBufferManager.cpp @@ -540,8 +540,7 @@ SaiBufferProfileTraits::CreateAttributes SaiBufferManager::profileCreateAttrs( sharedFadtMaxTh = 0; } #endif -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) // Unused, set default value as 0 sharedFadtMinTh = 0; sramFadtMaxTh = 0; @@ -636,9 +635,6 @@ SaiBufferManager::ingressProfileCreateAttrs( sramFadtXonOffset; #if defined(BRCM_SAI_SDK_DNX_GTE_11_0) sharedFadtMaxTh = config.maxSharedXoffThresholdBytes().value_or(0); -#endif -// TODO: Change to BRCM_SAI_SDK_DNX_GTE_11_0 once support is available in 12.0 -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) sharedFadtMinTh = config.minSharedXoffThresholdBytes().value_or(0); sramFadtMaxTh = config.maxSramXoffThresholdBytes().value_or(0); sramFadtMinTh = config.minSramXoffThresholdBytes().value_or(0); diff --git a/fboss/agent/hw/sai/switch/SaiHostifManager.cpp b/fboss/agent/hw/sai/switch/SaiHostifManager.cpp index 806ef35c0f7f8..a86a528b575a6 100644 --- a/fboss/agent/hw/sai/switch/SaiHostifManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiHostifManager.cpp @@ -9,6 +9,7 @@ */ #include "fboss/agent/hw/sai/switch/SaiHostifManager.h" +#include "fboss/agent/VoqUtils.h" #include "fboss/agent/hw/sai/store/SaiStore.h" #include "fboss/agent/hw/sai/switch/ConcurrentIndices.h" #include "fboss/agent/hw/sai/switch/SaiManagerTable.h" @@ -408,6 +409,31 @@ void SaiHostifManager::processQueueDelta( changeCpuQueue(oldQueues, newQueues); } +void SaiHostifManager::processVoqDelta( + const DeltaValue& controlPlaneDelta) { + const auto& newVoqs = + controlPlaneDelta.getNew()->cref(); + if (!platform_->getAsic()->isSupported(HwAsic::Feature::VOQ) && + !newVoqs->empty()) { + throw FbossError( + "Got non-empty cpu voq state on platform not supporting VOQ"); + } + if (newVoqs->empty() && + platform_->getAsic()->isSupported(HwAsic::Feature::VOQ)) { + // TODO(daiweix): remove this if clause after populating cpu voq + // configs everywhere. For now, use the same voq config from egq + const auto& oldQueues = + controlPlaneDelta.getOld()->cref(); + const auto& newQueues = + controlPlaneDelta.getNew()->cref(); + changeCpuVoq(oldQueues, newQueues); + } else { + const auto& oldVoqs = + controlPlaneDelta.getOld()->cref(); + changeCpuVoq(oldVoqs, newVoqs); + } +} + void SaiHostifManager::processHostifDelta( const ThriftMapDelta& multiSwitchControlPlaneDelta) { DeltaFunctions::forEachChanged( @@ -442,6 +468,7 @@ void SaiHostifManager::processHostifEntryDelta( // corresponding sai queue oid for cpu port ? processRxReasonToQueueDelta(controlPlaneDelta); processQueueDelta(controlPlaneDelta); + processVoqDelta(controlPlaneDelta); processQosDelta(controlPlaneDelta); } SaiQueueHandle* SaiHostifManager::getQueueHandleImpl( @@ -488,6 +515,60 @@ SaiHostifManager::getVoqHandle(const SaiQueueConfig& saiQueueConfig) { return getVoqHandleImpl(saiQueueConfig); } +void SaiHostifManager::changeCpuVoq( + const ControlPlane::PortQueues& oldVoqConfig, + const ControlPlane::PortQueues& newVoqConfig) { + cpuPortHandle_->configuredVoqs.clear(); + + auto maxCpuVoqs = getNumVoqs(cfg::PortType::CPU_PORT, cfg::Scope::LOCAL); + for (const auto& newPortVoq : std::as_const(*newVoqConfig)) { + // Voq create or update + if (newPortVoq->getID() > maxCpuVoqs) { + throw FbossError( + "Voq ID : ", + newPortVoq->getID(), + " exceeds max supported CPU queues: ", + maxCpuVoqs); + } + SaiQueueConfig saiVoqConfig = + std::make_pair(newPortVoq->getID(), newPortVoq->getStreamType()); + auto portVoq = newPortVoq->clone(); + auto voqHandle = getVoqHandle(saiVoqConfig); + if (newPortVoq->getMaxDynamicSharedBytes()) { + portVoq->setMaxDynamicSharedBytes( + *newPortVoq->getMaxDynamicSharedBytes()); + } + CHECK_NOTNULL(voqHandle); + XLOG(DBG2) << "set maxDynamicSharedBytes " + << (portVoq->getMaxDynamicSharedBytes().has_value() + ? folly::to(static_cast( + portVoq->getMaxDynamicSharedBytes().value())) + : "None") + << " for cpu voq " << portVoq->getID(); + managerTable_->queueManager().changeQueue(voqHandle, *portVoq); + if (newPortVoq->getName().has_value()) { + auto voqName = *newPortVoq->getName(); + cpuSysPortStats_.queueChanged(newPortVoq->getID(), voqName); + CHECK_NOTNULL(voqHandle); + XLOG(DBG2) << "add configured cpu voq " << newPortVoq->getID(); + cpuPortHandle_->configuredVoqs.push_back(voqHandle); + } + } + for (const auto& oldPortVoq : std::as_const(*oldVoqConfig)) { + auto portVoqIter = std::find_if( + newVoqConfig->cbegin(), + newVoqConfig->cend(), + [&](const std::shared_ptr portVoq) { + return portVoq->getID() == oldPortVoq->getID(); + }); + // Voq Remove + if (portVoqIter == newVoqConfig->cend()) { + cpuSysPortStats_.queueRemoved(oldPortVoq->getID()); + XLOG(DBG2) << "remove configured cpu voq " << oldPortVoq->getID(); + } + } +} + void SaiHostifManager::changeCpuQueue( const ControlPlane::PortQueues& oldQueueConfig, const ControlPlane::PortQueues& newQueueConfig) { @@ -496,7 +577,6 @@ void SaiHostifManager::changeCpuQueue( return; } cpuPortHandle_->configuredQueues.clear(); - cpuPortHandle_->configuredVoqs.clear(); const auto asic = platform_->getAsic(); auto maxCpuQueues = getMaxCpuQueues(); @@ -525,27 +605,10 @@ void SaiHostifManager::changeCpuQueue( newPortQueue->getStreamType(), true /*cpu port*/)); managerTable_->queueManager().changeQueue( queueHandle, *portQueue, nullptr /*swPort*/, cfg::PortType::CPU_PORT); - if (platform_->getAsic()->isSupported( - HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { - auto voqHandle = getVoqHandle(saiQueueConfig); - if (newPortQueue->getMaxDynamicSharedBytes()) { - portQueue->setMaxDynamicSharedBytes( - *newPortQueue->getMaxDynamicSharedBytes()); - } - CHECK_NOTNULL(voqHandle); - managerTable_->queueManager().changeQueue(voqHandle, *portQueue); - } if (newPortQueue->getName().has_value()) { auto queueName = *newPortQueue->getName(); cpuStats_.queueChanged(newPortQueue->getID(), queueName); cpuPortHandle_->configuredQueues.push_back(queueHandle); - if (platform_->getAsic()->isSupported( - HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { - auto voqHandle = getVoqHandle(saiQueueConfig); - cpuSysPortStats_.queueChanged(newPortQueue->getID(), queueName); - CHECK_NOTNULL(voqHandle); - cpuPortHandle_->configuredVoqs.push_back(voqHandle); - } } } for (const auto& oldPortQueue : std::as_const(*oldQueueConfig)) { @@ -561,10 +624,6 @@ void SaiHostifManager::changeCpuQueue( std::make_pair(oldPortQueue->getID(), oldPortQueue->getStreamType()); cpuPortHandle_->queues.erase(saiQueueConfig); cpuStats_.queueRemoved(oldPortQueue->getID()); - if (platform_->getAsic()->isSupported( - HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { - cpuSysPortStats_.queueRemoved(oldPortQueue->getID()); - } } } } @@ -645,8 +704,7 @@ void SaiHostifManager::updateStats(bool updateWatermarks) { cpuQueueStats.queueWatermarkBytes_()->at(queueId2Name.first)); } } - if (platform_->getAsic()->isSupported( - HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { + if (platform_->getAsic()->isSupported(HwAsic::Feature::VOQ)) { const auto& prevPortStats = cpuSysPortStats_.portStats(); HwSysPortStats curPortStats{prevPortStats}; managerTable_->queueManager().updateStats( @@ -688,6 +746,25 @@ QueueConfig SaiHostifManager::getQueueSettings() const { return filteredQueueConfig; } +QueueConfig SaiHostifManager::getVoqSettings() const { + if (!cpuPortHandle_) { + return QueueConfig{}; + } + auto voqConfig = + managerTable_->queueManager().getQueueSettings(cpuPortHandle_->voqs); + auto maxCpuVoqs = getNumVoqs(cfg::PortType::CPU_PORT, cfg::Scope::LOCAL); + QueueConfig filteredVoqConfig; + // Prepare voq config only upto max CPU voqs + std::copy_if( + voqConfig.begin(), + voqConfig.end(), + std::back_inserter(filteredVoqConfig), + [maxCpuVoqs](const auto& portVoq) { + return portVoq->getID() < maxCpuVoqs; + }); + return filteredVoqConfig; +} + SaiHostifTrapHandle* SaiHostifManager::getHostifTrapHandleImpl( cfg::PacketRxReason rxReason) const { auto itr = handles_.find(rxReason); diff --git a/fboss/agent/hw/sai/switch/SaiHostifManager.h b/fboss/agent/hw/sai/switch/SaiHostifManager.h index c9de090aaebda..9fa45de9796fb 100644 --- a/fboss/agent/hw/sai/switch/SaiHostifManager.h +++ b/fboss/agent/hw/sai/switch/SaiHostifManager.h @@ -102,6 +102,7 @@ class SaiHostifManager { void updateStats(bool updateWatermarks = false); HwPortStats getCpuPortStats() const; QueueConfig getQueueSettings() const; + QueueConfig getVoqSettings() const; const HwCpuFb303Stats& getCpuFb303Stats() const { return cpuStats_; } @@ -123,6 +124,7 @@ class SaiHostifManager { void setCpuSystemPortQosPolicy(QosMapSaiId tcToQueue); std::shared_ptr ensureHostifTrapGroup(uint32_t queueId); void processQueueDelta(const DeltaValue& delta); + void processVoqDelta(const DeltaValue& delta); void processRxReasonToQueueDelta(const DeltaValue& delta); void processQosDelta(const DeltaValue& delta); @@ -132,6 +134,9 @@ class SaiHostifManager { void changeCpuQueue( const ControlPlane::PortQueues& oldQueueConfig, const ControlPlane::PortQueues& newQueueConfig); + void changeCpuVoq( + const ControlPlane::PortQueues& oldQueueConfig, + const ControlPlane::PortQueues& newQueueConfig); SaiQueueHandle* getQueueHandleImpl( const SaiQueueConfig& saiQueueConfig) const; SaiQueueHandle* getVoqHandleImpl(const SaiQueueConfig& saiQueueConfig) const; diff --git a/fboss/agent/hw/sai/switch/SaiInSegEntryManager.cpp b/fboss/agent/hw/sai/switch/SaiInSegEntryManager.cpp index 25eb80aafda7f..dbc540ec74ba9 100644 --- a/fboss/agent/hw/sai/switch/SaiInSegEntryManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiInSegEntryManager.cpp @@ -9,7 +9,6 @@ #include "fboss/agent/hw/sai/switch/SaiSwitchManager.h" #include "fboss/agent/FbossError.h" -#include "fboss/agent/state/DeltaFunctions.h" #include "fboss/agent/state/LabelForwardingAction.h" namespace { diff --git a/fboss/agent/hw/sai/switch/SaiManagerTable.cpp b/fboss/agent/hw/sai/switch/SaiManagerTable.cpp index 0b4db2566b03f..724994c2f0d5b 100644 --- a/fboss/agent/hw/sai/switch/SaiManagerTable.cpp +++ b/fboss/agent/hw/sai/switch/SaiManagerTable.cpp @@ -198,6 +198,11 @@ void SaiManagerTable::reset(bool skipSwitchManager) { hostifManager_.reset(); wredManager_.reset(); +// CSP CS00011823810 +#if !defined(BRCM_SAI_SDK_XGS_AND_DNX) + tamManager_.reset(); +#endif + // ports may be referenced in acls, reset ports after acls systemPortManager_.reset(); portManager_.reset(); @@ -206,10 +211,6 @@ void SaiManagerTable::reset(bool skipSwitchManager) { qosMapManager_.reset(); bufferManager_.reset(); - // CSP CS00011823810 -#if !defined(BRCM_SAI_SDK_XGS_AND_DNX) - tamManager_.reset(); -#endif tunnelManager_.reset(); queueManager_.reset(); routeManager_.reset(); diff --git a/fboss/agent/hw/sai/switch/SaiMirrorManager.cpp b/fboss/agent/hw/sai/switch/SaiMirrorManager.cpp index d87fcfe2a6e98..e0d343421886d 100644 --- a/fboss/agent/hw/sai/switch/SaiMirrorManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiMirrorManager.cpp @@ -25,8 +25,14 @@ namespace facebook::fboss { SaiMirrorHandle::SaiMirror SaiMirrorManager::addNodeSpan( sai_object_id_t monitorPort) { + std::optional tcBufferLimit; +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + // TODO: Fix this to be picked up from eventor VoQ config. + // For now, defaulting to 1M. + tcBufferLimit = 1000000; +#endif SaiLocalMirrorTraits::AdapterHostKey k{ - SAI_MIRROR_SESSION_TYPE_LOCAL, monitorPort}; + SAI_MIRROR_SESSION_TYPE_LOCAL, monitorPort, tcBufferLimit}; SaiLocalMirrorTraits::CreateAttributes attributes = k; auto& store = saiStore_->get(); return store.setObject(k, attributes); @@ -39,6 +45,13 @@ SaiMirrorHandle::SaiMirror SaiMirrorManager::addNodeErSpan( auto headerVersion = mirrorTunnel.srcIp.isV4() ? 4 : 6; auto truncateSize = mirror->getTruncate() ? platform_->getAsic()->getMirrorTruncateSize() : 0; + std::optional + tcBufferLimit; +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + // TODO: Fix this to be picked up from eventor VoQ config. + // For now, defaulting to 1M. + tcBufferLimit = 1000000; +#endif SaiEnhancedRemoteMirrorTraits::CreateAttributes attributes{ SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE, monitorPort, @@ -52,7 +65,8 @@ SaiMirrorHandle::SaiMirror SaiMirrorManager::addNodeErSpan( headerVersion, mirrorTunnel.ttl, truncateSize, - mirror->getSamplingRate()}; + mirror->getSamplingRate(), + tcBufferLimit}; SaiEnhancedRemoteMirrorTraits::AdapterHostKey k{ SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE, monitorPort, @@ -70,7 +84,7 @@ SaiMirrorHandle::SaiMirror SaiMirrorManager::addNodeSflow( auto truncateSize = mirror->getTruncate() ? platform_->getAsic()->getMirrorTruncateSize() : 0; std::optional tcBufferLimit; -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) // TODO: Fix this to be picked up from eventor VoQ config. // For now, defaulting to 1M. tcBufferLimit = 1000000; diff --git a/fboss/agent/hw/sai/switch/SaiNeighborManager.cpp b/fboss/agent/hw/sai/switch/SaiNeighborManager.cpp index 23e30c348b61b..370bf77b45f11 100644 --- a/fboss/agent/hw/sai/switch/SaiNeighborManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiNeighborManager.cpp @@ -21,7 +21,6 @@ #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/platforms/sai/SaiPlatform.h" #include "fboss/agent/state/ArpEntry.h" -#include "fboss/agent/state/DeltaFunctions.h" #include "fboss/agent/state/NdpEntry.h" #include "folly/IPAddress.h" @@ -247,6 +246,9 @@ SaiNeighborEntry::SaiNeighborEntry( isLocal, noHostRoute); break; + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + throw FbossError("Port router interface is not yet supported"); } } diff --git a/fboss/agent/hw/sai/switch/SaiPortManager.cpp b/fboss/agent/hw/sai/switch/SaiPortManager.cpp index d562a43461b32..a10319c429bcf 100644 --- a/fboss/agent/hw/sai/switch/SaiPortManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiPortManager.cpp @@ -134,8 +134,9 @@ void fillHwPortStats( bool isEtherStatsSupported = platform->getAsic()->isSupported(HwAsic::Feature::SAI_PORT_ETHER_STATS); auto updateInUcastPkts = [&hwPortStats, &portType](uint64_t value) { - if (portType == cfg::PortType::RECYCLE_PORT) { - // RECYCLE port ucast pkts is clear on read on all + if (portType == cfg::PortType::RECYCLE_PORT || + portType == cfg::PortType::EVENTOR_PORT) { + // RECYCLE/EVENTOR port ucast pkts is clear on read on all // platforms that have rcy ports setUninitializedStatsToZero(*hwPortStats.inUnicastPkts_()); hwPortStats.inUnicastPkts_() = *hwPortStats.inUnicastPkts_() + value; @@ -143,6 +144,15 @@ void fillHwPortStats( hwPortStats.inUnicastPkts_() = value; } }; + auto updateOutUcastPkts = [&hwPortStats, &portType](uint64_t value) { + if (portType == cfg::PortType::EVENTOR_PORT) { + // EVENTOR port ucast pkts is clear on read + setUninitializedStatsToZero(*hwPortStats.outUnicastPkts_()); + hwPortStats.outUnicastPkts_() = *hwPortStats.outUnicastPkts_() + value; + } else { + hwPortStats.outUnicastPkts_() = value; + } + }; for (auto counterIdAndValue : counterId2Value) { auto [counterId, value] = counterIdAndValue; switch (counterId) { @@ -186,13 +196,13 @@ void fillHwPortStats( if (!isEtherStatsSupported) { // when port ether stats is supported, skip updating as ether // counterpart stats will populate them - hwPortStats.outUnicastPkts_() = value; + updateOutUcastPkts(value); } break; case SAI_PORT_STAT_ETHER_STATS_TX_NO_ERRORS: if (isEtherStatsSupported) { // when port ether stats is supported, update - hwPortStats.outUnicastPkts_() = value; + updateOutUcastPkts(value); } break; case SAI_PORT_STAT_IF_OUT_MULTICAST_PKTS: @@ -307,6 +317,11 @@ void fillHwPortStats( case SAI_PORT_STAT_IF_IN_LINK_DOWN_CELL_DROP: hwPortStats.fabricLinkDownDroppedCells_() = value; break; +#endif +#if defined(BRCM_SAI_SDK_DNX_GTE_12_0) + case SAI_PORT_STAT_FAST_LLFC_TRIGGER_STATUS: + hwPortStats.linkLayerFlowControlWatermark_() = value; + break; #endif default: auto configuredDebugCounters = @@ -1822,6 +1837,14 @@ void SaiPortManager::updateStats( curPortStats.timestamp_() = now.count(); handle->port->updateStats(supportedStats(portId), SAI_STATS_MODE_READ); +#if defined(BRCM_SAI_SDK_DNX_GTE_12_0) + if (updateWatermarks && + platform_->getAsic()->isSupported(HwAsic::Feature::FAST_LLFC_COUNTER)) { + handle->port->updateStats( + {SAI_PORT_STAT_FAST_LLFC_TRIGGER_STATUS}, + SAI_STATS_MODE_READ_AND_CLEAR); + } +#endif bool updateFecStats = false; auto lastFecReadTimeIt = lastFecCounterReadTime_.find(portId); @@ -2977,4 +3000,61 @@ void SaiPortManager::updateConditionalEntropySeed(PortID portID, uint32_t seed) SaiPortTraits::Attributes::CondEntropyRehashSeed{seed}); #endif } + +void SaiPortManager::changePortFlowletConfig( + const std::shared_ptr& oldPort, + const std::shared_ptr& newPort) { + if (!FLAGS_flowletSwitchingEnable || + !platform_->getAsic()->isSupported(HwAsic::Feature::FLOWLET)) { + return; + } + + auto portHandle = getPortHandle(newPort->getID()); + if (!portHandle) { + throw FbossError( + "Cannot change flowlet cfg on non existent port: ", newPort->getID()); + } + + if (oldPort->getPortFlowletConfig() != newPort->getPortFlowletConfig()) { +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + // SaiPortTraits::Attributes::ArsEnable arsEnable{false}; + bool arsEnable = false; + uint16_t scalingFactor = 0; + uint16_t loadPastWeight = 0; + uint16_t loadFutureWeight = 0; + auto newPortFlowletCfg = newPort->getPortFlowletConfig(); + if (newPortFlowletCfg.has_value()) { + /* + * Sum of old and new weights cannot go beyond 100 + * This is not a problem with native impl since both weights are applied + * with a single API call. An example transtion is + * Load : 60 -> 70 + * Queue : 40 -> 30 + * (70 + 40) > 100 + * Reset both the weights in the SDK once and re-apply new values below + */ + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsPortLoadPastWeight{0}); + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsPortLoadFutureWeight{0}); + + auto newPortFlowletCfgPtr = newPortFlowletCfg.value(); + arsEnable = true; + scalingFactor = newPortFlowletCfgPtr->getScalingFactor(); + loadPastWeight = newPortFlowletCfgPtr->getLoadWeight(); + loadFutureWeight = newPortFlowletCfgPtr->getQueueWeight(); + } + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsEnable{arsEnable}); + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsPortLoadScalingFactor{scalingFactor}); + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsPortLoadPastWeight{loadPastWeight}); + portHandle->port->setOptionalAttribute( + SaiPortTraits::Attributes::ArsPortLoadFutureWeight{loadFutureWeight}); +#endif + } else { + XLOG(DBG4) << "Port flowlet setting unchanged for " << newPort->getName(); + } +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/SaiPortManager.h b/fboss/agent/hw/sai/switch/SaiPortManager.h index 43a84b8f4d2e5..16827826a4e4c 100644 --- a/fboss/agent/hw/sai/switch/SaiPortManager.h +++ b/fboss/agent/hw/sai/switch/SaiPortManager.h @@ -433,6 +433,9 @@ class SaiPortManager { void createSerdesWithZeroPreemphasis( SaiPortHandle* portHandle, const std::vector& pinConfigs); + void changePortFlowletConfig( + const std::shared_ptr& oldPort, + const std::shared_ptr& newPort); SaiStore* saiStore_; SaiManagerTable* managerTable_; diff --git a/fboss/agent/hw/sai/switch/SaiQosMapManager.cpp b/fboss/agent/hw/sai/switch/SaiQosMapManager.cpp index 98784142b8399..3a43df99654bb 100644 --- a/fboss/agent/hw/sai/switch/SaiQosMapManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiQosMapManager.cpp @@ -20,7 +20,6 @@ #include "fboss/agent/hw/sai/switch/SaiSystemPortManager.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/platforms/sai/SaiPlatform.h" -#include "fboss/agent/state/SwitchState.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/sai/switch/SaiQueueManager.cpp b/fboss/agent/hw/sai/switch/SaiQueueManager.cpp index db8613884ec1a..9a309b56bc86b 100644 --- a/fboss/agent/hw/sai/switch/SaiQueueManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiQueueManager.cpp @@ -245,7 +245,8 @@ void SaiQueueManager::changeQueueBufferProfile( void SaiQueueManager::changeQueueScheduler( SaiQueueHandle* queueHandle, - const PortQueue& newPortQueue) { + const PortQueue& newPortQueue, + const Port* swPort) { std::shared_ptr newScheduler; if (newPortQueue.getScheduling() != cfg::QueueScheduling::INTERNAL) { newScheduler = @@ -256,6 +257,16 @@ void SaiQueueManager::changeQueueScheduler( queueHandle->queue->setOptionalAttribute( SaiQueueTraits::Attributes::SchedulerProfileId( newScheduler ? newScheduler->adapterKey() : SAI_NULL_OBJECT_ID)); + if (platform_->getAsic()->getAsicType() == + cfg::AsicType::ASIC_TYPE_CHENAB) { + // Signal to SAI to use non-hierarchial QoS by setting the parent + // scheduler node to the port. + auto portHandle = + managerTable_->portManager().getPortHandle(swPort->getID()); + queueHandle->queue->setOptionalAttribute( + SaiQueueTraits::Attributes::ParentSchedulerNode( + portHandle->port->adapterKey())); + } // Update scheduler reference after we have set the queue // scheduler attribute, else if this is the last queue // referring to this scheduler, we will try to delete it @@ -309,7 +320,7 @@ void SaiQueueManager::changeQueue( if ((queueType != SAI_QUEUE_TYPE_UNICAST_VOQ) && (queueType != SAI_QUEUE_TYPE_MULTICAST_VOQ)) { if (platform_->getAsic()->isSupported(HwAsic::Feature::L3_QOS)) { - changeQueueScheduler(queueHandle, newPortQueue); + changeQueueScheduler(queueHandle, newPortQueue, swPort); } } changeQueueEcnWred(queueHandle, newPortQueue); diff --git a/fboss/agent/hw/sai/switch/SaiQueueManager.h b/fboss/agent/hw/sai/switch/SaiQueueManager.h index 031328e2d84e5..ffa8836943436 100644 --- a/fboss/agent/hw/sai/switch/SaiQueueManager.h +++ b/fboss/agent/hw/sai/switch/SaiQueueManager.h @@ -75,7 +75,8 @@ class SaiQueueManager { const PortQueue& newPortQueue); void changeQueueScheduler( SaiQueueHandle* queueHandle, - const PortQueue& newPortQueue); + const PortQueue& newPortQueue, + const Port* swPort); void changeQueueDeadlockEnable( SaiQueueHandle* queueHandle, const Port* swPort); diff --git a/fboss/agent/hw/sai/switch/SaiRouteManager.cpp b/fboss/agent/hw/sai/switch/SaiRouteManager.cpp index 83e2832b551f4..964d8e67ad593 100644 --- a/fboss/agent/hw/sai/switch/SaiRouteManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiRouteManager.cpp @@ -20,6 +20,7 @@ #include "fboss/agent/hw/sai/switch/SaiVirtualRouterManager.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" +#include "fboss/agent/SwitchInfoUtils.h" #include "fboss/agent/platforms/sai/SaiPlatform.h" #include @@ -166,9 +167,19 @@ void SaiRouteManager::addOrUpdateRoute( std::shared_ptr counterHandle; if (newRoute->getClassID()) { metadata = static_cast(newRoute->getClassID().value()); +#if defined(BRCM_SAI_SDK_XGS) + // TODO(daiweix): remove this #if defined(BRCM_SAI_SDK_XGS) after + // support classid_for_unresolved_routes feature on XGS and + // explicitly program default class id value 0 if not specified. + // For now, keep the old behavior. } else if (oldRoute && oldRoute->getClassID()) { metadata = 0; } +#else + } else { + metadata = 0; + } +#endif counterHandle = getCounterHandleForRoute(newRoute, oldRoute, counterID); if (fwd.getAction() == RouteForwardAction::NEXTHOPS) { @@ -191,10 +202,10 @@ void SaiRouteManager::addOrUpdateRoute( * TODO - filter these connected routes in switchstate */ if (platform_->getAsic()->getSwitchType() == cfg::SwitchType::VOQ) { - auto systemPortRange = platform_->getAsic()->getSystemPortRange(); - CHECK(systemPortRange); - if (interfaceId < *systemPortRange->minimum() || - interfaceId > *systemPortRange->maximum()) { + const auto& systemPortRanges = + platform_->getAsic()->getSystemPortRanges(); + CHECK(!systemPortRanges.systemPortRanges()->empty()); + if (!withinRange(systemPortRanges, interfaceId)) { packetAction = SAI_PACKET_ACTION_DROP; #if SAI_API_VERSION >= SAI_VERSION(1, 10, 0) attributes = SaiRouteTraits::CreateAttributes{ @@ -727,6 +738,29 @@ void ManagedRouteNextHop::setMetadata( metadata_ = metadata; } +template +ManagedRouteNextHop::~ManagedRouteNextHop() { + auto route = routeManager_->getRouteObject(routeKey_); + if (!route || !routeMetadataSupported_) { + return; + } + auto& api = SaiApiTable::getInstance()->routeApi(); + SaiRouteTraits::Attributes::Metadata currentMetadata = routeMetadataSupported_ + ? api.getAttribute( + route->adapterKey(), SaiRouteTraits::Attributes::Metadata{}) + : 0; + auto attributes = route->attributes(); + auto& metadata = + std::get>(attributes); + metadata = metadata_; + route->setAttributes(attributes); + updateMetadata(currentMetadata); + XLOG(DBG2) << "ManagedRouteNextHop beforeDestroy: " << routeKey_.toString() + << " metadata: " + << (metadata.has_value() ? std::to_string(metadata.value().value()) + : "None"); +} + template class ManagedRouteNextHop; template class ManagedRouteNextHop; diff --git a/fboss/agent/hw/sai/switch/SaiRouteManager.h b/fboss/agent/hw/sai/switch/SaiRouteManager.h index a031887a02663..8b05128352ec1 100644 --- a/fboss/agent/hw/sai/switch/SaiRouteManager.h +++ b/fboss/agent/hw/sai/switch/SaiRouteManager.h @@ -61,6 +61,7 @@ class ManagedRouteNextHop std::optional getMetadata() const; void setMetadata( std::optional metadata); + ~ManagedRouteNextHop() override; private: void updateMetadata( diff --git a/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.cpp b/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.cpp index 609afb838fb23..cdec5a49c0696 100644 --- a/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.cpp @@ -103,6 +103,7 @@ RouterInterfaceSaiId SaiRouterInterfaceManager::addOrUpdateVlanRouterInterface( RouterInterfaceSaiId SaiRouterInterfaceManager::addOrUpdatePortRouterInterface( const std::shared_ptr& swInterface, bool isLocal) { + // TODO: Add support for port router interface CHECK(swInterface->getType() == cfg::InterfaceType::SYSTEM_PORT); // compute the virtual router id for this router interface RouterID routerId = swInterface->getRouterID(); @@ -190,6 +191,8 @@ RouterInterfaceSaiId SaiRouterInterfaceManager::addOrUpdateRouterInterface( return addOrUpdateVlanRouterInterface(swInterface, isLocal); case cfg::InterfaceType::SYSTEM_PORT: return addOrUpdatePortRouterInterface(swInterface, isLocal); + case cfg::InterfaceType::PORT: + throw FbossError("Port router interface is not yet supported"); } // Should never get here throw FbossError("Unknown interface type: ", swInterface->getType()); diff --git a/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.h b/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.h index 92d631a7320ba..f77a08b1f7938 100644 --- a/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.h +++ b/fboss/agent/hw/sai/switch/SaiRouterInterfaceManager.h @@ -52,6 +52,7 @@ struct SaiRouterInterfaceHandle { return cfg::InterfaceType::VLAN; }, [](const std::shared_ptr& handle) { + // TODO(Chenab): Support port router interface return cfg::InterfaceType::SYSTEM_PORT; }), routerInterface); diff --git a/fboss/agent/hw/sai/switch/SaiSwitch.cpp b/fboss/agent/hw/sai/switch/SaiSwitch.cpp index b6cbb8887f5d9..2ce4847997417 100644 --- a/fboss/agent/hw/sai/switch/SaiSwitch.cpp +++ b/fboss/agent/hw/sai/switch/SaiSwitch.cpp @@ -86,7 +86,7 @@ extern "C" { #include -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) #include #ifndef IS_OSS_BRCM_SAI #include @@ -1055,6 +1055,14 @@ std::shared_ptr SaiSwitch::stateChangedImplLocked( &SaiMirrorManager::addNode, &SaiMirrorManager::removeMirror); + processDelta( + delta.getMirrorOnDropReportsDelta(), + managerTable_->tamManager(), + lockPolicy, + &SaiTamManager::changeMirrorOnDropReport, + &SaiTamManager::addMirrorOnDropReport, + &SaiTamManager::removeMirrorOnDropReport); + processDelta( delta.getIpTunnelsDelta(), managerTable_->tunnelManager(), @@ -1107,8 +1115,8 @@ std::shared_ptr SaiSwitch::stateChangedImplLocked( // remove default acl table and add a new one. table removal should // clear acl entries too managerTable_->switchManager().resetIngressAcl(); - managerTable_->aclTableManager().removeDefaultAclTable(); - managerTable_->aclTableManager().addDefaultAclTable(); + managerTable_->aclTableManager().removeDefaultIngressAclTable(); + managerTable_->aclTableManager().addDefaultIngressAclTable(); managerTable_->switchManager().setIngressAcl(); } @@ -1119,7 +1127,7 @@ std::shared_ptr SaiSwitch::stateChangedImplLocked( &SaiAclTableManager::changedAclEntry, &SaiAclTableManager::addAclEntry, &SaiAclTableManager::removeAclEntry, - kAclTable1); + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); } processPfcWatchdogGlobalDelta(delta, lockPolicy); @@ -1330,11 +1338,10 @@ void SaiSwitch::processSwitchSettingsChangeSansDrainedEntryLocked( } { - const auto oldVal = oldSwitchSettings->getReachabilityGroupListSize(); - const auto newVal = newSwitchSettings->getReachabilityGroupListSize(); + auto oldVal = oldSwitchSettings->getReachabilityGroups(); + auto newVal = newSwitchSettings->getReachabilityGroups(); if (oldVal != newVal) { - managerTable_->switchManager().setReachabilityGroupList( - newVal.has_value() ? newVal.value() : 0); + managerTable_->switchManager().setReachabilityGroupList(newVal); } } @@ -1357,6 +1364,38 @@ void SaiSwitch::processSwitchSettingsChangeSansDrainedEntryLocked( newSramGlobalXonTh.value_or(0)); } } + { + const auto oldLinkFlowControlCreditTh = + oldSwitchSettings->getLinkFlowControlCreditThreshold(); + const auto newLinkFlowControlCreditTh = + newSwitchSettings->getLinkFlowControlCreditThreshold(); + if (oldLinkFlowControlCreditTh != newLinkFlowControlCreditTh) { + managerTable_->switchManager().setLinkFlowControlCreditTh( + newLinkFlowControlCreditTh.value_or(0)); + } + } + { + const auto oldVoqDramBoundTh = + oldSwitchSettings->getVoqDramBoundThreshold(); + const auto newVoqDramBoundTh = + newSwitchSettings->getVoqDramBoundThreshold(); + if (oldVoqDramBoundTh != newVoqDramBoundTh) { + managerTable_->switchManager().setVoqDramBoundTh( + newVoqDramBoundTh.value_or(0)); + } + } + + { + const auto oldConditionalEntropyRehashPeriodUS = + oldSwitchSettings->getConditionalEntropyRehashPeriodUS(); + const auto newConditionalEntropyRehashPeriodUS = + newSwitchSettings->getConditionalEntropyRehashPeriodUS(); + if (oldConditionalEntropyRehashPeriodUS != + newConditionalEntropyRehashPeriodUS) { + managerTable_->switchManager().setConditionalEntropyRehashPeriodUS( + newConditionalEntropyRehashPeriodUS.value_or(0)); + } + } } template @@ -1831,6 +1870,10 @@ void SaiSwitch::updatePcsInfo( *lastPhyInfo.state()->timeCollected(), /* timeDeltaInSeconds */ fecMode, /* operational FecMode */ speed /* operational Speed */); + utility::updateFecTail( + rsFec, /* current RsFecInfo to update */ + lastRsFec /* previous RsFecInfo */ + ); pcsStats.rsFec() = rsFec; sideStats.pcs() = pcsStats; } @@ -2154,21 +2197,25 @@ void SaiSwitch::txReadyStatusChangeCallbackTopHalf(SwitchSaiId switchId) { return; } - // When txReadyStatusChangeCallbackBottomHalf runs, it queries for + // When txReadyStatusChangeOrFwIsolateCallbackBottomHalf runs, it queries for // active/inactive link status of all the links at that time. - // Thus, if we txReadyStatusChangeCallbackBottomHalf is already queued for - // run, we can skip scheduling another. - // Note: txReadyStatusChangeCallbackBottomHalf sets changePending to false - // before querying link active/inactive status, so avoid race. + // Thus, if we txReadyStatusChangeOrFwIsolateCallbackBottomHalf is already + // queued for run, we can skip scheduling another. + // Note: txReadyStatusChangeOrFwIsolateCallbackBottomHalf sets changePending + // to false before querying link active/inactive status, so avoid race. auto changePending = txReadyStatusChangePending_.wlock(); if (!(*changePending)) { *changePending = true; txReadyStatusChangeBottomHalfEventBase_.runInFbossEventBaseThread( - [this]() mutable { txReadyStatusChangeCallbackBottomHalf(); }); + [this]() mutable { + txReadyStatusChangeOrFwIsolateCallbackBottomHalf(); + }); } } -void SaiSwitch::txReadyStatusChangeCallbackBottomHalf() { +void SaiSwitch::txReadyStatusChangeOrFwIsolateCallbackBottomHalf( + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) { #if SAI_API_VERSION >= SAI_VERSION(1, 13, 0) { auto changePending = txReadyStatusChangePending_.wlock(); @@ -2201,7 +2248,7 @@ void SaiSwitch::txReadyStatusChangeCallbackBottomHalf() { return; } - auto numActiveFabricLinks = 0, numInactiveFabricLinks = 0; + auto numActiveFabricPorts = 0, numInactiveFabricPorts = 0; std::map port2IsActive; for (auto tuple : boost::combine(adapterKeys, txReadyStatusesGot)) { auto portSaiId = tuple.get<0>(); @@ -2219,18 +2266,25 @@ void SaiSwitch::txReadyStatusChangeCallbackBottomHalf() { port2IsActive[portID] = isActive; if (isActive) { - numActiveFabricLinks++; + numActiveFabricPorts++; } else { - numInactiveFabricLinks++; + numInactiveFabricPorts++; } } - XLOG(DBG2) - << "TX Ready status changed callback received:: NumActiveFabricLinks: " - << numActiveFabricLinks - << " NumInactiveFabricLinks: " << numInactiveFabricLinks; + std::string logPrefix = + fwIsolated ? "Firmware Isolate" : "TX Ready status change"; + XLOG(DBG2) << logPrefix << " callback received:: NumActiveFabricPorts: " + << numActiveFabricPorts + << " NumInactiveFabricPorts: " << numInactiveFabricPorts + << " NumActiveFabricPortsAtFwIsolate: " + << (numActiveFabricPortsAtFwIsolate.has_value() + ? folly::to( + numActiveFabricPortsAtFwIsolate.value()) + : "--"); - callback_->linkActiveStateChanged(port2IsActive); + callback_->linkActiveStateChangedOrFwIsolated( + port2IsActive, fwIsolated, numActiveFabricPortsAtFwIsolate); #endif } @@ -2342,6 +2396,8 @@ std::shared_ptr SaiSwitch::getColdBootSwitchState() { auto cpu = std::make_shared(); auto cpuQueues = managerTable_->hostifManager().getQueueSettings(); cpu->resetQueues(cpuQueues); + auto cpuVoqs = managerTable_->hostifManager().getVoqSettings(); + cpu->resetVoqs(cpuVoqs); auto multiSwitchControlPlane = std::make_shared(); multiSwitchControlPlane->addNode( scopeResolver->scope(cpu).matcherString(), cpu); @@ -2457,13 +2513,12 @@ HwInitResult SaiSwitch::initLocked( adapterKeys2AdapterHostKeysJson.get()); if (bootType_ != BootType::WARM_BOOT) { if (getSwitchType() == cfg::SwitchType::FABRIC) { - // 11.0 is not honoring isolate attribute during fabric switch create - // We still want the switch to be isolated before we start enabling ports - // after cold boot. This is tracked in CS00012372888. - // TODO: get rid of this call once CS00012372888 is resolved auto& switchApi = SaiApiTable::getInstance()->switchApi(); - switchApi.setAttribute( - saiSwitchId_, SaiSwitchTraits::Attributes::SwitchIsolate{true}); + auto isolated = switchApi.getAttribute( + saiSwitchId_, SaiSwitchTraits::Attributes::SwitchIsolate{}); + XLOG(DBG2) << " Fabric switch on cold boot came up isolated : " + << (isolated ? "yes" : "no"); + CHECK(isolated); } ret.switchState = getColdBootSwitchState(); ret.switchState->publish(); @@ -2562,7 +2617,7 @@ void SaiSwitch::initStoreAndManagersLocked( std::make_shared(cfg::AclStage::INGRESS); managerTable_->aclTableGroupManager().addAclTableGroup(aclTableGroup); - managerTable_->aclTableManager().addDefaultAclTable(); + managerTable_->aclTableManager().addDefaultIngressAclTable(); } } @@ -2665,7 +2720,7 @@ void SaiSwitch::syncLinkActiveStates() { if (platform_->getAsic()->isSupported(HwAsic::Feature::FABRIC_PORTS)) { std::lock_guard lock(saiSwitchMutex_); txReadyStatusChangeBottomHalfEventBase_.runInFbossEventBaseThread( - [=, this]() { txReadyStatusChangeCallbackBottomHalf(); }); + [=, this]() { txReadyStatusChangeOrFwIsolateCallbackBottomHalf(); }); } } @@ -2704,7 +2759,7 @@ void SaiSwitch::initTxReadyStatusChangeLocked( * callback to guarantee that we don't miss any callbacks and those are * always ordered. */ - txReadyStatusChangeCallbackBottomHalf(); + txReadyStatusChangeOrFwIsolateCallbackBottomHalf(); }); #endif } @@ -3169,7 +3224,8 @@ bool SaiSwitch::isValidStateUpdateLocked( }); auto qualifiersSupported = - managerTable_->aclTableManager().getSupportedQualifierSet(); + managerTable_->aclTableManager().getSupportedQualifierSet( + cfg::AclStage::INGRESS); DeltaFunctions::forEachChanged( delta.getAclsDelta(), [qualifiersSupported, &isValid]( @@ -3830,7 +3886,7 @@ std::string SaiSwitch::listObjects( objTypes.push_back(SAI_OBJECT_TYPE_TAM_TRANSPORT); objTypes.push_back(SAI_OBJECT_TYPE_TAM_REPORT); objTypes.push_back(SAI_OBJECT_TYPE_TAM_EVENT_ACTION); -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) objTypes.push_back(static_cast( SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP)); #endif @@ -4203,7 +4259,9 @@ std::shared_ptr SaiSwitch::reconstructMultiSwitchAclMap() for (const auto& [name, aclEntry] : std::as_const(*aclMap)) { auto reconstructedAclEntry = managerTable_->aclTableManager().reconstructAclEntry( - kAclTable1, name, aclEntry->getPriority()); + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(), + name, + aclEntry->getPriority()); reconstructedMultiSwitchAclMap->addNode( reconstructedAclEntry, HwSwitchMatcher(matcher)); } diff --git a/fboss/agent/hw/sai/switch/SaiSwitch.h b/fboss/agent/hw/sai/switch/SaiSwitch.h index 1692fd583e10c..347c50c38eed9 100644 --- a/fboss/agent/hw/sai/switch/SaiSwitch.h +++ b/fboss/agent/hw/sai/switch/SaiSwitch.h @@ -386,7 +386,10 @@ class SaiSwitch : public HwSwitch { void linkStateChangedCallbackBottomHalf( std::vector data); - void txReadyStatusChangeCallbackBottomHalf(); + void txReadyStatusChangeOrFwIsolateCallbackBottomHalf( + bool fwIsolated = false, + const std::optional& numActiveFabricPortsAtFwIsolate = + std::nullopt); void switchReachabilityChangeBottomHalf(); std::set getFabricReachabilityPortIds( const std::vector& switchIdAndFabricPortSaiIds) const; diff --git a/fboss/agent/hw/sai/switch/SaiSwitchManager.cpp b/fboss/agent/hw/sai/switch/SaiSwitchManager.cpp index 13639e35617ce..0bcf6072276ec 100644 --- a/fboss/agent/hw/sai/switch/SaiSwitchManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiSwitchManager.cpp @@ -768,6 +768,35 @@ const std::vector& SaiSwitchManager::supportedDropStats() const { return stats; } +const std::vector& SaiSwitchManager::supportedErrorStats() + const { + static std::vector stats; + if (stats.size()) { + // initialized + return stats; + } + if (platform_->getAsic()->isSupported( + HwAsic::Feature::EGRESS_CELL_ERROR_STATS)) { + stats.insert( + stats.end(), + SaiSwitchTraits::egressFabricCellError().begin(), + SaiSwitchTraits::egressFabricCellError().end()); + stats.insert( + stats.end(), + SaiSwitchTraits::egressNonFabricCellError().begin(), + SaiSwitchTraits::egressNonFabricCellError().end()); + stats.insert( + stats.end(), + SaiSwitchTraits::egressNonFabricCellUnpackError().begin(), + SaiSwitchTraits::egressNonFabricCellUnpackError().end()); + stats.insert( + stats.end(), + SaiSwitchTraits::egressParityCellError().begin(), + SaiSwitchTraits::egressParityCellError().end()); + } + return stats; +} + const std::vector& SaiSwitchManager::supportedDramStats() const { static std::vector stats; if (stats.size()) { @@ -818,6 +847,19 @@ const std::vector& SaiSwitchManager::supportedWatermarkStats() SaiSwitchTraits::egressCoreBufferWatermarkBytes().begin(), SaiSwitchTraits::egressCoreBufferWatermarkBytes().end()); } + if (platform_->getAsic()->isSupported( + HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK)) { + stats.insert( + stats.end(), + SaiSwitchTraits::sramMinBufferWatermarkBytes().begin(), + SaiSwitchTraits::sramMinBufferWatermarkBytes().end()); + } + if (platform_->getAsic()->isSupported(HwAsic::Feature::FDR_FIFO_WATERMARK)) { + stats.insert( + stats.end(), + SaiSwitchTraits::fdrFifoWatermarkBytes().begin(), + SaiSwitchTraits::fdrFifoWatermarkBytes().end()); + } return stats; } @@ -906,6 +948,28 @@ void SaiSwitchManager::updateStats(bool updateWatermarks) { switchDropStats_.ingressPacketPipelineRejectDrops() = switchDropStats_.ingressPacketPipelineRejectDrops().value_or(0) + dropStats.ingressPacketPipelineRejectDrops().value_or(0); + } + auto errorDropStats = supportedErrorStats(); + if (errorDropStats.size()) { + switch_->updateStats(errorDropStats, SAI_STATS_MODE_READ); + HwSwitchDropStats errorStats; + // Fill error stats and update drops stats + fillHwSwitchErrorStats(switch_->getStats(errorDropStats), errorStats); + switchDropStats_.rqpFabricCellCorruptionDrops() = + switchDropStats_.rqpFabricCellCorruptionDrops().value_or(0) + + errorStats.rqpFabricCellCorruptionDrops().value_or(0); + switchDropStats_.rqpNonFabricCellCorruptionDrops() = + switchDropStats_.rqpNonFabricCellCorruptionDrops().value_or(0) + + errorStats.rqpNonFabricCellCorruptionDrops().value_or(0); + switchDropStats_.rqpNonFabricCellMissingDrops() = + switchDropStats_.rqpNonFabricCellMissingDrops().value_or(0) + + errorStats.rqpNonFabricCellMissingDrops().value_or(0); + switchDropStats_.rqpParityErrorDrops() = + switchDropStats_.rqpParityErrorDrops().value_or(0) + + errorStats.rqpParityErrorDrops().value_or(0); + } + + if (switchDropStats.size() || errorDropStats.size()) { platform_->getHwSwitch()->getSwitchStats()->update(switchDropStats_); } auto switchDramStats = supportedDramStats(); @@ -996,22 +1060,20 @@ void SaiSwitchManager::setLocalCapsuleSwitchIds( SaiSwitchTraits::Attributes::MultiStageLocalSwitchIds{values}); } -void SaiSwitchManager::setReachabilityGroupList(int reachabilityGroupListSize) { +void SaiSwitchManager::setReachabilityGroupList( + const std::vector& reachabilityGroups) { #if defined(BRCM_SAI_SDK_DNX_GTE_12_0) - if (reachabilityGroupListSize > 0) { - std::vector list; - for (int i = 0; i < reachabilityGroupListSize; i++) { - list.push_back(i + 1); - } - switch_->setOptionalAttribute( - SaiSwitchTraits::Attributes::ReachabilityGroupList{list}); - } + std::vector groupList( + reachabilityGroups.begin(), reachabilityGroups.end()); + std::sort(groupList.begin(), groupList.end()); + switch_->setOptionalAttribute( + SaiSwitchTraits::Attributes::ReachabilityGroupList{groupList}); #endif } void SaiSwitchManager::setSramGlobalFreePercentXoffTh( uint8_t sramFreePercentXoffThreshold) { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) switch_->setOptionalAttribute( SaiSwitchTraits::Attributes::SramFreePercentXoffTh{ sramFreePercentXoffThreshold}); @@ -1020,10 +1082,42 @@ void SaiSwitchManager::setSramGlobalFreePercentXoffTh( void SaiSwitchManager::setSramGlobalFreePercentXonTh( uint8_t sramFreePercentXonThreshold) { -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) switch_->setOptionalAttribute( SaiSwitchTraits::Attributes::SramFreePercentXonTh{ sramFreePercentXonThreshold}); #endif } + +void SaiSwitchManager::setLinkFlowControlCreditTh( + uint16_t linkFlowControlThreshold) { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + switch_->setOptionalAttribute( + SaiSwitchTraits::Attributes::FabricCllfcTxCreditTh{ + linkFlowControlThreshold}); +#endif +} + +void SaiSwitchManager::setVoqDramBoundTh(uint32_t dramBoundThreshold) { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) + // There are 3 different types of rate classes available and + // dramBound, upper and lower limits are applied to each of + // those. However, in our case, we just need to set the same + // DRAM bounds value for all the rate classes. + std::vector dramBounds(6, dramBoundThreshold); + switch_->setOptionalAttribute( + SaiSwitchTraits::Attributes::VoqDramBoundTh{dramBounds}); +#endif +} + +void SaiSwitchManager::setConditionalEntropyRehashPeriodUS( + int conditionalEntropyRehashPeriodUS) { + // TODO(zecheng): Update flag when new 12.0 release has the attribute +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + switch_->setOptionalAttribute( + SaiSwitchTraits::Attributes::CondEntropyRehashPeriodUS{ + conditionalEntropyRehashPeriodUS}); +#endif +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/SaiSwitchManager.h b/fboss/agent/hw/sai/switch/SaiSwitchManager.h index 5981a8c9fd1d5..049707163f1c9 100644 --- a/fboss/agent/hw/sai/switch/SaiSwitchManager.h +++ b/fboss/agent/hw/sai/switch/SaiSwitchManager.h @@ -102,9 +102,13 @@ class SaiSwitchManager { } void setLocalCapsuleSwitchIds( const std::map& switchIdToNumCores); - void setReachabilityGroupList(int reachabilityGroupListSize); + void setReachabilityGroupList(const std::vector& reachabilityGroups); void setSramGlobalFreePercentXoffTh(uint8_t sramFreePercentXoffThreshold); void setSramGlobalFreePercentXonTh(uint8_t sramFreePercentXonThreshold); + void setLinkFlowControlCreditTh(uint16_t linkFlowControlThreshold); + void setVoqDramBoundTh(uint32_t dramBoundThreshold); + void setConditionalEntropyRehashPeriodUS( + int conditionalEntropyRehashPeriodUS); private: void programEcmpLoadBalancerParams( @@ -133,6 +137,7 @@ class SaiSwitchManager { const std::vector& supportedDramStats() const; const std::vector& supportedWatermarkStats() const; const std::vector& supportedCreditStats() const; + const std::vector& supportedErrorStats() const; const HwSwitchWatermarkStats getHwSwitchWatermarkStats() const; SaiManagerTable* managerTable_; const SaiPlatform* platform_; @@ -164,5 +169,8 @@ void fillHwSwitchWatermarkStats( void fillHwSwitchCreditStats( const folly::F14FastMap& counterId2Value, HwSwitchCreditStats& hwSwitchCreditStats); +void fillHwSwitchErrorStats( + const folly::F14FastMap& counterId2Value, + HwSwitchDropStats& switchDropStats); void publishSwitchWatermarks(HwSwitchWatermarkStats& watermarkStats); } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/SaiSystemPortManager.cpp b/fboss/agent/hw/sai/switch/SaiSystemPortManager.cpp index 88de0cd22ee22..2718945fbd599 100644 --- a/fboss/agent/hw/sai/switch/SaiSystemPortManager.cpp +++ b/fboss/agent/hw/sai/switch/SaiSystemPortManager.cpp @@ -13,6 +13,7 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/Utils.h" +#include "fboss/agent/VoqUtils.h" #include "fboss/agent/hw/HwSysPortFb303Stats.h" #include "fboss/agent/hw/gen-cpp2/hardware_stats_constants.h" #include "fboss/agent/hw/sai/store/SaiStore.h" @@ -76,7 +77,8 @@ SaiSystemPortManager::~SaiSystemPortManager() {} SaiSystemPortTraits::CreateAttributes SaiSystemPortManager::attributesFromSwSystemPort( - const std::shared_ptr& swSystemPort) const { + const std::shared_ptr& swSystemPort, + bool shel) const { sai_system_port_config_t config{ .port_id = static_cast(swSystemPort->getID()), .attached_switch_id = static_cast(swSystemPort->getSwitchId()), @@ -97,8 +99,15 @@ SaiSystemPortManager::attributesFromSwSystemPort( qosTcToQueueMap = SaiSystemPortTraits::Attributes::QosTcToQueueMap{qosMapId}; } + std::optional + shelPktDstEnable = std::nullopt; +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + if (shel && swSystemPort->getShelDestinationEnabled()) { + shelPktDstEnable = true; + } +#endif return SaiSystemPortTraits::CreateAttributes{ - config, true /*enabled*/, qosTcToQueueMap}; + config, true /*enabled*/, qosTcToQueueMap, shelPktDstEnable}; } SystemPortSaiId SaiSystemPortManager::addSystemPort( @@ -111,8 +120,10 @@ SystemPortSaiId SaiSystemPortManager::addSystemPort( " SAI id: ", systemPortHandle->systemPort->adapterKey()); } + // TODO(zecheng): Create system port with shel dst enable is not supported yet + // (CS00012377244). To workaround, set this attribute after create. SaiSystemPortTraits::CreateAttributes attributes = - attributesFromSwSystemPort(swSystemPort); + attributesFromSwSystemPort(swSystemPort, false /* shel */); portStats_.emplace( swSystemPort->getID(), @@ -127,6 +138,12 @@ SystemPortSaiId SaiSystemPortManager::addSystemPort( GET_ATTR(SystemPort, ConfigInfo, attributes)}; auto saiSystemPort = systemPortStore.setObject( systemPortKey, attributes, swSystemPort->getID()); + // Workaround to set shel destination enable + if (swSystemPort->getShelDestinationEnabled()) { + SaiSystemPortTraits::CreateAttributes attributesWithShel = + attributesFromSwSystemPort(swSystemPort, true /* shel */); + saiSystemPort->setAttributes(attributesWithShel); + } handle->systemPort = saiSystemPort; loadQueues(*handle, swSystemPort); handles_.emplace(swSystemPort->getID(), std::move(handle)); @@ -216,7 +233,8 @@ void SaiSystemPortManager::changeSystemPort( const std::shared_ptr& newSystemPort) { CHECK_EQ(oldSystemPort->getID(), newSystemPort->getID()); auto handle = getSystemPortHandleImpl(newSystemPort->getID()); - auto newAttributes = attributesFromSwSystemPort(newSystemPort); + auto newAttributes = + attributesFromSwSystemPort(newSystemPort, true /* shel */); if (createOnlyAttributesChanged( handle->systemPort->attributes(), newAttributes)) { removeSystemPort(oldSystemPort); @@ -238,6 +256,11 @@ void SaiSystemPortManager::changeSystemPort( oldSystemPort->getPortQueues()->impl(), newSystemPort->getPortQueues()->impl()); changeQosPolicy(oldSystemPort, newSystemPort); + + if (oldSystemPort->getShelDestinationEnabled() != + newSystemPort->getShelDestinationEnabled()) { + handle->systemPort->setAttributes(newAttributes); + } } } @@ -367,7 +390,8 @@ std::shared_ptr SaiSystemPortManager::constructSystemPorts( sysPort->setCoreIndex(*platformPort->getAttachedCoreId()); sysPort->setCorePortIndex(*platformPort->getCorePortIndex()); sysPort->setSpeedMbps(static_cast(port.second->getSpeed())); - sysPort->setNumVoqs(8); + sysPort->setNumVoqs( + getNumVoqs(port.second->getPortType(), port.second->getScope())); sysPort->setScope(platformPort->getScope()); sysPort->setQosPolicy(port.second->getQosPolicy()); sysPortMap->addSystemPort(std::move(sysPort)); diff --git a/fboss/agent/hw/sai/switch/SaiSystemPortManager.h b/fboss/agent/hw/sai/switch/SaiSystemPortManager.h index 8eaafeb13b102..8210476a23f3a 100644 --- a/fboss/agent/hw/sai/switch/SaiSystemPortManager.h +++ b/fboss/agent/hw/sai/switch/SaiSystemPortManager.h @@ -103,7 +103,8 @@ class SaiSystemPortManager { SaiSystemPortHandle& sysPortHandle, const std::shared_ptr& swSystemPort); SaiSystemPortTraits::CreateAttributes attributesFromSwSystemPort( - const std::shared_ptr& swSystemPort) const; + const std::shared_ptr& swSystemPort, + bool shel = false) const; SaiQueueHandle* FOLLY_NULLABLE getQueueHandle(SystemPortID swId, const SaiQueueConfig& saiQueueConfig) const; void changeQueue( diff --git a/fboss/agent/hw/sai/switch/SaiTamManager.h b/fboss/agent/hw/sai/switch/SaiTamManager.h index 7390439b5b686..6c478c77fb625 100644 --- a/fboss/agent/hw/sai/switch/SaiTamManager.h +++ b/fboss/agent/hw/sai/switch/SaiTamManager.h @@ -5,6 +5,7 @@ #include "fboss/agent/hw/sai/api/TamApi.h" #include "fboss/agent/hw/sai/api/TamEventAgingGroupApi.h" #include "fboss/agent/hw/sai/store/SaiObject.h" +#include "fboss/agent/state/MirrorOnDropReport.h" namespace facebook::fboss { @@ -16,24 +17,24 @@ using SaiTamCollector = SaiObject; using SaiTamTransport = SaiObject; using SaiTamReport = SaiObject; using SaiTamEventAction = SaiObject; -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) using SaiTamEventAgingGroup = SaiObject; #endif using SaiTamEvent = SaiObject; using SaiTam = SaiObject; struct SaiTamHandle { - std::shared_ptr collector; - std::shared_ptr transport; std::shared_ptr report; std::shared_ptr action; -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) - std::shared_ptr agingGroup; + std::shared_ptr transport; + std::shared_ptr collector; +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + std::vector> agingGroups; #endif - std::shared_ptr event; + std::vector> events; std::shared_ptr tam; + PortID portId; SaiManagerTable* managerTable; - ~SaiTamHandle(); }; class SaiTamManager { public: @@ -41,22 +42,31 @@ class SaiTamManager { SaiStore* saiStore, SaiManagerTable* managerTable, SaiPlatform* platform); - const SaiTamHandle* getTamHandle() const { - return tamHandle_.get(); + + void addMirrorOnDropReport(const std::shared_ptr& report); + void removeMirrorOnDropReport( + const std::shared_ptr& report); + void changeMirrorOnDropReport( + const std::shared_ptr& oldReport, + const std::shared_ptr& newReport); + std::vector getAllMirrorOnDropPortIds(); + + const SaiTamHandle* getTamHandle(const std::string& name) const { + return tamHandles_.contains(name) ? tamHandles_.at(name).get() : nullptr; } - SaiTamHandle* getTamHandle() { - return tamHandle_.get(); + SaiTamHandle* getTamHandle(const std::string& name) { + return tamHandles_.contains(name) ? tamHandles_.at(name).get() : nullptr; } void gracefulExit() { - tamHandle_.reset(); + tamHandles_.clear(); } private: SaiStore* saiStore_; SaiManagerTable* managerTable_; SaiPlatform* platform_; - std::unique_ptr tamHandle_; + folly::F14FastMap> tamHandles_; }; } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/npu/SaiAclTableManager.cpp b/fboss/agent/hw/sai/switch/npu/SaiAclTableManager.cpp index 5c112b1e2d3be..65aea1e6d3675 100644 --- a/fboss/agent/hw/sai/switch/npu/SaiAclTableManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/SaiAclTableManager.cpp @@ -108,11 +108,18 @@ std::vector SaiAclTableManager::getActionTypeList( FLAGS_sai_user_defined_trap) { actionTypeList.push_back(SAI_ACL_ACTION_TYPE_SET_USER_TRAP_ID); } +#if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) + if (platform_->getAsic()->isSupported(HwAsic::Feature::FLOWLET) && + FLAGS_flowletSwitchingEnable) { + actionTypeList.push_back(SAI_ACL_ACTION_TYPE_DISABLE_ARS_FORWARDING); + } +#endif return actionTypeList; } } std::set SaiAclTableManager::getQualifierSet( + sai_acl_stage_t aclStage, const std::shared_ptr& addedAclTable) { auto aclQualifiers = addedAclTable->getQualifiers(); /* @@ -127,7 +134,7 @@ std::set SaiAclTableManager::getQualifierSet( return qualifiers; } else { - return getSupportedQualifierSet(); + return getSupportedQualifierSet(aclStage); } } @@ -141,7 +148,7 @@ std:: auto actionTypeList = getActionTypeList(addedAclTable); - auto qualifierSet = getQualifierSet(addedAclTable); + auto qualifierSet = getQualifierSet(aclStage, addedAclTable); auto qualifierExistsFn = [qualifierSet](cfg::AclTableQualifier qualifier) { return qualifierSet.find(qualifier) != qualifierSet.end(); }; @@ -179,6 +186,16 @@ std:: #endif #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) qualifierExistsFn(cfg::AclTableQualifier::IPV6_NEXT_HEADER), +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + std::nullopt, // UserDefinedFieldGroupMin0 + std::nullopt, // UserDefinedFieldGroupMin1 + std::nullopt, // UserDefinedFieldGroupMin2 + std::nullopt, // UserDefinedFieldGroupMin3 + std::nullopt, // UserDefinedFieldGroupMin4 #endif }; diff --git a/fboss/agent/hw/sai/switch/npu/SaiPortManager.cpp b/fboss/agent/hw/sai/switch/npu/SaiPortManager.cpp index bc0cd5606b6a0..c5a099dd518aa 100644 --- a/fboss/agent/hw/sai/switch/npu/SaiPortManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/SaiPortManager.cpp @@ -38,7 +38,7 @@ std::optional getSystemPortId( if (platform->getAsic()->getAsicVendor() == HwAsic::AsicVendor::ASIC_VENDOR_TAJO) { return std::optional{ - portId + platform->getAsic()->getSystemPortIDOffset()}; + portId + platform->getAsic()->getSflowPortIDOffset()}; } return std::nullopt; } @@ -388,6 +388,7 @@ void SaiPortManager::changePortImpl( if (newPort->isUp() != oldPort->isUp() && !newPort->isUp()) { resetCableLength(newPort->getID()); } + changePortFlowletConfig(oldPort, newPort); } void SaiPortManager::attributesFromSaiStore( @@ -444,6 +445,8 @@ void SaiPortManager::attributesFromSaiStore( port->attributes(), attributes, SaiPortTraits::Attributes::QosPfcPriorityToQueueMap{}); + getAndSetAttribute( + port->attributes(), attributes, SaiPortTraits::Attributes::TamObject{}); if (platform_->getAsic()->isSupported( HwAsic::Feature::PORT_TTL_DECREMENT_DISABLE)) { getAndSetAttribute( @@ -611,7 +614,7 @@ SaiPortTraits::CreateAttributes SaiPortManager::attributesFromSwPort( auto portPfcInfo = getPortPfcAttributes(swPort); #if SAI_API_VERSION >= SAI_VERSION(1, 14, 0) - std::optional arsEnable = std::nullopt; + std::optional arsEnable = false; std::optional arsPortLoadScalingFactor = std::nullopt; std::optional @@ -715,6 +718,7 @@ SaiPortTraits::CreateAttributes SaiPortManager::attributesFromSwPort( std::nullopt, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; } return SaiPortTraits::CreateAttributes{ @@ -787,6 +791,7 @@ SaiPortTraits::CreateAttributes SaiPortManager::attributesFromSwPort( condEntropyRehashEnable, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; } diff --git a/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitch.cpp b/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitch.cpp index 55bc2150a09b0..3fcc57aa00458 100644 --- a/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitch.cpp +++ b/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitch.cpp @@ -214,16 +214,56 @@ std::string errorType(sai_switch_error_type_t type) { return "SAI_SWITCH_ERROR_TYPE_FQP_ECC_ECC_1B_ERR_INT"; case SAI_SWITCH_ERROR_TYPE_FQP_ECC_ECC_2B_ERR_INT: return "SAI_SWITCH_ERROR_TYPE_FQP_ECC_ECC_2B_ERR_INT"; - + // Reassembly errors + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PKT_SIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PKT_SIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FRAG_NUM_ZERO_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FRAG_NUM_ZERO_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PCP_LOC_NOT_IN_CELL_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PCP_LOC_NOT_IN_CELL_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FDR_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FDR_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PAIR_FRAG_NUM_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PAIR_FRAG_NUM_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_CELL_0_LAST_EOP_PSIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_CELL_0_LAST_EOP_PSIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_SIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_SIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_OVERSIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_OVERSIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_SOP_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_SOP_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_EOP_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_EOP_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_CELL_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_CELL_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_PKT_SIZE_MISMATCH_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_PKT_SIZE_MISMATCH_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MOP_CELL_SIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MOP_CELL_SIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_CELL_0_LAST_EOP_PSIZE_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_CELL_0_LAST_EOP_PSIZE_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CRC_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CRC_ERR"; // All reassembly context taken case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_ERR: return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_ERR"; case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_DISCARD_ERR: return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_DISCARD_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_DYNAMIC_MISSING_SOP_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_DYNAMIC_MISSING_SOP_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_STATIC_MISS_CONFIG_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_STATIC_MISS_CONFIG_ERR"; + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_FABRIC_PTP_PKT_ERR: + return "SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_FABRIC_PTP_PKT_ERR"; case SAI_SWITCH_ERROR_TYPE_RTP_TABLE_CHANGE: return "SAI_SWITCH_ERROR_TYPE_RTP_TABLE_CHANGE"; case SAI_SWITCH_ERROR_TYPE_FABRIC_AUTO_ISOLATION: return "SAI_SWITCH_ERROR_TYPE_FABRIC_AUTO_ISOLATION"; +#endif +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + case SAI_SWITCH_ERROR_TYPE_FIRMWARE_CRASH: + return "SAI_SWITCH_ERROR_TYPE_FIRMWARE_CRASH"; #endif default: break; @@ -345,6 +385,35 @@ bool isFqpError(sai_switch_error_type_t type) { return false; } +bool isReassemblyError(sai_switch_error_type_t type) { + switch (type) { + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PKT_SIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FRAG_NUM_ZERO_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PCP_LOC_NOT_IN_CELL_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_FDR_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_PAIR_FRAG_NUM_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_CELL_0_LAST_EOP_PSIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_SIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CDC_SOP_CELL_OVERSIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_SOP_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_EOP_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MISSING_CELL_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_PKT_SIZE_MISMATCH_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_MOP_CELL_SIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CUP_CELL_0_LAST_EOP_PSIZE_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_CRC_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_DISCARD_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_DYNAMIC_MISSING_SOP_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_STATIC_MISS_CONFIG_ERR: + case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_FABRIC_PTP_PKT_ERR: + return true; + default: + break; + } + return false; +} + bool allReassemblyContextsTakenError(sai_switch_error_type_t type) { switch (type) { case SAI_SWITCH_ERROR_TYPE_RQP_PACKET_REASSEMBLY_RCM_ALL_CONTEXTS_TAKEN_ERR: @@ -411,12 +480,14 @@ void SaiSwitch::switchEventCallback( auto epniError = isEpniError(eventInfo->error_type); auto alignerError = isAlignerErrorType(eventInfo->error_type); auto fqpError = isFqpError(eventInfo->error_type); + auto reassemblyError = isReassemblyError(eventInfo->error_type); auto allReassemblyContextsTaken = allReassemblyContextsTakenError(eventInfo->error_type); auto rtpTableChanged = rtpTableChangedEvent(eventInfo->error_type); XLOG(ERR) << " Got interrupt event, is IRE: " << ireError << " is ITPP: " << itppError << " is EPNI: " << epniError << " is Aligner: " << alignerError << " is FQP: " << fqpError + << " is Reassembly: " << reassemblyError << " all reassembly context taken: " << allReassemblyContextsTaken << " rtp table changed: " << rtpTableChanged; @@ -430,6 +501,8 @@ void SaiSwitch::switchEventCallback( getSwitchStats()->alignerError(); } else if (fqpError) { getSwitchStats()->forwardingQueueProcessorError(); + } else if (reassemblyError) { + getSwitchStats()->reassemblyError(); } else if (allReassemblyContextsTaken) { getSwitchStats()->allReassemblyContextsTaken(); } else if (rtpTableChanged) { @@ -442,13 +515,54 @@ void SaiSwitch::switchEventCallback( } } break; case SAI_SWITCH_EVENT_TYPE_FABRIC_AUTO_ISOLATE: { - // TODO(skhare) Process the callback - XLOG(ERR) << "Firmware Isolate callback received" - << " error type: " << errorType(eventInfo->error_type) - << " is_isolated: " << static_cast(eventInfo->index) - << " nof_active_links: " << static_cast(eventInfo->index2); + auto isIsolated = eventInfo->index; + auto numActiveFabricPorts = eventInfo->index2; + if (eventInfo->error_type == + SAI_SWITCH_ERROR_TYPE_FABRIC_AUTO_ISOLATION && + isIsolated == 1) { + // Firmware is expected issue callback when it isolates the device. + // We should never get a callback on unisolate. + XLOG(ERR) << "Firmware Isolate callback received" + << " error type: " << errorType(eventInfo->error_type) + << " isIsolated: " << isIsolated + << " numActiveFabricPorts: " << numActiveFabricPorts; + + // We always want to process Firmware Isolate cb and never coalesce it. + // Thus, unconditionally queue to for processing regardless of + // txReadyStatusChangePending_. + txReadyStatusChangeBottomHalfEventBase_.runInFbossEventBaseThread( + [this, numActiveFabricPorts]() mutable { + txReadyStatusChangeOrFwIsolateCallbackBottomHalf( + true /* fwIsolated */, numActiveFabricPorts); + }); + } else { + XLOG(ERR) << "Firmware Isolate callback received with invalid info" + << " error type: " << errorType(eventInfo->error_type) + << " isIsolated: " << isIsolated + << " numActiveFabricPorts: " << numActiveFabricPorts; + } + break; } +#endif +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + case SAI_SWITCH_EVENT_TYPE_FIRMWARE_CRASHED: { + // TODO(skhare) Process this callback + XLOG(ERR) << "Firmware Crash callback received: " << " error type: " + << errorType(eventInfo->error_type) + << " reload reason: " << static_cast(eventInfo->index) + << " reload status: " << static_cast(eventInfo->index2); + break; + } + // TODO(zecheng): Update flag when new 12.0 release has the attribute + case SAI_SWITCH_EVENT_TYPE_REMOTE_LINK_CHANGE: + auto isUp = eventInfo->index; + auto sysPortId = eventInfo->index2; + XLOG(DBG2) << "[SHEL] Received remote link change event: " << "isUp: " + << static_cast(isUp) + << " sysPortId: " << static_cast(sysPortId); + // TODO(zecheng): Handle and log remote link change + break; #endif } } diff --git a/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitchManager.cpp b/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitchManager.cpp index f47afca769236..5f64158e6a282 100644 --- a/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitchManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/bcm/SaiSwitchManager.cpp @@ -59,6 +59,15 @@ void fillHwSwitchWatermarkStats( case SAI_SWITCH_STAT_DEVICE_EGRESS_DB_WM: hwSwitchWatermarkStats.egressCoreBufferWatermarkBytes() = value; break; + case SAI_SWITCH_STAT_ING_MIN_SRAM_BUFFER_BYTES: + hwSwitchWatermarkStats.sramMinBufferWatermarkBytes() = value; + break; +#if !defined(BRCM_SAI_SDK_DNX_GTE_12_0) + // TODO: Support is not yet available in 12.0 + case SAI_SWITCH_STAT_FDR_RX_QUEUE_WM_LEVEL: + hwSwitchWatermarkStats.fdrFifoWatermarkBytes() = value; + break; +#endif #endif default: throw FbossError("Got unexpected switch counter id: ", counterId); @@ -82,4 +91,30 @@ void fillHwSwitchCreditStats( } } } + +void fillHwSwitchErrorStats( + const folly::F14FastMap& counterId2Value, + HwSwitchDropStats& dropStats) { + for (auto counterIdAndValue : counterId2Value) { + auto [counterId, value] = counterIdAndValue; + switch (counterId) { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + case SAI_SWITCH_STAT_EGRESS_FABRIC_CELL_ERROR: + dropStats.rqpFabricCellCorruptionDrops() = value; + break; + case SAI_SWITCH_STAT_EGRESS_NON_FABRIC_CELL_ERROR: + dropStats.rqpNonFabricCellCorruptionDrops() = value; + break; + case SAI_SWITCH_STAT_EGRESS_CUP_NON_FABRIC_CELL_ERROR: + dropStats.rqpNonFabricCellMissingDrops() = value; + break; + case SAI_SWITCH_STAT_EGRESS_PARITY_CELL_ERROR: + dropStats.rqpParityErrorDrops() = value; + break; +#endif + default: + throw FbossError("Got unexpected switch counter id: ", counterId); + } + } +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/npu/bcm/SaiTamManager.cpp b/fboss/agent/hw/sai/switch/npu/bcm/SaiTamManager.cpp index 8c605342fefa5..6a2ac58b71dba 100644 --- a/fboss/agent/hw/sai/switch/npu/bcm/SaiTamManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/bcm/SaiTamManager.cpp @@ -2,24 +2,237 @@ #include "fboss/agent/hw/sai/switch/SaiTamManager.h" -#include "fboss/agent/hw/sai/api/SwitchApi.h" #include "fboss/agent/hw/sai/store/SaiStore.h" #include "fboss/agent/hw/sai/switch/SaiManagerTable.h" +#include "fboss/agent/hw/sai/switch/SaiPortManager.h" #include "fboss/agent/hw/sai/switch/SaiSwitchManager.h" -namespace facebook::fboss { - -SaiTamHandle::~SaiTamHandle() { - managerTable->switchManager().resetTamObject(); +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) +extern "C" { +#ifndef IS_OSS_BRCM_SAI +#include +#include +#else +#include +#include +#endif } +namespace { +// Must be less than BRCM_SAI_DNX_MOD_MAX_SUPP_AGE_TIME (776 on J3). +constexpr int kDefaultAgingIntervalUsecs = 500; + +// TODO(maxgg): split into multiple profiles once CS00012378634 is fixed. +// Using ID 6 for now, for better visibility in packet dumps. +const std::map> kDropProfiles = { + {6, + { + // 0 - Global resources + SAI_PACKET_DROP_TYPE_MMU_GLOBAL_DRAM_BDBS, + SAI_PACKET_DROP_TYPE_MMU_GLOBAL_SRAM_BUFFERS, + SAI_PACKET_DROP_TYPE_MMU_GLOBAL_SRAM_PDBS, + + // 1 - VOQ resources + SAI_PACKET_DROP_TYPE_MMU_VOQ_SRAM_PDS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_VOQ_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VOQ_SRAM_BUFFERS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_VOQ_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VOQ_WORDS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_VOQ_WORDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VOQ_DRAM_BLOCK, + + // 2 - VSQ resources + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_SRAM_PDS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_SRAM_BUFFERS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_WORDS_TOTAL_FREE_SHARED, + SAI_PACKET_DROP_TYPE_MMU_PB_VSQ_WORDS_SHARED_MAX_SIZE, + + // 3 - VSQ D resources + SAI_PACKET_DROP_TYPE_MMU_VSQ_D_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_D_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_D_WORDS_SHARED_MAX_SIZE, + + // 4 - Queue and packet processing + SAI_PACKET_DROP_TYPE_MMU_QUEUE_NUM_RESOLUTION_ERROR, + SAI_PACKET_DROP_TYPE_MMU_QUEUE_NUM_NOT_VALID, + SAI_PACKET_DROP_TYPE_MMU_PP_ERROR, + + // 5 - Misc + SAI_PACKET_DROP_TYPE_MMU_ITPP_DELTA_ERROR, + SAI_PACKET_DROP_TYPE_MMU_DROP_PRECEDENCE_LEVEL, + SAI_PACKET_DROP_TYPE_MMU_SRAM_RESOURCE_ERROR, + SAI_PACKET_DROP_TYPE_MMU_EXTERNAL_ERROR, + SAI_PACKET_DROP_TYPE_MMU_MACSEC_ERROR, + SAI_PACKET_DROP_TYPE_MMU_TAR_FIFO_FULL, + SAI_PACKET_DROP_TYPE_MMU_PACKET_SIZE_ERROR, + + // 6 - Unexpected reasons + SAI_PACKET_DROP_TYPE_MMU_LAG_REMOTE, + SAI_PACKET_DROP_TYPE_MMU_LAG_PROTECTION, + SAI_PACKET_DROP_TYPE_MMU_LATENCY, + SAI_PACKET_DROP_TYPE_MMU_MULTICAST_REPLICATION_ERROR, + SAI_PACKET_DROP_TYPE_MMU_MULTICAST_FIFO_FULL, + SAI_PACKET_DROP_TYPE_MMU_VOQ_SYSTEM_RED, + SAI_PACKET_DROP_TYPE_MMU_VOQ_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_F_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_E_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_C_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_B_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_A_SRAM_PDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_C_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_B_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_A_SRAM_BUFFERS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_C_WORDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_B_WORDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_A_WORDS_SHARED_MAX_SIZE, + SAI_PACKET_DROP_TYPE_MMU_VSQ_D_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_C_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_B_WRED, + SAI_PACKET_DROP_TYPE_MMU_VSQ_A_WRED, + }}, +}; +} // namespace +#endif + +namespace facebook::fboss { + SaiTamManager::SaiTamManager( SaiStore* saiStore, SaiManagerTable* managerTable, SaiPlatform* platform) - : saiStore_(saiStore), - managerTable_(managerTable), - platform_(platform), - tamHandle_(std::make_unique()) {} + : saiStore_(saiStore), managerTable_(managerTable), platform_(platform) {} + +void SaiTamManager::addMirrorOnDropReport( + const std::shared_ptr& report) { +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + // Create report + auto& reportStore = saiStore_->get(); + auto reportTraits = + SaiTamReportTraits::CreateAttributes{SAI_TAM_REPORT_TYPE_MOD_OVER_UDP}; + auto reportObj = reportStore.setObject(reportTraits, reportTraits); + + // Create action + auto& actionStore = saiStore_->get(); + auto actionTraits = + SaiTamEventActionTraits::CreateAttributes{reportObj->adapterKey()}; + auto action = actionStore.setObject(actionTraits, actionTraits); + + // Create transport + auto& transportStore = saiStore_->get(); + auto transportTraits = SaiTamTransportTraits::AdapterHostKey{ + SAI_TAM_TRANSPORT_TYPE_PORT, + report->getLocalSrcPort(), + report->getCollectorPort(), + report->getMtu(), + folly::MacAddress(report->getSwitchMac()), + folly::MacAddress(report->getFirstInterfaceMac()), + }; + auto transport = transportStore.setObject(transportTraits, transportTraits); + + // Create collector + auto& collectorStore = saiStore_->get(); + auto collectorTraits = SaiTamCollectorTraits::CreateAttributes{ + report->getLocalSrcIp(), + report->getCollectorIp(), + report->getTruncateSize(), + transport->adapterKey(), + report->getDscp(), + }; + auto collector = collectorStore.setObject(collectorTraits, collectorTraits); + + std::vector> agingGroups; + std::vector> events; + std::vector eventIds; + for (const auto& [eventId, reasons] : kDropProfiles) { + // Create aging group + auto& agingGroupStore = saiStore_->get(); + sai_uint16_t agingInterval = + report->getAgingIntervalUsecs().value_or(kDefaultAgingIntervalUsecs) + + eventId; + auto agingGroupTraits = SaiTamEventAgingGroupTraits::CreateAttributes{ + SAI_TAM_EVENT_AGING_GROUP_TYPE_VOQ, agingInterval}; + auto agingGroup = + agingGroupStore.setObject(agingGroupTraits, agingGroupTraits); + agingGroups.push_back(agingGroup); + + // Create event + std::vector actions{action->adapterKey()}; + std::vector collectors{collector->adapterKey()}; + sai_object_id_t agingGroupKey = agingGroup->adapterKey(); + SaiTamEventTraits::CreateAttributes eventTraits; + std::get(eventTraits) = + SAI_TAM_EVENT_TYPE_PACKET_DROP_STATEFUL; + std::get(eventTraits) = actions; + std::get>( + eventTraits) = 0; // specify 0 explcitily so that round trip works + std::get>( + eventTraits) = eventId; + std::get< + std::optional>( + eventTraits) = collectors; + std::get>( + eventTraits) = reasons; + std::get>( + eventTraits) = agingGroupKey; + auto& eventStore = saiStore_->get(); + auto event = eventStore.setObject(eventTraits, eventTraits); + events.push_back(event); + eventIds.push_back(event->adapterKey()); + +XLOG(INFO) << "Created event ID " << eventId << " with tam event " + << event->adapterKey() << " and aging group " << agingGroupKey; + } + + // Create tam + std::vector bindpoints = { + SAI_TAM_BIND_POINT_TYPE_SWITCH, SAI_TAM_BIND_POINT_TYPE_PORT}; + SaiTamTraits::CreateAttributes tamTraits; + std::get(tamTraits) = eventIds; + std::get(tamTraits) = bindpoints; + auto& tamStore = saiStore_->get(); + auto tam = tamStore.setObject(tamTraits, tamTraits); + + // Associate TAM with port + XLOG(INFO) << "Associating TAM object with port " + << report->getMirrorPortId(); + managerTable_->portManager().setTamObject( + PortID(report->getMirrorPortId()), {tam->adapterKey()}); + + // Associate TAM with switch + managerTable_->switchManager().setTamObject({tam->adapterKey()}); + + auto tamHandle = std::make_unique(); + tamHandle->report = reportObj; + tamHandle->action = action; + tamHandle->transport = transport; + tamHandle->collector = collector; + tamHandle->agingGroups = agingGroups; + tamHandle->events = events; + tamHandle->tam = tam; + tamHandle->portId = report->getMirrorPortId(); + tamHandles_.emplace(report->getID(), std::move(tamHandle)); +#endif +} + +void SaiTamManager::removeMirrorOnDropReport( + const std::shared_ptr& report) { + tamHandles_.erase(report->getID()); +} + +void SaiTamManager::changeMirrorOnDropReport( + const std::shared_ptr& oldReport, + const std::shared_ptr& newReport) { + removeMirrorOnDropReport(oldReport); + addMirrorOnDropReport(newReport); +} + +std::vector SaiTamManager::getAllMirrorOnDropPortIds() { + std::vector portIds; + for (const auto& [_, tamHandle] : tamHandles_) { + portIds.push_back(tamHandle->portId); + } + return portIds; +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/npu/tajo/SaiSwitchManager.cpp b/fboss/agent/hw/sai/switch/npu/tajo/SaiSwitchManager.cpp index e53e5f991515c..dd396a1d5f6f6 100644 --- a/fboss/agent/hw/sai/switch/npu/tajo/SaiSwitchManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/tajo/SaiSwitchManager.cpp @@ -24,4 +24,9 @@ void fillHwSwitchCreditStats( CHECK_EQ(counterId2Value.size(), 0); } +void fillHwSwitchErrorStats( + const folly::F14FastMap& counterId2Value, + HwSwitchDropStats& /*dropStats*/) { + CHECK_EQ(counterId2Value.size(), 0); +} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/npu/tajo/SaiTamManager.cpp b/fboss/agent/hw/sai/switch/npu/tajo/SaiTamManager.cpp index 7d2e7a49ff80f..e29b9cf94ff89 100644 --- a/fboss/agent/hw/sai/switch/npu/tajo/SaiTamManager.cpp +++ b/fboss/agent/hw/sai/switch/npu/tajo/SaiTamManager.cpp @@ -15,16 +15,11 @@ extern "C" { namespace facebook::fboss { -SaiTamHandle::~SaiTamHandle() {} - SaiTamManager::SaiTamManager( SaiStore* saiStore, SaiManagerTable* managerTable, SaiPlatform* platform) - : saiStore_(saiStore), - managerTable_(managerTable), - platform_(platform), - tamHandle_(std::make_unique()) { + : saiStore_(saiStore), managerTable_(managerTable), platform_(platform) { if (!platform_->getAsic()->isSupported( HwAsic::Feature::TELEMETRY_AND_MONITORING)) { return; @@ -90,13 +85,30 @@ SaiTamManager::SaiTamManager( auto& tamStore = saiStore_->get(); auto tam = tamStore.setObject(tamTraits, tamTraits); - tamHandle_->report = report; - tamHandle_->action = action; - tamHandle_->event = event; - tamHandle_->tam = tam; - tamHandle_->managerTable = managerTable_; + auto tamHandle = std::make_unique(); + tamHandle->report = report; + tamHandle->action = action; + tamHandle->events.push_back(event); + tamHandle->tam = tam; + tamHandle->managerTable = managerTable_; // associate TAM with switch - managerTable_->switchManager().setTamObject({tamHandle_->tam->adapterKey()}); + managerTable_->switchManager().setTamObject({tamHandle->tam->adapterKey()}); + + tamHandles_.emplace("default", std::move(tamHandle)); +} + +void SaiTamManager::addMirrorOnDropReport( + const std::shared_ptr& /* report */) {} + +void SaiTamManager::removeMirrorOnDropReport( + const std::shared_ptr& /* report */) {} + +void SaiTamManager::changeMirrorOnDropReport( + const std::shared_ptr& /* oldReport */, + const std::shared_ptr& /* newReport */) {} + +std::vector SaiTamManager::getAllMirrorOnDropPortIds() { + return {}; } } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/oss/SaiSwitch.cpp b/fboss/agent/hw/sai/switch/oss/SaiSwitch.cpp index b12a3e5ddb1ed..19941f3085b08 100644 --- a/fboss/agent/hw/sai/switch/oss/SaiSwitch.cpp +++ b/fboss/agent/hw/sai/switch/oss/SaiSwitch.cpp @@ -2,9 +2,6 @@ #include "fboss/agent/hw/sai/switch/SaiSwitch.h" -#include "fboss/agent/LockPolicy.h" -#include "fboss/agent/state/StateDelta.h" - namespace facebook::fboss { void SaiSwitch::tamEventCallback( sai_object_id_t /*tam_event_id*/, diff --git a/fboss/agent/hw/sai/switch/oss/SaiSwitchManager.cpp b/fboss/agent/hw/sai/switch/oss/SaiSwitchManager.cpp index 6f00e19ef9355..5baea59843c1e 100644 --- a/fboss/agent/hw/sai/switch/oss/SaiSwitchManager.cpp +++ b/fboss/agent/hw/sai/switch/oss/SaiSwitchManager.cpp @@ -24,6 +24,12 @@ void fillHwSwitchCreditStats( CHECK_EQ(counterId2Value.size(), 0); } +void fillHwSwitchErrorStats( + const folly::F14FastMap& counterId2Value, + HwSwitchDropStats& /*dropStats*/) { + CHECK_EQ(counterId2Value.size(), 0); +} + void publishSwitchWatermarks(HwSwitchWatermarkStats& /*watermarkStats*/) {} } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/oss/SaiTamManager.cpp b/fboss/agent/hw/sai/switch/oss/SaiTamManager.cpp index e01fb690a3286..d3a69732df63a 100644 --- a/fboss/agent/hw/sai/switch/oss/SaiTamManager.cpp +++ b/fboss/agent/hw/sai/switch/oss/SaiTamManager.cpp @@ -3,11 +3,24 @@ #include "fboss/agent/hw/sai/switch/SaiTamManager.h" namespace facebook::fboss { -SaiTamHandle::~SaiTamHandle() {} SaiTamManager::SaiTamManager( SaiStore* /* saiStore */, SaiManagerTable* /*managerTable*/, SaiPlatform* /*platform*/) {} +void SaiTamManager::addMirrorOnDropReport( + const std::shared_ptr& /* report */) {} + +void SaiTamManager::removeMirrorOnDropReport( + const std::shared_ptr& /* report */) {} + +void SaiTamManager::changeMirrorOnDropReport( + const std::shared_ptr& /* oldReport */, + const std::shared_ptr& /* newReport */) {} + +std::vector SaiTamManager::getAllMirrorOnDropPortIds() { + return {}; +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/sai/switch/phy/SaiAclTableManager.cpp b/fboss/agent/hw/sai/switch/phy/SaiAclTableManager.cpp index 99e62e9ada47f..1a8b38cbd5999 100644 --- a/fboss/agent/hw/sai/switch/phy/SaiAclTableManager.cpp +++ b/fboss/agent/hw/sai/switch/phy/SaiAclTableManager.cpp @@ -58,6 +58,7 @@ std::vector SaiAclTableManager::getActionTypeList( } std::set SaiAclTableManager::getQualifierSet( + sai_acl_stage_t /*aclStage*/, const std::shared_ptr& /* addedAclTable */) { return {cfg::AclTableQualifier::DST_MAC, cfg::AclTableQualifier::ETHER_TYPE}; } @@ -106,6 +107,16 @@ std:: std::nullopt, // fieldOuterVlanId std::nullopt, // fieldBthOpcode std::nullopt, // fieldIpv6NextHeader +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + std::nullopt, // UserDefinedFieldGroupMin0 + std::nullopt, // UserDefinedFieldGroupMin1 + std::nullopt, // UserDefinedFieldGroupMin2 + std::nullopt, // UserDefinedFieldGroupMin3 + std::nullopt, // UserDefinedFieldGroupMin4 +#endif }; SaiAclTableTraits::AdapterHostKey adapterHostKey{addedAclTable->getID()}; diff --git a/fboss/agent/hw/sai/switch/phy/SaiPortManager.cpp b/fboss/agent/hw/sai/switch/phy/SaiPortManager.cpp index cdfb1d92225c5..5fcd72adae928 100644 --- a/fboss/agent/hw/sai/switch/phy/SaiPortManager.cpp +++ b/fboss/agent/hw/sai/switch/phy/SaiPortManager.cpp @@ -290,6 +290,7 @@ SaiPortTraits::CreateAttributes SaiPortManager::attributesFromSwPort( std::nullopt, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; } diff --git a/fboss/agent/hw/sai/switch/tests/AclTableGroupManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/AclTableGroupManagerTest.cpp index 61b4a0a301cf5..8a68bc69ce6cc 100644 --- a/fboss/agent/hw/sai/switch/tests/AclTableGroupManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/AclTableGroupManagerTest.cpp @@ -72,9 +72,11 @@ TEST_F(AclTableGroupManagerTest, checkNonExistentAclTableGroup) { } TEST_F(AclTableGroupManagerTest, addAclTableGroupMember) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclTableGroupHandle = saiManagerTable->aclTableGroupManager().getAclTableGroupHandle( SAI_ACL_STAGE_INGRESS); @@ -83,7 +85,8 @@ TEST_F(AclTableGroupManagerTest, addAclTableGroupMember) { auto aclTableGroupMemberHandle = saiManagerTable->aclTableGroupManager().getAclTableGroupMemberHandle( - aclTableGroupHandle, kAclTable1); + aclTableGroupHandle, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(aclTableGroupMemberHandle); EXPECT_TRUE(aclTableGroupMemberHandle->aclTableGroupMember); @@ -122,12 +125,16 @@ TEST_F(AclTableGroupManagerTest, addTwoAclTableGroupMember) { } TEST_F(AclTableGroupManagerTest, addDupAclTableGroupMember) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); EXPECT_THROW( saiManagerTable->aclTableGroupManager().addAclTableGroupMember( - SAI_ACL_STAGE_INGRESS, aclTableId, kAclTable1), + SAI_ACL_STAGE_INGRESS, + aclTableId, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), FbossError); } diff --git a/fboss/agent/hw/sai/switch/tests/AclTableManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/AclTableManagerTest.cpp index e0ccf214a4ff0..215378f0f502c 100644 --- a/fboss/agent/hw/sai/switch/tests/AclTableManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/AclTableManagerTest.cpp @@ -49,9 +49,11 @@ class AclTableManagerTest : public ManagerTestBase { }; TEST_F(AclTableManagerTest, addAclTable) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); // Acl table is added as part of sai switch init in test setup auto stageGot = saiApiTable->aclApi().getAttribute( aclTableId, SaiAclTableTraits::Attributes::Stage()); @@ -60,9 +62,11 @@ TEST_F(AclTableManagerTest, addAclTable) { TEST_F(AclTableManagerTest, addTwoAclTable) { // AclTable1 should already be added - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto table2 = std::make_shared(0, kAclTable2); AclTableSaiId aclTableId2 = saiManagerTable->aclTableManager().addAclTable( table2, cfg::AclStage::INGRESS); @@ -79,7 +83,7 @@ TEST_F(AclTableManagerTest, addTwoAclTable) { TEST_F(AclTableManagerTest, addDupAclTable) { state::AclTableFields fields{}; fields.priority() = 0; - fields.id() = kAclTable1; + fields.id() = cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); auto table1 = std::make_shared(std::move(fields)); EXPECT_THROW( saiManagerTable->aclTableManager().addAclTable( @@ -88,8 +92,8 @@ TEST_F(AclTableManagerTest, addDupAclTable) { } TEST_F(AclTableManagerTest, getAclTable) { - auto handle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto handle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(handle); EXPECT_TRUE(handle->aclTable); @@ -103,17 +107,19 @@ TEST_F(AclTableManagerTest, checkNonExistentAclTable) { } TEST_F(AclTableManagerTest, addAclEntry) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); aclEntry->setDscp(kDscp()); aclEntry->setActionType(kActionType()); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -121,9 +127,11 @@ TEST_F(AclTableManagerTest, addAclEntry) { } TEST_F(AclTableManagerTest, addAclEntryWithCounter) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto counter = cfg::TrafficCounter(); *counter.name() = "stat0.c"; @@ -135,8 +143,8 @@ TEST_F(AclTableManagerTest, addAclEntryWithCounter) { aclEntry->setDscp(kDscp()); aclEntry->setAclAction(action); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -155,17 +163,19 @@ TEST_F(AclTableManagerTest, addAclEntryWithCounter) { } TEST_F(AclTableManagerTest, addTwoAclEntry) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); aclEntry->setDscp(kDscp()); aclEntry->setActionType(kActionType()); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -176,8 +186,8 @@ TEST_F(AclTableManagerTest, addTwoAclEntry) { aclEntry2->setDscp(kDscp2()); aclEntry2->setActionType(kActionType()); - AclEntrySaiId aclEntryId2 = - saiManagerTable->aclTableManager().addAclEntry(aclEntry2, kAclTable1); + AclEntrySaiId aclEntryId2 = saiManagerTable->aclTableManager().addAclEntry( + aclEntry2, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot2 = saiApiTable->aclApi().getAttribute( aclEntryId2, SaiAclEntryTraits::Attributes::TableId()); @@ -190,7 +200,8 @@ TEST_F(AclTableManagerTest, addDupAclEntry) { aclEntry->setDscp(kDscp()); aclEntry->setActionType(kActionType()); - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto dupAclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); @@ -198,7 +209,9 @@ TEST_F(AclTableManagerTest, addDupAclEntry) { dupAclEntry->setActionType(cfg::AclActionType::DENY); EXPECT_THROW( - saiManagerTable->aclTableManager().addAclEntry(dupAclEntry, kAclTable1), + saiManagerTable->aclTableManager().addAclEntry( + dupAclEntry, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), FbossError); } @@ -208,10 +221,11 @@ TEST_F(AclTableManagerTest, getAclEntry) { aclEntry->setDscp(kDscp()); aclEntry->setActionType(kActionType()); - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); - auto aclTableHandle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto aclTableHandle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(aclTableHandle); EXPECT_TRUE(aclTableHandle->aclTable); @@ -224,8 +238,8 @@ TEST_F(AclTableManagerTest, getAclEntry) { } TEST_F(AclTableManagerTest, checkNonExistentAclEntry) { - auto aclTableHandle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto aclTableHandle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(aclTableHandle); EXPECT_TRUE(aclTableHandle->aclTable); @@ -250,8 +264,8 @@ TEST_F(AclTableManagerTest, aclMirroring) { MatchAction matchAction = MatchAction(); matchAction.setIngressMirror(mirrorId); aclEntry->setAclAction(matchAction); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); SaiMirrorHandle* mirrorHandle = saiManagerTable->mirrorManager().getMirrorHandle(mirrorId); auto gotMirrorSaiIdList = saiApiTable->aclApi().getAttribute( diff --git a/fboss/agent/hw/sai/switch/tests/HostifManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/HostifManagerTest.cpp index 1888d5162887e..19acb359a9045 100644 --- a/fboss/agent/hw/sai/switch/tests/HostifManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/HostifManagerTest.cpp @@ -13,8 +13,6 @@ #include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" -#include - using namespace facebook::fboss; namespace { diff --git a/fboss/agent/hw/sai/switch/tests/InSegEntryManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/InSegEntryManagerTest.cpp index 0cee546e81e29..ad468014ca128 100644 --- a/fboss/agent/hw/sai/switch/tests/InSegEntryManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/InSegEntryManagerTest.cpp @@ -7,13 +7,8 @@ #include "fboss/agent/hw/sai/switch/SaiSwitchManager.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" -#include - -#include - namespace facebook::fboss { namespace { diff --git a/fboss/agent/hw/sai/switch/tests/ManagerTestBase.cpp b/fboss/agent/hw/sai/switch/tests/ManagerTestBase.cpp index 0340a36d09443..e8d822081f053 100644 --- a/fboss/agent/hw/sai/switch/tests/ManagerTestBase.cpp +++ b/fboss/agent/hw/sai/switch/tests/ManagerTestBase.cpp @@ -376,6 +376,9 @@ InterfaceID ManagerTestBase::getIntfID(int id, cfg::InterfaceType type) const { return InterfaceID(id); case cfg::InterfaceType::SYSTEM_PORT: return InterfaceID(getSysPortId(id)); + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + break; } XLOG(FATAL) << "Unhandled interface type"; } @@ -505,6 +508,10 @@ std::shared_ptr ManagerTestBase::resolveArp( SAI_FDB_ENTRY_TYPE_STATIC, metadata); } + if (intfType == cfg::InterfaceType::PORT) { + // TODO(Chenab): Support port router interface + throw FbossError("Port type of router interface is not supported"); + } return arpEntry; } diff --git a/fboss/agent/hw/sai/switch/tests/NeighborManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/NeighborManagerTest.cpp index 06fbe7da2829d..9a5d337283586 100644 --- a/fboss/agent/hw/sai/switch/tests/NeighborManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/NeighborManagerTest.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/hw/sai/switch/SaiNeighborManager.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" #include "fboss/agent/state/ArpEntry.h" -#include "fboss/agent/state/NdpEntry.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/types.h" @@ -87,6 +86,8 @@ class NeighborManagerTest : public ManagerTestBase { case cfg::InterfaceType::SYSTEM_PORT: EXPECT_EQ(saiNeighborHandle->fdbEntry, nullptr); break; + case cfg::InterfaceType::PORT: + throw FbossError("Port type of router interface is not supported yet"); } } diff --git a/fboss/agent/hw/sai/switch/tests/NextHopManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/NextHopManagerTest.cpp index 54e2b8bfeb469..ef875850df0cd 100644 --- a/fboss/agent/hw/sai/switch/tests/NextHopManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/NextHopManagerTest.cpp @@ -10,8 +10,6 @@ #include "fboss/agent/hw/sai/switch/SaiNextHopManager.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" -#include "fboss/agent/state/RouteNextHop.h" - using namespace facebook::fboss; class NextHopManagerTest : public ManagerTestBase { diff --git a/fboss/agent/hw/sai/switch/tests/PortManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/PortManagerTest.cpp index c0b8434ac8fc0..29d1de1f7af18 100644 --- a/fboss/agent/hw/sai/switch/tests/PortManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/PortManagerTest.cpp @@ -172,6 +172,7 @@ class PortManagerTest : public ManagerTestBase { std::nullopt, // CondEntropyRehashEnable std::nullopt, // CondEntropyRehashPeriodUS std::nullopt, // CondEntropyRehashSeed + std::nullopt, // ShelEnable }; return portApi.create(a, 0); } diff --git a/fboss/agent/hw/sai/switch/tests/RouterInterfaceManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/RouterInterfaceManagerTest.cpp index fcec56fb6ccb8..ed474a82f27b3 100644 --- a/fboss/agent/hw/sai/switch/tests/RouterInterfaceManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/RouterInterfaceManagerTest.cpp @@ -598,5 +598,6 @@ TEST_F(RouterInterfaceManagerTest, adapterKeyAndTypePortRouterInterface) { saiManagerTable->routerInterfaceManager().addLocalRouterInterface( swInterface); checkAdapterKey(saiId, swInterface->getID()); + // TODO(Chenab): Support port router interface checkType(saiId, swInterface->getID(), cfg::InterfaceType::SYSTEM_PORT); } diff --git a/fboss/agent/hw/sai/switch/tests/UnsupportedFeatureTest.cpp b/fboss/agent/hw/sai/switch/tests/UnsupportedFeatureTest.cpp index da88d0e95a8f2..afe0f1bc9d60d 100644 --- a/fboss/agent/hw/sai/switch/tests/UnsupportedFeatureTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/UnsupportedFeatureTest.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchSettings.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/hw/sai/switch/tests/VlanManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/VlanManagerTest.cpp index 355ac5c5ee0e2..fd8f1fb56634b 100644 --- a/fboss/agent/hw/sai/switch/tests/VlanManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/VlanManagerTest.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/hw/sai/switch/SaiVlanManager.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/types.h" diff --git a/fboss/agent/hw/sai/switch/tests/phy/AclTableManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/phy/AclTableManagerTest.cpp index d25d40f9b6bea..1caca7302c9dd 100644 --- a/fboss/agent/hw/sai/switch/tests/phy/AclTableManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/phy/AclTableManagerTest.cpp @@ -48,9 +48,11 @@ class AclTableManagerTest : public ManagerTestBase { }; TEST_F(AclTableManagerTest, addAclTable) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); // Acl table is added as part of sai switch init in test setup auto stageGot = saiApiTable->aclApi().getAttribute( aclTableId, SaiAclTableTraits::Attributes::Stage()); @@ -73,9 +75,11 @@ TEST_F(AclTableManagerTest, addAclTable) { TEST_F(AclTableManagerTest, addTwoAclTable) { // AclTable1 should already be added - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto table2 = std::make_shared(0, kAclTable2); AclTableSaiId aclTableId2 = saiManagerTable->aclTableManager().addAclTable( table2, cfg::AclStage::INGRESS); @@ -92,7 +96,7 @@ TEST_F(AclTableManagerTest, addTwoAclTable) { TEST_F(AclTableManagerTest, addDupAclTable) { state::AclTableFields fields{}; fields.priority() = 0; - fields.id() = kAclTable1; + fields.id() = cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); auto table1 = std::make_shared(std::move(fields)); EXPECT_THROW( saiManagerTable->aclTableManager().addAclTable( @@ -101,8 +105,8 @@ TEST_F(AclTableManagerTest, addDupAclTable) { } TEST_F(AclTableManagerTest, getAclTable) { - auto handle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto handle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(handle); EXPECT_TRUE(handle->aclTable); @@ -116,9 +120,11 @@ TEST_F(AclTableManagerTest, checkNonExistentAclTable) { } TEST_F(AclTableManagerTest, addAclEntryDscp) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); @@ -127,22 +133,25 @@ TEST_F(AclTableManagerTest, addAclEntryDscp) { // DSCP not supported EXPECT_THROW( - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1), + saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), FbossError); } TEST_F(AclTableManagerTest, addAclEntryDstMac) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); aclEntry->setDstMac(kMac()); aclEntry->setActionType(kActionType()); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -150,9 +159,11 @@ TEST_F(AclTableManagerTest, addAclEntryDstMac) { } TEST_F(AclTableManagerTest, addAclEntryWithCounter) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto counter = cfg::TrafficCounter(); counter.name() = "stat0.c"; @@ -164,8 +175,8 @@ TEST_F(AclTableManagerTest, addAclEntryWithCounter) { aclEntry->setDstMac(kMac()); aclEntry->setAclAction(action); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -184,17 +195,19 @@ TEST_F(AclTableManagerTest, addAclEntryWithCounter) { } TEST_F(AclTableManagerTest, addTwoAclEntry) { - auto aclTableId = saiManagerTable->aclTableManager() - .getAclTableHandle(kAclTable1) - ->aclTable->adapterKey(); + auto aclTableId = + saiManagerTable->aclTableManager() + .getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) + ->aclTable->adapterKey(); auto aclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); aclEntry->setDstMac(kMac()); aclEntry->setActionType(kActionType()); - AclEntrySaiId aclEntryId = - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + AclEntrySaiId aclEntryId = saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot = saiApiTable->aclApi().getAttribute( aclEntryId, SaiAclEntryTraits::Attributes::TableId()); @@ -205,8 +218,8 @@ TEST_F(AclTableManagerTest, addTwoAclEntry) { aclEntry->setDstMac(kMac2()); aclEntry2->setActionType(kActionType()); - AclEntrySaiId aclEntryId2 = - saiManagerTable->aclTableManager().addAclEntry(aclEntry2, kAclTable1); + AclEntrySaiId aclEntryId2 = saiManagerTable->aclTableManager().addAclEntry( + aclEntry2, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto tableIdGot2 = saiApiTable->aclApi().getAttribute( aclEntryId2, SaiAclEntryTraits::Attributes::TableId()); @@ -219,7 +232,8 @@ TEST_F(AclTableManagerTest, addDupAclEntry) { aclEntry->setDstMac(kMac()); aclEntry->setActionType(kActionType()); - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); auto dupAclEntry = std::make_shared(kPriority(), std::string("AclEntry1")); @@ -227,7 +241,9 @@ TEST_F(AclTableManagerTest, addDupAclEntry) { dupAclEntry->setActionType(cfg::AclActionType::DENY); EXPECT_THROW( - saiManagerTable->aclTableManager().addAclEntry(dupAclEntry, kAclTable1), + saiManagerTable->aclTableManager().addAclEntry( + dupAclEntry, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()), FbossError); } @@ -237,10 +253,11 @@ TEST_F(AclTableManagerTest, getAclEntry) { aclEntry->setDstMac(kMac()); aclEntry->setActionType(kActionType()); - saiManagerTable->aclTableManager().addAclEntry(aclEntry, kAclTable1); + saiManagerTable->aclTableManager().addAclEntry( + aclEntry, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); - auto aclTableHandle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto aclTableHandle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(aclTableHandle); EXPECT_TRUE(aclTableHandle->aclTable); @@ -253,8 +270,8 @@ TEST_F(AclTableManagerTest, getAclEntry) { } TEST_F(AclTableManagerTest, checkNonExistentAclEntry) { - auto aclTableHandle = - saiManagerTable->aclTableManager().getAclTableHandle(kAclTable1); + auto aclTableHandle = saiManagerTable->aclTableManager().getAclTableHandle( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_TRUE(aclTableHandle); EXPECT_TRUE(aclTableHandle->aclTable); diff --git a/fboss/agent/hw/sai/switch/tests/phy/MacsecManagerTest.cpp b/fboss/agent/hw/sai/switch/tests/phy/MacsecManagerTest.cpp index 77774fb514cd8..1e288614046e1 100644 --- a/fboss/agent/hw/sai/switch/tests/phy/MacsecManagerTest.cpp +++ b/fboss/agent/hw/sai/switch/tests/phy/MacsecManagerTest.cpp @@ -11,6 +11,7 @@ #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/hw/sai/api/Types.h" #include "fboss/agent/hw/sai/store/SaiStore.h" +#include "fboss/agent/hw/sai/switch/SaiAclTableGroupManager.h" #include "fboss/agent/hw/sai/switch/SaiAclTableManager.h" #include "fboss/agent/hw/sai/switch/SaiMacsecManager.h" #include "fboss/agent/hw/sai/switch/tests/ManagerTestBase.h" @@ -112,6 +113,10 @@ class MacsecManagerTest : public ManagerTestBase { rxSak1.keyIdHex()->begin(), rxSak1.keyIdHex()->end(), rxSecureAssocAuthKey.data()); + saiManagerTable->aclTableGroupManager().addAclTableGroup( + std::make_shared(cfg::AclStage::INGRESS_MACSEC)); + saiManagerTable->aclTableGroupManager().addAclTableGroup( + std::make_shared(cfg::AclStage::EGRESS_MACSEC)); } TestPort p0; diff --git a/fboss/agent/hw/sai/tracer/AclApiTracer.cpp b/fboss/agent/hw/sai/tracer/AclApiTracer.cpp index b65cae42f3c52..83224213badd1 100644 --- a/fboss/agent/hw/sai/tracer/AclApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/AclApiTracer.cpp @@ -56,6 +56,16 @@ std::map> _AclTableMap{ #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) SAI_ATTR_MAP(AclTable, FieldIpv6NextHeader), #endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + SAI_ATTR_MAP(AclTable, UserDefinedFieldGroupMin0), + SAI_ATTR_MAP(AclTable, UserDefinedFieldGroupMin1), + SAI_ATTR_MAP(AclTable, UserDefinedFieldGroupMin2), + SAI_ATTR_MAP(AclTable, UserDefinedFieldGroupMin3), + SAI_ATTR_MAP(AclTable, UserDefinedFieldGroupMin4), +#endif }; std::map> _AclCounterMap{ @@ -115,6 +125,16 @@ std::map> _AclEntryMap{ #endif #if !defined(TAJO_SDK) && !defined(BRCM_SAI_SDK_XGS) SAI_ATTR_MAP(AclEntry, FieldIpv6NextHeader), +#endif +#if ( \ + (SAI_API_VERSION >= SAI_VERSION(1, 14, 0) || \ + (defined(BRCM_SAI_SDK_GTE_11_0) && defined(BRCM_SAI_SDK_XGS))) && \ + !defined(TAJO_SDK)) + SAI_ATTR_MAP(AclEntry, UserDefinedFieldGroupMin0), + SAI_ATTR_MAP(AclEntry, UserDefinedFieldGroupMin1), + SAI_ATTR_MAP(AclEntry, UserDefinedFieldGroupMin2), + SAI_ATTR_MAP(AclEntry, UserDefinedFieldGroupMin3), + SAI_ATTR_MAP(AclEntry, UserDefinedFieldGroupMin4), #endif SAI_ATTR_MAP(AclEntry, ActionPacketAction), SAI_ATTR_MAP(AclEntry, ActionCounter), diff --git a/fboss/agent/hw/sai/tracer/MirrorApiTracer.cpp b/fboss/agent/hw/sai/tracer/MirrorApiTracer.cpp index cfedc17767fc3..bc16ec947c1bf 100644 --- a/fboss/agent/hw/sai/tracer/MirrorApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/MirrorApiTracer.cpp @@ -37,6 +37,7 @@ std::map> _MirrorSessionMap{ }; void handleExtensionAttributes() { + SAI_EXT_ATTR_MAP_2(MirrorSession, EnhancedRemoteMirror, TcBufferLimit) SAI_EXT_ATTR_MAP_2(MirrorSession, SflowMirror, TcBufferLimit) } diff --git a/fboss/agent/hw/sai/tracer/PortApiTracer.cpp b/fboss/agent/hw/sai/tracer/PortApiTracer.cpp index a62ac487d3305..18533126b4bca 100644 --- a/fboss/agent/hw/sai/tracer/PortApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/PortApiTracer.cpp @@ -175,6 +175,7 @@ void handleExtensionAttributes() { SAI_EXT_ATTR_MAP(Port, CondEntropyRehashEnable) SAI_EXT_ATTR_MAP(Port, CondEntropyRehashPeriodUS) SAI_EXT_ATTR_MAP(Port, CondEntropyRehashSeed) + SAI_EXT_ATTR_MAP(Port, ShelEnable) } } // namespace diff --git a/fboss/agent/hw/sai/tracer/RouterInterfaceApiTracer.cpp b/fboss/agent/hw/sai/tracer/RouterInterfaceApiTracer.cpp index 61ea05def561e..b46c2a4b6b206 100644 --- a/fboss/agent/hw/sai/tracer/RouterInterfaceApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/RouterInterfaceApiTracer.cpp @@ -13,7 +13,6 @@ #include #include "fboss/agent/hw/sai/api/RouterInterfaceApi.h" -#include "fboss/agent/hw/sai/tracer/PortApiTracer.h" #include "fboss/agent/hw/sai/tracer/Utils.h" using folly::to; diff --git a/fboss/agent/hw/sai/tracer/SaiTracer.cpp b/fboss/agent/hw/sai/tracer/SaiTracer.cpp index f57c1d3826148..3621398d2fd98 100644 --- a/fboss/agent/hw/sai/tracer/SaiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/SaiTracer.cpp @@ -196,7 +196,7 @@ sai_status_t __wrap_sai_api_query( return rv; } -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) if (UNLIKELY(sai_api_id >= SAI_API_MAX)) { switch (static_cast(sai_api_id)) { case SAI_API_TAM_EVENT_AGING_GROUP: @@ -1349,7 +1349,7 @@ vector SaiTracer::setAttrList( to(sai_attribute, "[", i, "].id=", attr_list[i].id)); } -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) if (UNLIKELY(object_type >= SAI_OBJECT_TYPE_MAX)) { switch (static_cast(object_type)) { case SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP: @@ -1884,7 +1884,7 @@ void SaiTracer::initVarCounts() { varCounts_.emplace(SAI_OBJECT_TYPE_TAM_TRANSPORT, 0); varCounts_.emplace(SAI_OBJECT_TYPE_TAM_REPORT, 0); varCounts_.emplace(SAI_OBJECT_TYPE_TAM_EVENT_ACTION, 0); -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) varCounts_.emplace( static_cast(SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP), 0); #endif diff --git a/fboss/agent/hw/sai/tracer/SaiTracer.h b/fboss/agent/hw/sai/tracer/SaiTracer.h index c61aad37b1725..90cf01da3489a 100644 --- a/fboss/agent/hw/sai/tracer/SaiTracer.h +++ b/fboss/agent/hw/sai/tracer/SaiTracer.h @@ -28,7 +28,7 @@ extern "C" { #include -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) #include #ifndef IS_OSS_BRCM_SAI #include @@ -246,7 +246,7 @@ class SaiTracer { sai_switch_api_t* switchApi_; sai_system_port_api_t* systemPortApi_; sai_tam_api_t* tamApi_; -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) sai_tam_event_aging_group_api_t* tamEventAgingGroupApi_; #endif sai_tunnel_api_t* tunnelApi_; @@ -313,6 +313,7 @@ class SaiTracer { {TYPE_INDEX(std::vector), &portFrequencyOffsetPpmListAttr}, {TYPE_INDEX(std::vector), &portSnrListAttr}, + {TYPE_INDEX(AclEntryFieldU8List), &aclEntryFieldU8ListAttr}, #endif }; @@ -424,7 +425,7 @@ class SaiTracer { {SAI_OBJECT_TYPE_TAM_TRANSPORT, "tamTransport_"}, {SAI_OBJECT_TYPE_TAM_REPORT, "tamReport_"}, {SAI_OBJECT_TYPE_TAM_EVENT_ACTION, "tamEventAction_"}, -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) {static_cast(SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP), "tamEventAgingGroup_"}, #endif @@ -493,7 +494,7 @@ class SaiTracer { {SAI_OBJECT_TYPE_TAM_TRANSPORT, "tam_api->"}, {SAI_OBJECT_TYPE_TAM_REPORT, "tam_api->"}, {SAI_OBJECT_TYPE_TAM_EVENT_ACTION, "tam_api->"}, -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) {static_cast(SAI_OBJECT_TYPE_TAM_EVENT_AGING_GROUP), "tam_event_aging_group_api->"}, #endif @@ -871,7 +872,12 @@ class SaiTracer { SaiTracer::getInstance()->listFuncMap_.find(typeIndex); \ if (listFuncMatch != SaiTracer::getInstance()->listFuncMap_.end()) { \ (*listFuncMatch->second)( \ - attr_list, i, listCount++, attrLines, rv == 0); \ + attr_list, i, listCount, attrLines, rv == 0); \ + if (typeIndex == TYPE_INDEX(AclEntryFieldU8List)) { \ + listCount += 2; \ + } else { \ + listCount++; \ + } \ continue; \ } \ } diff --git a/fboss/agent/hw/sai/tracer/SwitchApiTracer.cpp b/fboss/agent/hw/sai/tracer/SwitchApiTracer.cpp index 1db5d141c2a6d..07be2e41a63fc 100644 --- a/fboss/agent/hw/sai/tracer/SwitchApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/SwitchApiTracer.cpp @@ -127,6 +127,19 @@ void handleExtensionAttributes() { SAI_EXT_ATTR_MAP(Switch, SramFreePercentXoffTh); SAI_EXT_ATTR_MAP(Switch, SramFreePercentXonTh); SAI_EXT_ATTR_MAP(Switch, NoAclsForTraps); + SAI_EXT_ATTR_MAP(Switch, MaxSystemPortId); + SAI_EXT_ATTR_MAP(Switch, MaxLocalSystemPortId); + SAI_EXT_ATTR_MAP(Switch, MaxSystemPorts); + SAI_EXT_ATTR_MAP(Switch, MaxVoqs); + SAI_EXT_ATTR_MAP(Switch, FabricCllfcTxCreditTh); + SAI_EXT_ATTR_MAP(Switch, VoqDramBoundTh); + SAI_EXT_ATTR_MAP(Switch, CondEntropyRehashPeriodUS); + SAI_EXT_ATTR_MAP(Switch, ShelSrcIp); + SAI_EXT_ATTR_MAP(Switch, ShelDstIp); + SAI_EXT_ATTR_MAP(Switch, ShelSrcMac); + SAI_EXT_ATTR_MAP(Switch, ShelPeriodicInterval); + SAI_EXT_ATTR_MAP(Switch, FirmwareCoreToUse); + SAI_EXT_ATTR_MAP(Switch, FirmwareLogFile); } } // namespace diff --git a/fboss/agent/hw/sai/tracer/SystemPortApiTracer.cpp b/fboss/agent/hw/sai/tracer/SystemPortApiTracer.cpp index ffcf6b3e74e77..821ad136e0714 100644 --- a/fboss/agent/hw/sai/tracer/SystemPortApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/SystemPortApiTracer.cpp @@ -27,6 +27,10 @@ std::map> _SystemPortMap{ SAI_ATTR_MAP(SystemPort, ConfigInfo), SAI_ATTR_MAP(SystemPort, QosTcToQueueMap), }; + +void handleExtensionAttributes() { + SAI_EXT_ATTR_MAP(SystemPort, ShelPktDstEnable) +} } // namespace namespace facebook::fboss { @@ -37,6 +41,7 @@ WRAP_SET_ATTR_FUNC(system_port, SAI_OBJECT_TYPE_SYSTEM_PORT, systemPort); WRAP_GET_ATTR_FUNC(system_port, SAI_OBJECT_TYPE_SYSTEM_PORT, systemPort); sai_system_port_api_t* wrappedSystemPortApi() { + handleExtensionAttributes(); static sai_system_port_api_t systemPortWrappers; systemPortWrappers.create_system_port = &wrap_create_system_port; diff --git a/fboss/agent/hw/sai/tracer/TamApiTracer.cpp b/fboss/agent/hw/sai/tracer/TamApiTracer.cpp index 5ac31ca4158e1..1a17729b09f04 100644 --- a/fboss/agent/hw/sai/tracer/TamApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/TamApiTracer.cpp @@ -130,7 +130,7 @@ sai_tam_api_t* wrappedTamApi() { tamWrappers.create_tam_collector = &wrap_create_tam_collector; tamWrappers.remove_tam_collector = &wrap_remove_tam_collector; tamWrappers.set_tam_collector_attribute = &wrap_set_tam_collector_attribute; - tamWrappers.get_tam_collector_attribute = &wrap_get_tam_transport_attribute; + tamWrappers.get_tam_collector_attribute = &wrap_get_tam_collector_attribute; return &tamWrappers; } diff --git a/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.cpp b/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.cpp index 6049cc4019818..edba087162219 100644 --- a/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.cpp +++ b/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.cpp @@ -8,16 +8,16 @@ * */ -#if defined(SAI_VERSION_11_3_0_0_DNX_ODP) || \ - defined(SAI_VERSION_11_7_0_0_DNX_ODP) +#include "fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h" // NOLINT(facebook-unused-include-check) -#include "fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h" #include #include #include "fboss/agent/hw/sai/api/TamEventAgingGroupApi.h" #include "fboss/agent/hw/sai/tracer/Utils.h" +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + using folly::to; namespace { diff --git a/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h b/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h index 1f06729f8c237..2c5ed00ce54dc 100644 --- a/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h +++ b/fboss/agent/hw/sai/tracer/TamEventAgingGroupApiTracer.h @@ -2,11 +2,10 @@ #pragma once -#if defined(SAI_VERSION_11_3_0_0_DNX_ODP) || \ - defined(SAI_VERSION_11_7_0_0_DNX_ODP) - #include "fboss/agent/hw/sai/tracer/SaiTracer.h" +#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) + extern "C" { #include #include diff --git a/fboss/agent/hw/sai/tracer/Utils.cpp b/fboss/agent/hw/sai/tracer/Utils.cpp index dc540f5af8650..5fc264686f3c4 100644 --- a/fboss/agent/hw/sai/tracer/Utils.cpp +++ b/fboss/agent/hw/sai/tracer/Utils.cpp @@ -247,6 +247,62 @@ void aclEntryFieldMacAttr( } } +void aclEntryFieldU8ListAttr( + const sai_attribute_t* attr_list, + int i, + uint32_t listIndex, + vector& attrLines, + bool logEntry) { + uint32_t listLimit = SaiTracer::getInstance()->checkListCount( + listIndex + 1, + sizeof(sai_uint32_t), + attr_list[i].value.aclfield.data.u8list.count); + + string prefix = to("s_a", "[", i, "].value.aclfield."); + attrLines.push_back( + to(prefix, "enable=", attr_list[i].value.aclfield.enable)); + + prefix = to("s_a", "[", i, "].value.aclfield.data.u8list."); + attrLines.push_back(to( + prefix, "count=", attr_list[i].value.aclfield.data.u8list.count)); + if (logEntry && attr_list[i].value.aclfield.data.u8list.list) { + attrLines.push_back( + to(prefix, "list=(sai_uint8_t*)(list_", listIndex, ")")); + for (int j = 0; + j < std::min(attr_list[i].value.aclfield.data.u8list.count, listLimit); + ++j) { + attrLines.push_back(to( + prefix, + "list[", + j, + "]=", + attr_list[i].value.aclfield.data.u8list.list[j])); + } + } else { + attrLines.push_back(to(prefix, "list=NULL")); + } + + prefix = to("s_a", "[", i, "].value.aclfield.mask.u8list."); + attrLines.push_back(to( + prefix, "count=", attr_list[i].value.aclfield.mask.u8list.count)); + if (logEntry && attr_list[i].value.aclfield.mask.u8list.list) { + attrLines.push_back( + to(prefix, "list=(sai_uint8_t*)(list_", listIndex + 1, ")")); + for (int j = 0; + j < std::min(attr_list[i].value.aclfield.mask.u8list.count, listLimit); + ++j) { + attrLines.push_back(to( + prefix, + "list[", + j, + "]=", + attr_list[i].value.aclfield.mask.u8list.list[j])); + } + } else { + attrLines.push_back(to(prefix, "list=NULL")); + } +} + void systemPortConfigAttr( const sai_attribute_t* attr_list, int i, diff --git a/fboss/agent/hw/sai/tracer/Utils.h b/fboss/agent/hw/sai/tracer/Utils.h index 069b017e70f3c..91def9ea567ae 100644 --- a/fboss/agent/hw/sai/tracer/Utils.h +++ b/fboss/agent/hw/sai/tracer/Utils.h @@ -124,6 +124,13 @@ void prbsRxStateAttr( /* List Types */ +void aclEntryFieldU8ListAttr( + const sai_attribute_t* attr_list, + int i, + uint32_t listIndex, + std::vector& attrLines, + bool logEntry = true); + void oidListAttr( const sai_attribute_t* attr_list, int i, diff --git a/fboss/agent/hw/sai/tracer/run/Main.cpp b/fboss/agent/hw/sai/tracer/run/Main.cpp index f5d384fc6f3e4..3c3f3dde2d5aa 100644 --- a/fboss/agent/hw/sai/tracer/run/Main.cpp +++ b/fboss/agent/hw/sai/tracer/run/Main.cpp @@ -10,9 +10,7 @@ #include "fboss/agent/hw/sai/tracer/run/SaiLog.h" -extern "C" { -#include -} +extern "C" {} int main() { facebook::fboss::run_trace(); diff --git a/fboss/agent/hw/sim/SimPlatform.cpp b/fboss/agent/hw/sim/SimPlatform.cpp index f8a710c641412..6d7506095219e 100644 --- a/fboss/agent/hw/sim/SimPlatform.cpp +++ b/fboss/agent/hw/sim/SimPlatform.cpp @@ -16,8 +16,6 @@ #include "fboss/agent/hw/sim/SimSwitch.h" #include "fboss/lib/platforms/PlatformProductInfo.h" -#include - using std::make_unique; using std::unique_ptr; diff --git a/fboss/agent/hw/sim/SimPlatform.h b/fboss/agent/hw/sim/SimPlatform.h index bf8b7c562f03b..cf703ccd161a6 100644 --- a/fboss/agent/hw/sim/SimPlatform.h +++ b/fboss/agent/hw/sim/SimPlatform.h @@ -55,13 +55,9 @@ class SimPlatform : public Platform { private: void setupAsic( - cfg::SwitchType /*switchType*/, std::optional /*switchId*/, - int16_t /*switchIndex*/, - std::optional /*systemPortRange*/, - folly::MacAddress& /*mac*/, - std::optional /*fabricNodeRole) */ - ) override { + const cfg::SwitchInfo& /*switchInfo*/, + std::optional /*role*/) override { // noop - no asic implemented } // Forbidden copy constructor and assignment operator diff --git a/fboss/agent/hw/switch_asics/ChenabAsic.cpp b/fboss/agent/hw/switch_asics/ChenabAsic.cpp index b61d582f42625..a3f08daf79aec 100644 --- a/fboss/agent/hw/switch_asics/ChenabAsic.cpp +++ b/fboss/agent/hw/switch_asics/ChenabAsic.cpp @@ -74,9 +74,11 @@ bool ChenabAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::ACL_TABLE_GROUP: case HwAsic::Feature::RESOURCE_USAGE_STATS: case HwAsic::Feature::SAI_TTL0_PACKET_FORWARD_ENABLE: + case HwAsic::Feature::L3_INTF_MTU: + case HwAsic::Feature::PORT_MTU_ERROR_TRAP: + case HwAsic::Feature::EGRESS_ACL_TABLE: return true; case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SAI_ECMP_HASH_ALGORITHM: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: @@ -187,8 +189,15 @@ bool ChenabAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: - return false; - default: + case HwAsic::Feature::NO_RX_REASON_TRAP: + case HwAsic::Feature::EGRESS_GVOQ_WATERMARK_BYTES: + case HwAsic::Feature::INGRESS_PRIORITY_GROUP_SHARED_WATERMARK: + case HwAsic::Feature::MULTIPLE_EGRESS_BUFFER_POOL: + case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; @@ -289,6 +298,11 @@ uint32_t ChenabAsic::getMaxLabelStackDepth() const { uint64_t ChenabAsic::getMMUSizeBytes() const { return 420000; // return 108 * 1024 * 1024; } +uint64_t ChenabAsic::getSramSizeBytes() const { + // No HBM! + return getMMUSizeBytes(); +} + uint32_t ChenabAsic::getMaxMirrors() const { // TODO - verify this return 4; @@ -318,7 +332,7 @@ uint32_t ChenabAsic::getMaxWideEcmpSize() const { uint32_t ChenabAsic::getMaxLagMemberSize() const { return 512; } -int ChenabAsic::getSystemPortIDOffset() const { +int ChenabAsic::getSflowPortIDOffset() const { return 500; } uint32_t ChenabAsic::getSflowShimHeaderSize() const { diff --git a/fboss/agent/hw/switch_asics/ChenabAsic.h b/fboss/agent/hw/switch_asics/ChenabAsic.h index 3f508d9869286..42e2c39a8d1d4 100644 --- a/fboss/agent/hw/switch_asics/ChenabAsic.h +++ b/fboss/agent/hw/switch_asics/ChenabAsic.h @@ -18,20 +18,11 @@ namespace facebook::fboss { class ChenabAsic : public HwAsic { public: ChenabAsic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : HwAsic( - type, - id, - index, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::NPU}) {} + : HwAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::NPU}) {} + AsicVendor getAsicVendor() const override; std::string getVendor() const override; bool isSupported(Feature feature) const override; @@ -48,6 +39,7 @@ class ChenabAsic : public HwAsic { cfg::PortType /*portType*/) const override; uint32_t getMaxLabelStackDepth() const override; uint64_t getMMUSizeBytes() const override; + uint64_t getSramSizeBytes() const override; uint32_t getMaxMirrors() const override; uint64_t getDefaultReservedBytes( cfg::StreamType /*streamType*/, @@ -59,7 +51,7 @@ class ChenabAsic : public HwAsic { uint16_t getMirrorTruncateSize() const override; uint32_t getMaxWideEcmpSize() const override; uint32_t getMaxLagMemberSize() const override; - int getSystemPortIDOffset() const override; + int getSflowPortIDOffset() const override; uint32_t getSflowShimHeaderSize() const override; std::optional getPortSerdesPreemphasis() const override; uint32_t getPacketBufferUnitSize() const override; diff --git a/fboss/agent/hw/switch_asics/CredoPhyAsic.cpp b/fboss/agent/hw/switch_asics/CredoPhyAsic.cpp index cb2c5697f038c..49676c51958b3 100644 --- a/fboss/agent/hw/switch_asics/CredoPhyAsic.cpp +++ b/fboss/agent/hw/switch_asics/CredoPhyAsic.cpp @@ -56,6 +56,9 @@ uint32_t CredoPhyAsic::getMaxLabelStackDepth() const { uint64_t CredoPhyAsic::getMMUSizeBytes() const { throw FbossError("CredoPhyAsic doesn't support MMU feature"); }; +uint64_t CredoPhyAsic::getSramSizeBytes() const { + throw FbossError("CredoPhyAsic doesn't support MMU feature"); +} int CredoPhyAsic::getMaxNumLogicalPorts() const { throw FbossError("CredoPhyAsic doesn't support logical ports feature"); } diff --git a/fboss/agent/hw/switch_asics/CredoPhyAsic.h b/fboss/agent/hw/switch_asics/CredoPhyAsic.h index 4b32e7ec39b77..5a4c48c90bb8a 100644 --- a/fboss/agent/hw/switch_asics/CredoPhyAsic.h +++ b/fboss/agent/hw/switch_asics/CredoPhyAsic.h @@ -9,20 +9,10 @@ namespace facebook::fboss { class CredoPhyAsic : public HwAsic { public: CredoPhyAsic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : HwAsic( - type, - id, - index, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::PHY}) {} + : HwAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::PHY}) {} bool isSupported(Feature feature) const override; cfg::AsicType getAsicType() const override { return cfg::AsicType::ASIC_TYPE_ELBERT_8DD; @@ -46,6 +36,7 @@ class CredoPhyAsic : public HwAsic { cfg::PortType portType) const override; uint32_t getMaxLabelStackDepth() const override; uint64_t getMMUSizeBytes() const override; + uint64_t getSramSizeBytes() const override; uint32_t getMaxMirrors() const override; uint64_t getDefaultReservedBytes( cfg::StreamType streamType, diff --git a/fboss/agent/hw/switch_asics/EbroAsic.cpp b/fboss/agent/hw/switch_asics/EbroAsic.cpp index 03e2d71bd6f1e..a2ebdf26b0bd8 100644 --- a/fboss/agent/hw/switch_asics/EbroAsic.cpp +++ b/fboss/agent/hw/switch_asics/EbroAsic.cpp @@ -174,7 +174,6 @@ bool EbroAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -190,6 +189,11 @@ bool EbroAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::MULTIPLE_EGRESS_BUFFER_POOL: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; case HwAsic::Feature::SAI_ACL_ENTRY_SRC_PORT_QUALIFIER: /* diff --git a/fboss/agent/hw/switch_asics/EbroAsic.h b/fboss/agent/hw/switch_asics/EbroAsic.h index dad07c1cc7e56..153e3d32f2b38 100644 --- a/fboss/agent/hw/switch_asics/EbroAsic.h +++ b/fboss/agent/hw/switch_asics/EbroAsic.h @@ -10,22 +10,10 @@ namespace facebook::fboss { class EbroAsic : public TajoAsic { public: EbroAsic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : TajoAsic( - type, - id, - index, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::NPU, - cfg::SwitchType::VOQ, - cfg::SwitchType::FABRIC}) { + : TajoAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::NPU}) { if (sdkVersion.has_value() && sdkVersion->asicSdk().has_value()) { currentSdkVersion_ = getAsicSdkVersion(sdkVersion->asicSdk().value()); auto p4WarmbootSdkVersion = getAsicSdkVersion(p4WarmbootBaseSdk); @@ -63,6 +51,10 @@ class EbroAsic : public TajoAsic { uint64_t getMMUSizeBytes() const override { return 108 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMaxMirrors() const override { // TODO - verify this return 4; @@ -92,7 +84,7 @@ class EbroAsic : public TajoAsic { uint32_t getMaxLagMemberSize() const override { return 512; } - int getSystemPortIDOffset() const override { + int getSflowPortIDOffset() const override { return 1000; } uint32_t getSflowShimHeaderSize() const override { diff --git a/fboss/agent/hw/switch_asics/FakeAsic.h b/fboss/agent/hw/switch_asics/FakeAsic.h index 1bef8be456243..f46247dc1b7d7 100644 --- a/fboss/agent/hw/switch_asics/FakeAsic.h +++ b/fboss/agent/hw/switch_asics/FakeAsic.h @@ -13,22 +13,17 @@ namespace facebook::fboss { class FakeAsic : public HwAsic { public: FakeAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) : HwAsic( - switchType, switchId, - index, - systemPortRange, - mac, + switchInfo, sdkVersion, {cfg::SwitchType::NPU, cfg::SwitchType::VOQ, cfg::SwitchType::FABRIC}) {} + bool isSupported(Feature feature) const override { switch (feature) { case Feature::HSDK: @@ -101,6 +96,12 @@ class FakeAsic : public HwAsic { // Fake MMU size return 64 * 1024 * 1024; } + + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } + uint32_t getMaxMirrors() const override { return 4; } @@ -203,7 +204,8 @@ class FakeAsic : public HwAsic { cfg::Range64 getReservedEncapIndexRange() const override { return makeRange(1000, 2000); } - HwAsic::RecyclePortInfo getRecyclePortInfo() const override { + HwAsic::RecyclePortInfo getRecyclePortInfo( + InterfaceNodeRole /* intfRole */) const override { return { .coreId = 0, .corePortIndex = 1, diff --git a/fboss/agent/hw/switch_asics/HwAsic.cpp b/fboss/agent/hw/switch_asics/HwAsic.cpp index 3f805c42e0879..157fe757e81eb 100644 --- a/fboss/agent/hw/switch_asics/HwAsic.cpp +++ b/fboss/agent/hw/switch_asics/HwAsic.cpp @@ -38,25 +38,31 @@ constexpr auto kDefaultDropEgressID = 100000; namespace facebook::fboss { HwAsic::HwAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - const folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional sdkVersion, std::unordered_set supportedModes) - : switchType_(switchType), + : switchType_(*switchInfo.switchType()), switchId_(switchId), - switchIndex_(switchIndex), - systemPortRange_(systemPortRange), - asicMac_(mac), + switchIndex_(*switchInfo.switchIndex()), + systemPortRanges_(*switchInfo.systemPortRanges()), sdkVersion_(sdkVersion) { + CHECK(switchInfo.switchMac().has_value()); + asicMac_ = folly::MacAddress(*switchInfo.switchMac()); if (supportedModes.find(switchType_) == supportedModes.end()) { throw std::runtime_error( folly::to("Unsupported Mode: ", switchType_)); } + if (switchInfo.globalSystemPortOffset()) { + globalSystemPortOffset_ = *switchInfo.globalSystemPortOffset(); + } + if (switchInfo.localSystemPortOffset()) { + localSystemPortOffset_ = *switchInfo.localSystemPortOffset(); + } + if (switchInfo.inbandPortId()) { + inbandPortId_ = *switchInfo.inbandPortId(); + } } - /* * Default Content Aware Processor group ID for ACLs */ @@ -69,64 +75,45 @@ int HwAsic::getDefaultACLGroupID() const { } std::unique_ptr HwAsic::makeAsic( - cfg::AsicType asicType, - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - const folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional sdkVersion) { - switch (asicType) { + switch (*switchInfo.asicType()) { case cfg::AsicType::ASIC_TYPE_FAKE: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_MOCK: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_TRIDENT2: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_TOMAHAWK: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_TOMAHAWK3: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_TOMAHAWK4: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_TOMAHAWK5: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_ELBERT_8DD: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_EBRO: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_YUBA: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_CHENAB: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_JERICHO2: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_JERICHO3: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_RAMON: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_RAMON3: - return std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + return std::make_unique(switchId, switchInfo, sdkVersion); case cfg::AsicType::ASIC_TYPE_GARONNE: case cfg::AsicType::ASIC_TYPE_SANDIA_PHY: - throw FbossError("Unexcepted asic type: ", asicType); + throw FbossError("Unexcepted asic type: ", *switchInfo.asicType()); }; - throw FbossError("Unexcepted asic type: ", asicType); + throw FbossError("Unexcepted asic type: ", *switchInfo.asicType()); } /* * Default Content Aware Processor group ID for TeFlows @@ -163,7 +150,8 @@ cfg::Range64 HwAsic::getReservedEncapIndexRange() const { "Reserved encap idx range unimplemented for: ", getAsicTypeStr()); } -HwAsic::RecyclePortInfo HwAsic::getRecyclePortInfo() const { +HwAsic::RecyclePortInfo HwAsic::getRecyclePortInfo( + InterfaceNodeRole /* intfRole */) const { throw FbossError("Recycle port info unimplemented for: ", getAsicTypeStr()); } diff --git a/fboss/agent/hw/switch_asics/HwAsic.h b/fboss/agent/hw/switch_asics/HwAsic.h index 08b75f8b4e31e..e362e4e178c63 100644 --- a/fboss/agent/hw/switch_asics/HwAsic.h +++ b/fboss/agent/hw/switch_asics/HwAsic.h @@ -11,11 +11,8 @@ namespace facebook::fboss { class HwAsic { public: HwAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - const folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional sdkVersion = std::nullopt, std::unordered_set supportedModes = { cfg::SwitchType::NPU}); @@ -177,7 +174,6 @@ class HwAsic { FABRIC_LINK_DOWN_CELL_DROP_COUNTER, CRC_ERROR_DETECT, EVENTOR_PORT_FOR_SFLOW, - CPU_VOQ_BUFFER_PROFILE, SAI_ECMP_HASH_ALGORITHM, SWITCH_REACHABILITY_CHANGE_NOTIFY, CABLE_PROPOGATION_DELAY, @@ -199,6 +195,11 @@ class HwAsic { PORT_MTU_ERROR_TRAP, L3_INTF_MTU, DEDICATED_CPU_BUFFER_POOL, + EGRESS_ACL_TABLE, + FAST_LLFC_COUNTER, + INGRESS_SRAM_MIN_BUFFER_WATERMARK, + FDR_FIFO_WATERMARK, + EGRESS_CELL_ERROR_STATS, }; enum class AsicMode { @@ -220,14 +221,14 @@ class HwAsic { DUAL_STAGE_L1, DUAL_STAGE_L2, }; + enum InterfaceNodeRole { + IN_CLUSTER_NODE, + DUAL_STAGE_EDGE_NODE, + }; virtual ~HwAsic() {} static std::unique_ptr makeAsic( - cfg::AsicType asicType, - cfg::SwitchType switchType, std::optional switchID, - int16_t switchIndex, - std::optional systemPortRange, - const folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional sdkVersion); virtual bool isSupported(Feature) const = 0; virtual cfg::AsicType getAsicType() const = 0; @@ -309,7 +310,7 @@ class HwAsic { * This will be added to PortID and will be carried in the * sflow shim header */ - virtual int getSystemPortIDOffset() const { + virtual int getSflowPortIDOffset() const { return 0; } @@ -357,8 +358,8 @@ class HwAsic { int16_t getSwitchIndex() const { return switchIndex_; } - std::optional getSystemPortRange() const { - return systemPortRange_; + const cfg::SystemPortRanges& getSystemPortRanges() const { + return systemPortRanges_; } virtual cfg::StreamType getDefaultStreamType() const { @@ -379,13 +380,15 @@ class HwAsic { uint32_t coreId; uint32_t corePortIndex; uint32_t speedMbps; + uint32_t inbandPortId; }; std::optional getSdkVersion() const { return sdkVersion_; } - virtual RecyclePortInfo getRecyclePortInfo() const; + virtual RecyclePortInfo getRecyclePortInfo( + InterfaceNodeRole /* intfRole */) const; cfg::PortLoopbackMode getDesiredLoopbackMode( cfg::PortType portType = cfg::PortType::INTERFACE_PORT) const; @@ -414,6 +417,17 @@ class HwAsic { virtual int getMidPriCpuQueueId() const = 0; virtual int getHiPriCpuQueueId() const = 0; + virtual uint64_t getSramSizeBytes() const = 0; + std::optional getGlobalSystemPortOffset() const { + return globalSystemPortOffset_; + } + std::optional getLocalSystemPortOffset() const { + return localSystemPortOffset_; + } + std::optional getInbandPortId() const { + return inbandPortId_; + } + protected: static cfg::Range64 makeRange(int64_t min, int64_t max); @@ -421,10 +435,12 @@ class HwAsic { cfg::SwitchType switchType_; std::optional switchId_; int16_t switchIndex_; - std::optional systemPortRange_; + cfg::SystemPortRanges systemPortRanges_; cfg::StreamType defaultStreamType_{cfg::StreamType::ALL}; folly::MacAddress asicMac_; std::optional sdkVersion_; + std::optional localSystemPortOffset_, globalSystemPortOffset_, + inbandPortId_; }; } // namespace facebook::fboss diff --git a/fboss/agent/hw/switch_asics/Jericho2Asic.cpp b/fboss/agent/hw/switch_asics/Jericho2Asic.cpp index 4ce365512a903..0e8fb65b96d05 100644 --- a/fboss/agent/hw/switch_asics/Jericho2Asic.cpp +++ b/fboss/agent/hw/switch_asics/Jericho2Asic.cpp @@ -178,7 +178,6 @@ bool Jericho2Asic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -194,6 +193,11 @@ bool Jericho2Asic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; @@ -279,11 +283,13 @@ cfg::Range64 Jericho2Asic::getReservedEncapIndexRange() const { return makeRange(0x200000, 0x300000); } -HwAsic::RecyclePortInfo Jericho2Asic::getRecyclePortInfo() const { +HwAsic::RecyclePortInfo Jericho2Asic::getRecyclePortInfo( + InterfaceNodeRole /* intfRole */) const { return { .coreId = 0, .corePortIndex = 1, - .speedMbps = 10000 // 10G + .speedMbps = 10000, // 10G + .inbandPortId = 1, }; } diff --git a/fboss/agent/hw/switch_asics/Jericho2Asic.h b/fboss/agent/hw/switch_asics/Jericho2Asic.h index 8b1eb631dd7b3..edbc464ece3b8 100644 --- a/fboss/agent/hw/switch_asics/Jericho2Asic.h +++ b/fboss/agent/hw/switch_asics/Jericho2Asic.h @@ -9,20 +9,11 @@ namespace facebook::fboss { class Jericho2Asic : public BroadcomAsic { public: Jericho2Asic( - cfg::SwitchType type, - std::optional id, - int16_t switchIndex, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : BroadcomAsic( - type, - id, - switchIndex, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::VOQ}) {} + : BroadcomAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::VOQ}) { + } bool isSupported(Feature) const override; const std::map& desiredLoopbackModes() const override; @@ -48,6 +39,12 @@ class Jericho2Asic : public BroadcomAsic { // OBM+HBM is available to user of the total ~8G. return uint64_t(6) * 1024 * 1024 * 1024; } + + uint64_t getSramSizeBytes() const override { + // 64MB + return 64 * 1024 * 1024; + } + uint32_t getMMUCellSize() const { return 254; } @@ -103,7 +100,8 @@ class Jericho2Asic : public BroadcomAsic { return true; } cfg::Range64 getReservedEncapIndexRange() const override; - HwAsic::RecyclePortInfo getRecyclePortInfo() const override; + HwAsic::RecyclePortInfo getRecyclePortInfo( + InterfaceNodeRole intfRole) const override; uint32_t getNumMemoryBuffers() const override { return 2; } diff --git a/fboss/agent/hw/switch_asics/Jericho3Asic.cpp b/fboss/agent/hw/switch_asics/Jericho3Asic.cpp index 4867aa294b5db..d540234e781e1 100644 --- a/fboss/agent/hw/switch_asics/Jericho3Asic.cpp +++ b/fboss/agent/hw/switch_asics/Jericho3Asic.cpp @@ -2,6 +2,7 @@ #include "fboss/agent/hw/switch_asics/Jericho3Asic.h" #include +#include "fboss/agent/AgentFeatures.h" namespace { static constexpr int kDefaultMidPriCpuQueueId = 3; @@ -79,7 +80,6 @@ bool Jericho3Asic::isSupported(Feature feature) const { case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: case HwAsic::Feature::SFLOWv6: case HwAsic::Feature::ZERO_SDK_WRITE_WARMBOOT: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DRAM_BLOCK_TIME: @@ -94,6 +94,10 @@ bool Jericho3Asic::isSupported(Feature feature) const { case HwAsic::Feature::EGRESS_GVOQ_WATERMARK_BYTES: case HwAsic::Feature::INGRESS_PRIORITY_GROUP_SHARED_WATERMARK: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return true; // Features not expected to work on SIM case HwAsic::Feature::SHARED_INGRESS_EGRESS_BUFFER_POOL: @@ -198,6 +202,7 @@ bool Jericho3Asic::isSupported(Feature feature) const { case HwAsic::Feature::L3_MTU_ERROR_TRAP: case HwAsic::Feature::L3_INTF_MTU: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: return false; } return false; @@ -286,11 +291,29 @@ cfg::Range64 Jericho3Asic::getReservedEncapIndexRange() const { return makeRange(0x200000, 0x300000); } -HwAsic::RecyclePortInfo Jericho3Asic::getRecyclePortInfo() const { +HwAsic::RecyclePortInfo Jericho3Asic::getRecyclePortInfo( + InterfaceNodeRole intfRole) const { + if (intfRole == InterfaceNodeRole::DUAL_STAGE_EDGE_NODE) { + CHECK(isDualStage3Q2QMode()); + return { + .coreId = 2, + .corePortIndex = 6, + .speedMbps = 100000, // 100G + .inbandPortId = 10, + }; + } else if (isDualStage3Q2QMode()) { + return { + .coreId = 0, + .corePortIndex = 13, + .speedMbps = 100000, // 100G + .inbandPortId = 16391, + }; + } return { .coreId = 2, .corePortIndex = 2, - .speedMbps = 100000 // 100G + .speedMbps = 100000, // 100G + .inbandPortId = 1, }; } diff --git a/fboss/agent/hw/switch_asics/Jericho3Asic.h b/fboss/agent/hw/switch_asics/Jericho3Asic.h index 47724d04da408..2bcd6d4bad2b0 100644 --- a/fboss/agent/hw/switch_asics/Jericho3Asic.h +++ b/fboss/agent/hw/switch_asics/Jericho3Asic.h @@ -10,20 +10,11 @@ namespace facebook::fboss { class Jericho3Asic : public BroadcomAsic { public: Jericho3Asic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : BroadcomAsic( - type, - id, - index, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::VOQ}) {} + : BroadcomAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::VOQ}) { + } bool isSupported(Feature) const override; const std::map& desiredLoopbackModes() const override; @@ -53,6 +44,12 @@ class Jericho3Asic : public BroadcomAsic { // the total OBM+HBM is available to user of the total ~16G. return uint64_t(12) * 1024 * 1024 * 1024; } + + uint64_t getSramSizeBytes() const override { + // 128MB + return 128 * 1024 * 1024; + } + uint32_t getMMUCellSize() const { return 254; } @@ -121,7 +118,8 @@ class Jericho3Asic : public BroadcomAsic { return true; } cfg::Range64 getReservedEncapIndexRange() const override; - HwAsic::RecyclePortInfo getRecyclePortInfo() const override; + HwAsic::RecyclePortInfo getRecyclePortInfo( + InterfaceNodeRole intfRole) const override; uint32_t getNumMemoryBuffers() const override { return 3; } diff --git a/fboss/agent/hw/switch_asics/MockAsic.h b/fboss/agent/hw/switch_asics/MockAsic.h index 506b9b065e0ff..29d7ac6a7fb45 100644 --- a/fboss/agent/hw/switch_asics/MockAsic.h +++ b/fboss/agent/hw/switch_asics/MockAsic.h @@ -12,22 +12,17 @@ class MockAsic : public HwAsic { public: static auto constexpr kDefaultNumPortQueues = 10; MockAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) : HwAsic( - switchType, switchId, - index, - systemPortRange, - mac, + switchInfo, sdkVersion, {cfg::SwitchType::NPU, cfg::SwitchType::VOQ, cfg::SwitchType::FABRIC}) {} + bool isSupported(Feature feature) const override { switch (feature) { case Feature::HSDK: @@ -93,6 +88,10 @@ class MockAsic : public HwAsic { // Fake MMU size return 64 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMaxMirrors() const override { return 4; } @@ -197,11 +196,13 @@ class MockAsic : public HwAsic { cfg::Range64 getReservedEncapIndexRange() const override { return makeRange(1000, 2000); } - HwAsic::RecyclePortInfo getRecyclePortInfo() const override { + HwAsic::RecyclePortInfo getRecyclePortInfo( + InterfaceNodeRole /* intfRole */) const override { return { .coreId = 0, .corePortIndex = 1, - .speedMbps = 10000 // 10G + .speedMbps = 10000, // 10G + .inbandPortId = 1, }; } uint32_t getNumMemoryBuffers() const override { diff --git a/fboss/agent/hw/switch_asics/Ramon3Asic.cpp b/fboss/agent/hw/switch_asics/Ramon3Asic.cpp index b2496a38afe62..a409cc85f79ba 100644 --- a/fboss/agent/hw/switch_asics/Ramon3Asic.cpp +++ b/fboss/agent/hw/switch_asics/Ramon3Asic.cpp @@ -98,6 +98,9 @@ uint32_t Ramon3Asic::getMaxLabelStackDepth() const { uint64_t Ramon3Asic::getMMUSizeBytes() const { throw FbossError("Ramon3 doesn't support MMU feature"); }; +uint64_t Ramon3Asic::getSramSizeBytes() const { + throw FbossError("Ramon3 doesn't support MMU feature"); +} int Ramon3Asic::getMaxNumLogicalPorts() const { throw FbossError("Ramon3 doesn't support logical ports feature"); } diff --git a/fboss/agent/hw/switch_asics/Ramon3Asic.h b/fboss/agent/hw/switch_asics/Ramon3Asic.h index 81c642d5f13fb..87a7a6af63519 100644 --- a/fboss/agent/hw/switch_asics/Ramon3Asic.h +++ b/fboss/agent/hw/switch_asics/Ramon3Asic.h @@ -9,19 +9,13 @@ namespace facebook::fboss { class Ramon3Asic : public BroadcomAsic { public: Ramon3Asic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt, FabricNodeRole fabricNodeRole = FabricNodeRole::SINGLE_STAGE_L1) : BroadcomAsic( - type, - id, - index, - systemPortRange, - mac, + switchId, + switchInfo, sdkVersion, {cfg::SwitchType::FABRIC}), fabricNodeRole_(fabricNodeRole) {} @@ -52,6 +46,7 @@ class Ramon3Asic : public BroadcomAsic { cfg::PortType portType) const override; uint32_t getMaxLabelStackDepth() const override; uint64_t getMMUSizeBytes() const override; + uint64_t getSramSizeBytes() const override; uint32_t getMaxMirrors() const override; uint64_t getDefaultReservedBytes( cfg::StreamType streamType, diff --git a/fboss/agent/hw/switch_asics/RamonAsic.cpp b/fboss/agent/hw/switch_asics/RamonAsic.cpp index 1d0d45bd9ed18..9800637845b49 100644 --- a/fboss/agent/hw/switch_asics/RamonAsic.cpp +++ b/fboss/agent/hw/switch_asics/RamonAsic.cpp @@ -83,6 +83,9 @@ uint32_t RamonAsic::getMaxLabelStackDepth() const { uint64_t RamonAsic::getMMUSizeBytes() const { throw FbossError("Ramon doesn't support MMU feature"); }; +uint64_t RamonAsic::getSramSizeBytes() const { + throw FbossError("Ramon doesn't support MMU feature"); +}; int RamonAsic::getMaxNumLogicalPorts() const { throw FbossError("Ramon doesn't support logical ports feature"); } diff --git a/fboss/agent/hw/switch_asics/RamonAsic.h b/fboss/agent/hw/switch_asics/RamonAsic.h index 4280b75fecbaa..7302a74d1cb9b 100644 --- a/fboss/agent/hw/switch_asics/RamonAsic.h +++ b/fboss/agent/hw/switch_asics/RamonAsic.h @@ -9,22 +9,17 @@ namespace facebook::fboss { class RamonAsic : public BroadcomAsic { public: RamonAsic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt, FabricNodeRole fabricNodeRole = FabricNodeRole::SINGLE_STAGE_L1) : BroadcomAsic( - type, - id, - index, - systemPortRange, - mac, + switchId, + switchInfo, sdkVersion, {cfg::SwitchType::FABRIC}), fabricNodeRole_(fabricNodeRole) {} + bool isSupported(Feature feature) const override; const std::map& desiredLoopbackModes() const override; @@ -46,6 +41,7 @@ class RamonAsic : public BroadcomAsic { cfg::PortType portType) const override; uint32_t getMaxLabelStackDepth() const override; uint64_t getMMUSizeBytes() const override; + uint64_t getSramSizeBytes() const override; uint32_t getMaxMirrors() const override; uint64_t getDefaultReservedBytes( cfg::StreamType streamType, diff --git a/fboss/agent/hw/switch_asics/TajoAsic.h b/fboss/agent/hw/switch_asics/TajoAsic.h index 8ab306a6eac81..5bdd3e911bc0c 100644 --- a/fboss/agent/hw/switch_asics/TajoAsic.h +++ b/fboss/agent/hw/switch_asics/TajoAsic.h @@ -19,6 +19,10 @@ class TajoAsic : public HwAsic { uint64_t getMMUSizeBytes() const override { return 108 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMaxMirrors() const override { // TODO - verify this return 4; diff --git a/fboss/agent/hw/switch_asics/Tomahawk3Asic.cpp b/fboss/agent/hw/switch_asics/Tomahawk3Asic.cpp index 334a6914be684..0ebfdd54fc71f 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk3Asic.cpp +++ b/fboss/agent/hw/switch_asics/Tomahawk3Asic.cpp @@ -165,7 +165,6 @@ bool Tomahawk3Asic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -183,6 +182,11 @@ bool Tomahawk3Asic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; diff --git a/fboss/agent/hw/switch_asics/Tomahawk3Asic.h b/fboss/agent/hw/switch_asics/Tomahawk3Asic.h index 44562074c1781..69ea1ad76b691 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk3Asic.h +++ b/fboss/agent/hw/switch_asics/Tomahawk3Asic.h @@ -29,6 +29,10 @@ class Tomahawk3Asic : public BroadcomXgsAsic { uint64_t getMMUSizeBytes() const override { return 64 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMMUCellSize() const { return 254; } diff --git a/fboss/agent/hw/switch_asics/Tomahawk4Asic.cpp b/fboss/agent/hw/switch_asics/Tomahawk4Asic.cpp index 43411ed5651b4..aed843a1f9db1 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk4Asic.cpp +++ b/fboss/agent/hw/switch_asics/Tomahawk4Asic.cpp @@ -184,7 +184,6 @@ bool Tomahawk4Asic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -202,6 +201,11 @@ bool Tomahawk4Asic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; diff --git a/fboss/agent/hw/switch_asics/Tomahawk4Asic.h b/fboss/agent/hw/switch_asics/Tomahawk4Asic.h index 0492c6e687a5d..2961d09e73948 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk4Asic.h +++ b/fboss/agent/hw/switch_asics/Tomahawk4Asic.h @@ -38,6 +38,10 @@ class Tomahawk4Asic : public BroadcomXgsAsic { uint64_t getMMUSizeBytes() const override { return 2 * 234606 * 254; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMMUCellSize() const { return 254; } diff --git a/fboss/agent/hw/switch_asics/Tomahawk5Asic.cpp b/fboss/agent/hw/switch_asics/Tomahawk5Asic.cpp index 49325c85dad57..3a7f4e3b501f3 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk5Asic.cpp +++ b/fboss/agent/hw/switch_asics/Tomahawk5Asic.cpp @@ -167,7 +167,6 @@ bool Tomahawk5Asic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -185,6 +184,11 @@ bool Tomahawk5Asic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; diff --git a/fboss/agent/hw/switch_asics/Tomahawk5Asic.h b/fboss/agent/hw/switch_asics/Tomahawk5Asic.h index 6675427c9bddc..58df60ccb82c1 100644 --- a/fboss/agent/hw/switch_asics/Tomahawk5Asic.h +++ b/fboss/agent/hw/switch_asics/Tomahawk5Asic.h @@ -37,6 +37,10 @@ class Tomahawk5Asic : public BroadcomXgsAsic { uint64_t getMMUSizeBytes() const override { return 2 * 341080 * 254; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMMUCellSize() const { return 254; } diff --git a/fboss/agent/hw/switch_asics/TomahawkAsic.cpp b/fboss/agent/hw/switch_asics/TomahawkAsic.cpp index ac461313d44f2..16b58b143ff39 100644 --- a/fboss/agent/hw/switch_asics/TomahawkAsic.cpp +++ b/fboss/agent/hw/switch_asics/TomahawkAsic.cpp @@ -166,7 +166,6 @@ bool TomahawkAsic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -183,6 +182,11 @@ bool TomahawkAsic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; diff --git a/fboss/agent/hw/switch_asics/TomahawkAsic.h b/fboss/agent/hw/switch_asics/TomahawkAsic.h index 990939e1806f6..d89aa47baad87 100644 --- a/fboss/agent/hw/switch_asics/TomahawkAsic.h +++ b/fboss/agent/hw/switch_asics/TomahawkAsic.h @@ -29,6 +29,10 @@ class TomahawkAsic : public BroadcomXgsAsic { uint64_t getMMUSizeBytes() const override { return 16 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint64_t getDefaultReservedBytes( cfg::StreamType /*streamType*/, cfg::PortType portType) const override { diff --git a/fboss/agent/hw/switch_asics/Trident2Asic.cpp b/fboss/agent/hw/switch_asics/Trident2Asic.cpp index a805d3a7ae540..5e52ea12f5bd4 100644 --- a/fboss/agent/hw/switch_asics/Trident2Asic.cpp +++ b/fboss/agent/hw/switch_asics/Trident2Asic.cpp @@ -166,7 +166,6 @@ bool Trident2Asic::isSupported(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -183,6 +182,11 @@ bool Trident2Asic::isSupported(Feature feature) const { case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; diff --git a/fboss/agent/hw/switch_asics/Trident2Asic.h b/fboss/agent/hw/switch_asics/Trident2Asic.h index d15736c33e107..2d38d2bc6a12a 100644 --- a/fboss/agent/hw/switch_asics/Trident2Asic.h +++ b/fboss/agent/hw/switch_asics/Trident2Asic.h @@ -29,6 +29,10 @@ class Trident2Asic : public BroadcomXgsAsic { uint64_t getMMUSizeBytes() const override { return 16 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMMUCellSize() const { return 208; } diff --git a/fboss/agent/hw/switch_asics/YubaAsic.cpp b/fboss/agent/hw/switch_asics/YubaAsic.cpp index 1ab7b5e514189..7c8723384f8d3 100644 --- a/fboss/agent/hw/switch_asics/YubaAsic.cpp +++ b/fboss/agent/hw/switch_asics/YubaAsic.cpp @@ -89,6 +89,7 @@ bool YubaAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::MULTIPLE_EGRESS_BUFFER_POOL: case HwAsic::Feature::L3_INTF_MTU: case HwAsic::Feature::DEDICATED_CPU_BUFFER_POOL: + case HwAsic::Feature::SAI_FEC_CORRECTED_BITS: return true; case HwAsic::Feature::ACL_BYTE_COUNTER: case HwAsic::Feature::SAI_MPLS_LABEL_LOOKUP_FAIL_COUNTER: @@ -162,7 +163,6 @@ bool YubaAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::SAI_USER_DEFINED_TRAP: case HwAsic::Feature::CREDIT_WATCHDOG: case HwAsic::Feature::ECMP_DLB_OFFSET: - case HwAsic::Feature::SAI_FEC_CORRECTED_BITS: case HwAsic::Feature::LINK_INACTIVE_BASED_ISOLATE: case HwAsic::Feature::RX_SNR: case HwAsic::Feature::MANAGEMENT_PORT: @@ -176,7 +176,6 @@ bool YubaAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::FABRIC_LINK_DOWN_CELL_DROP_COUNTER: case HwAsic::Feature::CRC_ERROR_DETECT: case HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW: - case HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE: case HwAsic::Feature::SWITCH_REACHABILITY_CHANGE_NOTIFY: case HwAsic::Feature::CABLE_PROPOGATION_DELAY: case HwAsic::Feature::DATA_CELL_FILTER: @@ -189,6 +188,11 @@ bool YubaAsic::isSupportedNonFabric(Feature feature) const { case HwAsic::Feature::EGRESS_GVOQ_WATERMARK_BYTES: case HwAsic::Feature::ENABLE_DELAY_DROP_CONGESTION_THRESHOLD: case HwAsic::Feature::PORT_MTU_ERROR_TRAP: + case HwAsic::Feature::EGRESS_ACL_TABLE: + case HwAsic::Feature::FAST_LLFC_COUNTER: + case HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK: + case HwAsic::Feature::FDR_FIFO_WATERMARK: + case HwAsic::Feature::EGRESS_CELL_ERROR_STATS: return false; } return false; @@ -246,6 +250,16 @@ std::set YubaAsic::getQueueStreamTypes( throw FbossError( "ASIC does not support:", apache::thrift::util::enumNameSafe(portType)); } + +const std::map& +YubaAsic::desiredLoopbackModes() const { + static const std::map kLoopbackMode = { + {cfg::PortType::INTERFACE_PORT, cfg::PortLoopbackMode::MAC}, + {cfg::PortType::MANAGEMENT_PORT, cfg::PortLoopbackMode::NONE}, + }; + return kLoopbackMode; +} + cfg::Range64 YubaAsic::getReservedEncapIndexRange() const { if (getSwitchType() == cfg::SwitchType::VOQ) { // Reserved range worked out with vendor. These ids diff --git a/fboss/agent/hw/switch_asics/YubaAsic.h b/fboss/agent/hw/switch_asics/YubaAsic.h index 06b60bd6d1dd4..78a437250b14a 100644 --- a/fboss/agent/hw/switch_asics/YubaAsic.h +++ b/fboss/agent/hw/switch_asics/YubaAsic.h @@ -18,22 +18,10 @@ namespace facebook::fboss { class YubaAsic : public TajoAsic { public: YubaAsic( - cfg::SwitchType type, - std::optional id, - int16_t index, - std::optional systemPortRange, - const folly::MacAddress& mac, + std::optional switchId, + cfg::SwitchInfo switchInfo, std::optional sdkVersion = std::nullopt) - : TajoAsic( - type, - id, - index, - systemPortRange, - mac, - sdkVersion, - {cfg::SwitchType::NPU, - cfg::SwitchType::VOQ, - cfg::SwitchType::FABRIC}) { + : TajoAsic(switchId, switchInfo, sdkVersion, {cfg::SwitchType::NPU}) { HwAsic::setDefaultStreamType(cfg::StreamType::UNICAST); } bool isSupported(Feature feature) const override { @@ -61,6 +49,10 @@ class YubaAsic : public TajoAsic { uint64_t getMMUSizeBytes() const override { return 256 * 1024 * 1024; } + uint64_t getSramSizeBytes() const override { + // No HBM! + return getMMUSizeBytes(); + } uint32_t getMaxMirrors() const override { // TODO - verify this return 4; @@ -77,6 +69,8 @@ class YubaAsic : public TajoAsic { // Concept of scaling factor does not apply returning the same value TH3 return cfg::MMUScalingFactor::TWO; } + const std::map& desiredLoopbackModes() + const override; int getMaxNumLogicalPorts() const override { // 256 physical lanes + cpu return 257; @@ -90,7 +84,7 @@ class YubaAsic : public TajoAsic { uint32_t getMaxLagMemberSize() const override { return 512; } - int getSystemPortIDOffset() const override { + int getSflowPortIDOffset() const override { return 0; } uint32_t getSflowShimHeaderSize() const override { @@ -111,6 +105,12 @@ class YubaAsic : public TajoAsic { uint32_t getMaxEcmpSize() const override { return 512; } + std::optional getMaxEcmpGroups() const override { + return 1024; + } + std::optional getMaxEcmpMembers() const override { + return 32768; + } uint32_t getNumCores() const override { return 12; } diff --git a/fboss/agent/hw/switch_asics/tests/Jericho3AsicTests.cpp b/fboss/agent/hw/switch_asics/tests/Jericho3AsicTests.cpp index 9bceee7db92cf..4e4f320f16848 100644 --- a/fboss/agent/hw/switch_asics/tests/Jericho3AsicTests.cpp +++ b/fboss/agent/hw/switch_asics/tests/Jericho3AsicTests.cpp @@ -22,12 +22,12 @@ class Jericho3AsicTest : public ::testing::Test { cfg::Range64 sysPortRange; sysPortRange.minimum() = 100; sysPortRange.maximum() = 144; - asic_ = std::make_unique( - cfg::SwitchType::VOQ, - 0, - 0, - sysPortRange, - folly::MacAddress("02:00:00:00:0F:0B")); + cfg::SwitchInfo switchInfo; + switchInfo.systemPortRanges()->systemPortRanges()->push_back(sysPortRange); + switchInfo.switchType() = cfg::SwitchType::VOQ; + switchInfo.switchMac() = "02:00:00:00:0F:0B"; + switchInfo.switchIndex() = 0; + asic_ = std::make_unique(0, switchInfo); } std::unique_ptr asic_; }; diff --git a/fboss/agent/hw/test/BUCK b/fboss/agent/hw/test/BUCK index 8fa7bd3181069..ab7dd7f3a6b76 100644 --- a/fboss/agent/hw/test/BUCK +++ b/fboss/agent/hw/test/BUCK @@ -1,5 +1,9 @@ load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library") load("@fbcode_macros//build_defs:cpp_unittest.bzl", "cpp_unittest") +load( + "@fbsource//arvr/tools/build_defs:embed_resources.bzl", + "embed_resources", +) oncall("fboss_agent_push") @@ -44,18 +48,14 @@ cpp_library( "//fboss/agent/test/utils:asic_test_utils", "//fboss/agent/test/utils:config_utils", "//fboss/agent/test/utils:pkt_test_utils", - "//fboss/agent/test/utils:port_test_utils", "//fboss/lib/config:fboss_config_utils", "//fboss/lib/phy:phy-cpp2-types", - "//fboss/lib/platforms:platform_mode", "//fboss/qsfp_service/if:transceiver-cpp2-types", - "//folly:format", "//folly:network_address", "//folly:synchronized", "//folly/executors:function_scheduler", "//folly/gen:base", "//folly/logging:logging", - "//thrift/lib/cpp/util:enum_utils", ], ) @@ -80,7 +80,6 @@ cpp_unittest( ], deps = [ "//fb303:service_data", - "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw:hw_port_fb303_stats", "//fboss/agent/hw:stats_constants", "//folly/logging:logging", @@ -145,7 +144,6 @@ cpp_library( "//fboss/agent/test/utils:packet_snooper", "//folly:optional", "//folly/io:iobuf", - "//folly/logging:logging", ], ) @@ -187,15 +185,12 @@ cpp_library( "//fboss/agent/packet:packet", "//fboss/agent/packet:packet_factory", "//fboss/agent/state:state", - "//fboss/agent/state:state_utils", "//fboss/agent/test:resourcelibutil", "//fboss/agent/test:utils", "//fboss/agent/test/utils:pkt_test_utils", "//folly:network_address", "//folly:range", - "//folly:string", "//folly/io:iobuf", - "//folly/logging:logging", ], ) @@ -208,15 +203,12 @@ cpp_library( exported_deps = [ "fbsource//third-party/googletest:gtest", ":hw_packet_utils", - ":hw_test_acl_utils", - "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", "//fboss/agent:hw_switch", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/state:state", - "//fboss/agent/test:resourcelibutil", "//fboss/agent/test/utils:copp_test_utils", "//folly:network_address", "//folly/logging:logging", @@ -265,7 +257,6 @@ cpp_library( "//fboss/agent:platform_base", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw/switch_asics:switch_asics", - "//fboss/agent/state:state", "//fboss/agent/test:ecmp_helper", "//fboss/agent/test/utils:qos_test_utils", "//fboss/lib:common_utils", @@ -319,7 +310,6 @@ cpp_library( hw_test_common_srcs = [ "HwVerifyPfcConfigInHwTest.cpp", - "HwIngressBufferTests.cpp", "HwAclStatTests.cpp", "HwTestFabricUtils.cpp", "HwFlexPortTests.cpp", @@ -329,7 +319,6 @@ hw_test_common_srcs = [ "HwLabelSwitchRouteTest.cpp", "HwLinkStateDependentTest.cpp", "HwMirrorTests.cpp", - "HwPortLedTests.cpp", "HwPortProfileTests.cpp", "HwPortStressTests.cpp", "HwPtpTcTests.cpp", @@ -338,7 +327,6 @@ hw_test_common_srcs = [ "HwRouteTests.cpp", "HwTest.cpp", "HwVlanTests.cpp", - "HwEcmpTests.cpp", "HwResourceStatsTests.cpp", "HwSplitAgentTest.cpp", "HwSwitchStateReplayTest.cpp", @@ -355,6 +343,7 @@ hw_test_common_srcs = [ ] hw_test_asic_only_srcs = hw_test_common_srcs + [ + "HwAsicDefaultProgrammingTests.cpp", "HwParityErrorTest.cpp", "dataplane_tests/facebook/HwAlpmStressTests.cpp", ] @@ -376,9 +365,21 @@ hw_dataplane_test_srcs = [ "dataplane_tests/HwSflowTests.cpp", "dataplane_tests/HwTrunkLoadBalancerTests.cpp", "dataplane_tests/HwTeFlowTrafficTests.cpp", + "dataplane_tests/HwTrafficPfcTests.cpp", "dataplane_tests/HwRouteStatTests.cpp", ] +embed_resources( + name = "golden_data", + add_map = True, + header_path = "fboss/agent/hw/test", + namespace = None, + resources = glob(["golden/**/*.csv"]), + visibility = [ + "PUBLIC", + ], +) + cpp_library( name = "hw_switch_test", srcs = hw_test_asic_only_srcs + hw_dataplane_test_srcs, @@ -387,9 +388,9 @@ cpp_library( exported_deps = [ "fbsource//third-party/googletest:gtest", ":config_factory", + ":golden_data", ":hw_copp_utils", ":hw_packet_utils", - ":hw_pfc_utils", ":hw_qos_utils", ":hw_switch_ensemble_factory", ":hw_test_acl_utils", @@ -429,10 +430,11 @@ cpp_library( "//fboss/agent:packet", "//fboss/agent:platform_base", "//fboss/agent:route_update_wrapper", + "//fboss/agent:stats", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:switchid_scope_resolver", + "//fboss/agent:utils", "//fboss/agent:validated_shell_commands-cpp2-types", - "//fboss/agent/hw:counter_utils", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw:hw_resource_stats_publisher", "//fboss/agent/hw:hw_stat_printers", @@ -444,9 +446,7 @@ cpp_library( "//fboss/agent/packet:packet_factory", "//fboss/agent/packet:pktutil", "//fboss/agent/state:label_forwarding_action", - "//fboss/agent/state:nodebase", "//fboss/agent/state:state", - "//fboss/agent/state:state_utils", "//fboss/agent/test:ecmp_helper", "//fboss/agent/test:linkstate_toggler", "//fboss/agent/test:resourcelibutil", @@ -454,7 +454,6 @@ cpp_library( "//fboss/agent/test/utils:agent_hw_test_constants", "//fboss/agent/test/utils:aqm_test_utils", "//fboss/agent/test/utils:config_utils", - "//fboss/agent/test/utils:copp_test_utils", "//fboss/agent/test/utils:dscp_marking_utils", "//fboss/agent/test/utils:ecmp_dataplane_test_util", "//fboss/agent/test/utils:load_balancer_test_runner_h", @@ -470,16 +469,15 @@ cpp_library( "//folly:format", "//folly:network_address", "//folly:optional", - "//folly:random", "//folly:range", "//folly:singleton", - "//folly:utility", - "//folly/container:array", + "//folly:string", "//folly/io:iobuf", "//folly/json:dynamic", "//folly/logging:logging", ], exported_external_deps = [ + "re2", ("boost", None, "boost_container"), ], ) @@ -523,7 +521,6 @@ cpp_library( "//fboss/agent:platform_base", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:switchid_scope_resolver", - "//fboss/agent/hw:counter_utils", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw:hw_resource_stats_publisher", "//fboss/agent/hw:hw_stat_printers", @@ -533,15 +530,11 @@ cpp_library( "//fboss/agent/packet:packet_factory", "//fboss/agent/packet:pktutil", "//fboss/agent/state:label_forwarding_action", - "//fboss/agent/state:nodebase", "//fboss/agent/state:state", - "//fboss/agent/state:state_utils", "//fboss/agent/test:ecmp_helper", "//fboss/agent/test:linkstate_toggler", "//fboss/agent/test:trunk_utils", "//fboss/agent/test/utils:agent_hw_test_constants", - "//fboss/agent/test/utils:copp_test_utils", - "//fboss/agent/test/utils:olympic_qos_utils", "//fboss/agent/test/utils:port_stats_test_utils", "//fboss/agent/test/utils:queue_per_host_test_utils", "//fboss/agent/test/utils:stats_test_utils", @@ -549,7 +542,6 @@ cpp_library( "//fboss/lib/phy:phy_utils", "//folly:file_util", "//folly:network_address", - "//folly:random", "//folly:range", "//folly:singleton", "//folly/io:iobuf", @@ -583,7 +575,6 @@ cpp_library( ":config_factory", ":hw_copp_utils", ":hw_pfc_utils", - ":load_balancer_utils", "//fboss/agent:fboss-error", "//fboss/agent:hw_switch", "//fboss/agent:switch_config-cpp2-types", @@ -592,7 +583,6 @@ cpp_library( "//fboss/agent/test/utils:load_balancer_test_utils", "//fboss/agent/test/utils:olympic_qos_utils", "//fboss/agent/test/utils:queue_per_host_test_utils", - "//fboss/lib/platforms:platform_mode", ], ) @@ -683,7 +673,6 @@ cpp_library( srcs = ["HwTestAclUtils.cpp"], exported_deps = [ "//fboss/agent:hw_switch", - "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/state:state", "//fboss/agent/test/utils:acl_test_utils", ], @@ -702,15 +691,12 @@ cpp_library( exported_deps = [ "fbsource//third-party/googletest:gtest", ":hw_packet_utils", - ":hw_test_acl_utils", - "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", "//fboss/agent:hw_switch", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/state:state", - "//fboss/agent/test:resourcelibutil", "//fboss/agent/test/utils:copp_test_utils", "//folly:network_address", "//folly/logging:logging", @@ -799,12 +785,10 @@ cpp_library( exported_deps = [ "fbsource//third-party/googletest:gtest", ":config_factory", - ":hw_test_port_utils", "//fboss/agent:fboss-types", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/test/utils:aqm_test_utils", - "//fboss/lib:common_utils", ], ) diff --git a/fboss/agent/hw/test/ConfigFactory.cpp b/fboss/agent/hw/test/ConfigFactory.cpp index d335422ecdade..54aaf5187b699 100644 --- a/fboss/agent/hw/test/ConfigFactory.cpp +++ b/fboss/agent/hw/test/ConfigFactory.cpp @@ -11,24 +11,15 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" -#include "fboss/agent/hw/switch_asics/EbroAsic.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -#include "fboss/agent/hw/switch_asics/Jericho2Asic.h" -#include "fboss/agent/hw/switch_asics/Jericho3Asic.h" -#include "fboss/agent/hw/switch_asics/Ramon3Asic.h" -#include "fboss/agent/hw/switch_asics/RamonAsic.h" #include "fboss/agent/hw/test/HwPortUtils.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortMap.h" #include "fboss/agent/test/utils/AsicUtils.h" -#include "fboss/agent/test/utils/PortTestUtils.h" #include "fboss/lib/config/PlatformConfigUtils.h" -#include "fboss/lib/platforms/PlatformMode.h" -#include #include -#include using namespace facebook::fboss; using namespace facebook::fboss::utility; diff --git a/fboss/agent/hw/test/HwAclStatTests.cpp b/fboss/agent/hw/test/HwAclStatTests.cpp index 511f7f6eabbe6..29b82db15a1ed 100644 --- a/fboss/agent/hw/test/HwAclStatTests.cpp +++ b/fboss/agent/hw/test/HwAclStatTests.cpp @@ -9,21 +9,13 @@ */ #include "fboss/agent/hw/test/HwTest.h" -#include -#include "fboss/agent/ApplyThriftConfig.h" -#include "fboss/agent/FbossError.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" -#include "fboss/agent/hw/CounterUtils.h" #include "fboss/agent/hw/test/HwTestAclUtils.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" -#include "fboss/agent/test/utils/QueuePerHostTestUtils.h" #include "fboss/agent/hw/test/ConfigFactory.h" -#include - namespace facebook::fboss { class HwAclStatTest : public HwTest { @@ -48,7 +40,7 @@ class HwAclStatTest : public HwTest { getAsic()->desiredLoopbackModes()); if (FLAGS_enable_acl_table_group) { utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &cfg, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); utility::addDefaultAclTable(cfg); } return cfg; diff --git a/fboss/agent/hw/test/HwAsicDefaultProgrammingTests.cpp b/fboss/agent/hw/test/HwAsicDefaultProgrammingTests.cpp new file mode 100644 index 0000000000000..83e9fb472e31f --- /dev/null +++ b/fboss/agent/hw/test/HwAsicDefaultProgrammingTests.cpp @@ -0,0 +1,180 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include +#include + +#include +#include +#include + +#include "fboss/agent/hw/test/HwTest.h" +#include "fboss/agent/hw/test/golden_data.h" // provides golden_dataMap + +using namespace ::testing; + +DEFINE_string(dump_golden_data, "", "File to dump expected golden data to"); + +namespace facebook::fboss { + +// This test aims to detect unintended ASIC programming changes. It dumps +// default ASIC programming and compares them against a golden data file. If any +// diff is detected, we should manually check and ensure the change is benign. +// +// To refresh the golden data: +// 1. ./sai_test- --config= \ +// --gtest_filter=*verifyDefaultProgramming \ +// --dump_golden_data= +// 2. scp fboss/agent/hw/test/golden/asic +// +class HwAsicDefaultProgrammingTest : public HwTest { + protected: + std::map loadGoldenData(cfg::AsicType asic) { + std::string asicType = apache::thrift::util::enumNameSafe(asic); + asicType = asicType.substr(std::string("ASIC_TYPE_").size()); + folly::toLowerAscii(asicType); + std::string filename = "golden/asic/" + asicType + ".csv"; + + XLOG(INFO) << "Loading golden data file: " << filename; + auto data = golden_dataMap.find(filename); + if (data == golden_dataMap.end()) { + XLOG(WARN) << "Golden data not found. Embedded data:"; + for (const auto& [key, value] : golden_dataMap) { + XLOG(INFO) << "data[" << key << "]: " << value.size() << " bytes"; + } + throw std::invalid_argument("Golden data not found: '" + asicType + "'"); + } + + // Use an ordered map so that errors are sorted and are more readable. + std::map ret; + std::istringstream iss(std::string(data->second)); + std::string line; + while (std::getline(iss, line)) { + std::string type, key, value; + // means putting all remaining parts into the last field. + if (!folly::split(',', line, type, key, value)) { + throw std::invalid_argument("Failed to parse: " + line); + } + ret[type + ":" + key] = folly::trimWhitespace(value); + } + return ret; + } + + std::map fetchData(cfg::AsicType asic) { + static const std:: + map>> + kQueries = { + {cfg::AsicType::ASIC_TYPE_JERICHO3, + { + {"mem", "CGM_PB_VSQ_RJCT_MASK"}, + {"mem", "CGM_VOQ_DRAM_BOUND_PRMS"}, + {"mem", "CGM_VOQ_DRAM_RECOVERY_PRMS"}, + {"mem", "CGM_VSQE_RJCT_PRMS"}, + {"mem", "CGM_VSQF_FC_PRMS"}, + {"mem", "CGM_VSQF_RJCT_PRMS"}, + {"mem", "IPS_CRBAL_TH"}, + {"mem", "IPS_EMPTY_Q_CRBAL_TH"}, + {"mem", "IPS_QSIZE_TH"}, + {"mem", "SCH_DEVICE_RATE_MEMORY_DRM"}, + {"mem", "SCH_SHARED_DEVICE_RATE_SHARED_DRM"}, + + {"reg", "CGM_TOTAL_SRAM_RSRC_FLOW_CONTROL_THS"}, + {"reg", "CIG_RCI_CONFIGS"}, + {"reg", "CIG_RCI_CORE_MAPPING"}, + {"reg", "CIG_RCI_DEVICE_MAPPING"}, + {"reg", "CIG_RCI_FDA_OUT_TH"}, + {"reg", "CIG_RCI_FDA_OUT_TOTAL_TH"}, + {"reg", "FDA_OFM_CORE_FIFO_CONFIG_CORE"}, + {"reg", "FDTS_FDT_SHAPER_CONFIGURATIONS"}, + {"reg", "FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS"}, + {"reg", "RQP_RQP_AGING_CONFIG"}, + + // This is not stable, it differs from run to run: + // - FDT_LOAD_BALANCING_SWITCH_CONFIGURATION + }}, + }; + auto queries = kQueries.find(asic); + + // "Prime" the diag shell because sometimes the first command fails. + std::string diagOut; + getHwSwitchEnsemble()->runDiagCommand("h", diagOut); + + std::map ret; + for (const auto& [type, var] : queries->second) { + std::string cmd; + if (type == "mem") { + // Dump in the standard format instead of the raw format so that we can + // filter out the ECC bits, also it's easier to inspect for diffs. + cmd = "dump " + var + "\n"; + } else if (type == "reg") { + cmd = "getreg " + var + "\n"; + } + + getHwSwitchEnsemble()->runDiagCommand(cmd, diagOut); + + std::istringstream iss(diagOut); + std::string line; + while (std::getline(iss, line)) { + // mem example: + // CGM_PB_VSQ_RJCT_MASK.CGM0[0]: + + // reg example: + // FDTS_FDT_SHAPER_CONFIGURATIONS.FDTS0[0x104]=0x500a0006428080a4176004e601: + // + static const re2::RE2 pattern( + "([a-zA-Z0-9_()\\.\\[\\]]+)\\s*[:=]\\s*(.*)"); + std::string key, value; + if (re2::RE2::FullMatch(line, pattern, &key, &value)) { + static const re2::RE2 eccPattern(", ECC=[x0-9a-fA-F]+"); + re2::RE2::Replace(&value, eccPattern, ""); + ret[type + ":" + key] = folly::trimWhitespace(value); + } else { + // Ignored any junk echoed by the diag shell. + XLOG(DBG3) << "Ignored unparsable output '" << line << "'"; + } + } + } + getHwSwitchEnsemble()->runDiagCommand("quit\n", diagOut); + return ret; + } +}; + +TEST_F(HwAsicDefaultProgrammingTest, verifyDefaultProgramming) { + auto setup = [&]() {}; + + auto verify = [&]() { + auto golden = loadGoldenData(getAsicType()); + auto fetched = fetchData(getAsicType()); + + // Do a manual comparison in order to emit better error messages. + for (const auto& [key, goldenValue] : golden) { + auto fetchedValue = fetched.find(key); + if (fetchedValue != fetched.end()) { + EXPECT_EQ(fetchedValue->second, goldenValue) << "Diff in key: " << key; + } else { + ADD_FAILURE() << "Missing key in fetched data: " << key << "=" + << goldenValue; + } + } + for (const auto& [key, fetchedValue] : fetched) { + EXPECT_TRUE(golden.contains(key)) + << "Extra key in fetched data: " << key << " = " << fetchedValue; + } + + // Dump golden data if requested. + if (!FLAGS_dump_golden_data.empty()) { + std::ofstream ofs(FLAGS_dump_golden_data); + for (const auto& [key, value] : fetched) { + std::string type, var; + folly::split(':', key, type, var); + ofs << type << "," << var << "," << value << "\n"; + } + } + }; + + verifyAcrossWarmBoots(setup, verify); +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/test/HwCpuFb303StatsTests.cpp b/fboss/agent/hw/test/HwCpuFb303StatsTests.cpp index ff8d2fb43a3ff..81dc701401a99 100644 --- a/fboss/agent/hw/test/HwCpuFb303StatsTests.cpp +++ b/fboss/agent/hw/test/HwCpuFb303StatsTests.cpp @@ -67,6 +67,7 @@ HwPortStats getInitedStats() { {{0, 100}, {1, 10}, {2, 1}}, // fecCodewords 0, // pqpErrorEgressDroppedPackets_ 0, // fabricLinkDownDroppedCells_ + 0, // linkLayerFlowControlWatermark_ 0, // timestamp "test", // portName {}, // macsec stats, diff --git a/fboss/agent/hw/test/HwFlowletSwitchingTests.cpp b/fboss/agent/hw/test/HwFlowletSwitchingTests.cpp index 32af216e7504f..9833173514ad9 100644 --- a/fboss/agent/hw/test/HwFlowletSwitchingTests.cpp +++ b/fboss/agent/hw/test/HwFlowletSwitchingTests.cpp @@ -27,15 +27,10 @@ folly::CIDRNetwork kAddr1Prefix{folly::IPAddress("2803:6080:d038:3063::"), 64}; folly::CIDRNetwork kAddr2Prefix{folly::IPAddress("2803:6080:d038:3000::"), 64}; constexpr auto kAddr3 = "2803:6080:d048"; constexpr auto kAddr4 = "2803:6080:e048"; -const int kDefaultScalingFactor = 10; -const int kScalingFactor1 = 100; -const int kScalingFactor2 = 200; -const int kDefaultLoadWeight = 100; const int kLoadWeight1 = 70; const int kLoadWeight2 = 60; -const int kDefaultQueueWeight = 0; const int kQueueWeight1 = 30; -const int kQueueWeight2 = 40; +const int kQueueWeight2 = 20; const int kInactivityIntervalUsecs1 = 128; const int kInactivityIntervalUsecs2 = 256; const int kFlowletTableSize1 = 1024; @@ -48,7 +43,6 @@ constexpr auto kAclCounterName = "flowletStat"; constexpr auto kDstIp = "2001::/16"; const int kMaxLinks = 4; const int kEcmpStartId = 200000; -const int kNumEcmp = 64; } // namespace namespace facebook::fboss { @@ -63,6 +57,36 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { getProgrammedState(), RouterID(0)); } + // native BCM has access to BRCM IDs >=200128 cannot be configured as DLB + // SAI does not have access to BRCM IDs. So SAI implementation cannot check + // this. So leave the tests to use just under 128 to test upto the limit + int kNumEcmp() const { + return getHwSwitchEnsemble()->isSai() ? 63 : 64; + } + + // 10 is from vendor internal code + int kDefaultScalingFactor() const { + return getHwSwitchEnsemble()->isSai() ? 0 : 10; + } + + // 100 is from vendor internal code + int kDefaultLoadWeight() const { + return getHwSwitchEnsemble()->isSai() ? 0 : 100; + } + + int kDefaultQueueWeight() const { + return 0; + } + + // SAI is multiple of port speed + int kScalingFactor1() const { + return getHwSwitchEnsemble()->isSai() ? 10 : 100; + } + + int kScalingFactor2() const { + return getHwSwitchEnsemble()->isSai() ? 20 : 200; + } + cfg::SwitchConfig initialConfig() const override { auto cfg = getDefaultConfig(); updateFlowletConfigs(cfg); @@ -107,7 +131,7 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { void verifyEcmpGroups(const cfg::SwitchConfig& cfg, int numEcmp) { auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); for (int i = 1; i < numEcmp; i++) { auto currentIp1 = folly::IPAddress(folly::sformat("{}:{:x}::", kAddr3, i)); @@ -176,9 +200,12 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { auto flowletCfg = getFlowletSwitchingConfig( switchingMode, kInactivityIntervalUsecs1, flowletTableSize); cfg.flowletSwitchingConfig() = flowletCfg; - updatePortFlowletConfigs(cfg, kScalingFactor1, kLoadWeight1, kQueueWeight1); - cfg.udfConfig() = utility::addUdfFlowletAclConfig(); - addFlowletAcl(cfg); + updatePortFlowletConfigs( + cfg, kScalingFactor1(), kLoadWeight1, kQueueWeight1); + if (!getHwSwitchEnsemble()->isSai()) { + cfg.udfConfig() = utility::addUdfFlowletAclConfig(); + addFlowletAcl(cfg); + } } cfg::SwitchConfig getDefaultConfig() const { @@ -224,10 +251,11 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { flowletCfg.dynamicQueueExponent() = 3; flowletCfg.dynamicQueueMinThresholdBytes() = 100000; flowletCfg.dynamicQueueMaxThresholdBytes() = 200000; - flowletCfg.dynamicSampleRate() = 100000; + flowletCfg.dynamicSampleRate() = + getHwSwitchEnsemble()->isSai() ? 1 : 1000000; flowletCfg.dynamicEgressMinThresholdBytes() = 1000; flowletCfg.dynamicEgressMaxThresholdBytes() = 10000; - flowletCfg.dynamicPhysicalQueueExponent() = 3; + flowletCfg.dynamicPhysicalQueueExponent() = 4; flowletCfg.maxLinks() = kMaxLinks; flowletCfg.switchingMode() = switchingMode; return flowletCfg; @@ -297,11 +325,13 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { {RoutePrefixV6{prefix, mask}}); } - void verifyPortFlowletConfig(cfg::PortFlowletConfig& portFlowletConfig) { + void verifyPortFlowletConfig( + cfg::PortFlowletConfig& portFlowletConfig, + bool enable = true) { if (getHwSwitch()->getPlatform()->getAsic()->isSupported( HwAsic::Feature::FLOWLET_PORT_ATTRIBUTES)) { EXPECT_TRUE(utility::validatePortFlowletQuality( - getHwSwitch(), masterLogicalPortIds()[0], portFlowletConfig)); + getHwSwitch(), masterLogicalPortIds()[0], portFlowletConfig, enable)); } } @@ -309,7 +339,7 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { const cfg::SwitchConfig& cfg, bool expectFlowsetSizeZero = false) { auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); verifyPortFlowletConfig(portFlowletConfig); EXPECT_TRUE(utility::validateFlowletSwitchingEnabled( @@ -321,20 +351,22 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { portFlowletConfig, true)); - utility::checkSwHwAclMatch(getHwSwitch(), getProgrammedState(), kAclName); - std::vector counterTypes{ - cfg::CounterType::PACKETS, cfg::CounterType::BYTES}; - utility::checkAclStat( - getHwSwitch(), - getProgrammedState(), - {kAclName}, - kAclCounterName, - counterTypes); + if (!getHwSwitchEnsemble()->isSai()) { + utility::checkSwHwAclMatch(getHwSwitch(), getProgrammedState(), kAclName); + std::vector counterTypes{ + cfg::CounterType::PACKETS, cfg::CounterType::BYTES}; + utility::checkAclStat( + getHwSwitch(), + getProgrammedState(), + {kAclName}, + kAclCounterName, + counterTypes); + } } void verifyModifiedConfig() { auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor2, kLoadWeight2, kQueueWeight2); + getPortFlowletConfig(kScalingFactor2(), kLoadWeight2, kQueueWeight2); verifyPortFlowletConfig(portFlowletConfig); auto flowletCfg = getFlowletSwitchingConfig( @@ -350,8 +382,8 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { void verifyRemoveFlowletConfig() { auto portFlowletConfig = getPortFlowletConfig( - kDefaultScalingFactor, kDefaultLoadWeight, kDefaultQueueWeight); - verifyPortFlowletConfig(portFlowletConfig); + kDefaultScalingFactor(), kDefaultLoadWeight(), kDefaultQueueWeight()); + verifyPortFlowletConfig(portFlowletConfig, false); auto flowletCfg = getFlowletSwitchingConfig(cfg::SwitchingMode::FIXED_ASSIGNMENT, 0, 0); @@ -378,8 +410,8 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { // Port flowlet config is not present in the config // verify that ports are not programmed with port flowlet config in TH4 auto portFlowletConfig = getPortFlowletConfig( - kDefaultScalingFactor, kDefaultLoadWeight, kDefaultQueueWeight); - verifyPortFlowletConfig(portFlowletConfig); + kDefaultScalingFactor(), kDefaultLoadWeight(), kDefaultQueueWeight()); + verifyPortFlowletConfig(portFlowletConfig, false); EXPECT_TRUE(utility::validateFlowletSwitchingEnabled( getHwSwitch(), *cfg.flowletSwitchingConfig())); @@ -415,7 +447,7 @@ class HwFlowletSwitchingTest : public HwLinkStateDependentTest { std::unique_ptr> ecmpHelper_; }; -class HwEcmpFlowletSwitchingTest : public HwFlowletSwitchingTest { +class HwFlowletSwitchingEcmpTest : public HwFlowletSwitchingTest { protected: void SetUp() override { HwFlowletSwitchingTest::SetUp(); @@ -503,7 +535,7 @@ TEST_F(HwFlowletSwitchingFlowsetTests, ValidateFlowsetExceed) { auto verify = [&]() { auto cfg = initialConfig(); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); // ensure that DLB is not programmed as we started with high flowset limits // we expect flowset size is zero @@ -597,7 +629,7 @@ TEST_F( auto verify = [&]() { auto cfg = initialConfig(); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); // ensure that DLB is not programmed for 17th route as we already have 16 // ECMP objects with DLB. Expect flowset size is zero for the 17th object @@ -664,7 +696,7 @@ TEST_F(HwFlowletSwitchingFlowsetMultipleEcmpTests, ValidateFlowsetTableFull) { auto verify = [&]() { auto cfg = initialConfig(); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); int numEcmp = int(utility::KMaxFlowsetTableSize / kFlowletTableSize2); for (int i = 0; i < numEcmp; i++) { @@ -686,6 +718,7 @@ TEST_F(HwFlowletSwitchingFlowsetMultipleEcmpTests, ValidateFlowsetTableFull) { // This test creates more than 128 ECMP groups and // try to update the ECMP group id 200128 to be flowlet enabled and // verify it fails. +// For SAI, go upto 126 groups TEST_F( HwFlowletSwitchingFlowsetMultipleEcmpTests, @@ -701,7 +734,7 @@ TEST_F( auto setup = [&]() { // create 128 different ECMP objects - for (int i = 1; i <= kNumEcmp; i++) { + for (int i = 1; i <= kNumEcmp(); i++) { std::vector portIds; portIds.push_back(masterLogicalPortIds()[i % 64]); portIds.push_back(masterLogicalPortIds()[(i + 1) % 64]); @@ -720,7 +753,7 @@ TEST_F( // check to ensure we have created more than 128 ECMP objects auto ecmpDetails = getHwSwitch()->getAllEcmpDetails(); - CHECK_GT(ecmpDetails.size(), kNumEcmp * 2); + CHECK_GT(ecmpDetails.size(), kNumEcmp() * 2); // verify the ECMP Id more than Max dlb Ecmp Id // not enabled with flowlet config and flowset available is zero. utility::verifyEcmpForNonFlowlet(getHwSwitch(), kAddr1Prefix, false); @@ -731,7 +764,7 @@ TEST_F( // available and try to update the ECMP group Id more than Max dlb Ecmp Id // not enabled with flowlet config and // verify flowset available is more than 2K. - for (int i = 1; i < kNumEcmp - 1; i++) { + for (int i = 1; i < kNumEcmp() - 1; i++) { ecmpHelper_->unprogramRoutes( getRouteUpdater(), {RoutePrefixV6{ @@ -794,11 +827,12 @@ TEST_F(HwFlowletSwitchingTest, VerifyPortFlowletConfigChange) { auto cfg = initialConfig(); verifyConfig(cfg); // Modify the port flowlet config and verify - updatePortFlowletConfigs(cfg, kScalingFactor2, kLoadWeight2, kQueueWeight2); + updatePortFlowletConfigs( + cfg, kScalingFactor2(), kLoadWeight2, kQueueWeight2); applyNewConfig(cfg); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor2, kLoadWeight2, kQueueWeight2); + getPortFlowletConfig(kScalingFactor2(), kLoadWeight2, kQueueWeight2); verifyPortFlowletConfig(portFlowletConfig); // Modify to initial config to verify after warmboot applyNewConfig(initialConfig()); @@ -824,7 +858,8 @@ TEST_F(HwFlowletSwitchingTest, VerifyFlowletConfigChange) { // Modify the flowlet config switching mode to PER_PACKET_QUALITY modifyFlowletSwitchingConfig(cfg); // Modify the port flowlet config - updatePortFlowletConfigs(cfg, kScalingFactor2, kLoadWeight2, kQueueWeight2); + updatePortFlowletConfigs( + cfg, kScalingFactor2(), kLoadWeight2, kQueueWeight2); applyNewConfig(cfg); verifyModifiedConfig(); // Modify to initial config to verify after warmboot @@ -853,7 +888,8 @@ TEST_F(HwFlowletSwitchingTest, VerifyFlowletConfigRemoval) { // Modify the flowlet config modifyFlowletSwitchingConfig(cfg); // Modify the port flowlet config - updatePortFlowletConfigs(cfg, kScalingFactor2, kLoadWeight2, kQueueWeight2); + updatePortFlowletConfigs( + cfg, kScalingFactor2(), kLoadWeight2, kQueueWeight2); applyNewConfig(cfg); verifyModifiedConfig(); // Remove the flowlet configs @@ -893,7 +929,8 @@ TEST_F(HwFlowletSwitchingTest, VerifyGetEcmpDetails) { // Modify the flowlet config modifyFlowletSwitchingConfig(cfg); // Modify the port flowlet config - updatePortFlowletConfigs(cfg, kScalingFactor2, kLoadWeight2, kQueueWeight2); + updatePortFlowletConfigs( + cfg, kScalingFactor2(), kLoadWeight2, kQueueWeight2); applyNewConfig(cfg); verifyModifiedConfig(); @@ -907,7 +944,7 @@ TEST_F(HwFlowletSwitchingTest, VerifyGetEcmpDetails) { verifyAcrossWarmBoots(setup, verify); } -TEST_F(HwEcmpFlowletSwitchingTest, VerifyEcmpFlowletSwitchingEnable) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifyEcmpFlowletSwitchingEnable) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); @@ -921,19 +958,43 @@ TEST_F(HwEcmpFlowletSwitchingTest, VerifyEcmpFlowletSwitchingEnable) { auto verify = [&]() { auto cfg = initialConfig(); - // Modify the flowlet config to convert ECMP to DLB + applyNewConfig(cfg); + + auto portFlowletConfig = + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); updateFlowletConfigs(cfg); + + EXPECT_TRUE(utility::verifyEcmpForFlowletSwitching( + getHwSwitch(), + kAddr1Prefix, + *cfg.flowletSwitchingConfig(), + portFlowletConfig, + false /* flowletEnable */)); + + // Modify the flowlet config to convert ECMP to DLB updatePortFlowletConfigName(cfg); applyNewConfig(cfg); // verify the flowlet config verifyConfig(cfg); + // the ECMP for this route should be created as DLB + resolveNextHopsAddRoute( + {masterLogicalPortIds()[2], masterLogicalPortIds()[3]}, kAddr2); + EXPECT_TRUE(utility::verifyEcmpForFlowletSwitching( + getHwSwitch(), + kAddr2Prefix, + *cfg.flowletSwitchingConfig(), + portFlowletConfig, + true /* flowletEnable */)); + // modify switchingMode to per_packet cfg = getDefaultConfig(); updateFlowletConfigs( cfg, cfg::SwitchingMode::PER_PACKET_QUALITY, kFlowletTableSize1); updatePortFlowletConfigName(cfg); applyNewConfig(cfg); + // verify the flowlet config + verifyConfig(cfg); // modify max_flows and keep mode the same cfg = getDefaultConfig(); @@ -973,7 +1034,7 @@ TEST_F(HwFlowletSwitchingFlowsetMultipleEcmpTests, ValidateEcmpDetailsThread) { auto verify = [&]() { auto cfg = initialConfig(); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); EXPECT_TRUE(utility::verifyEcmpForFlowletSwitching( getHwSwitch(), @@ -1029,7 +1090,7 @@ TEST_F(HwFlowletSwitchingFlowsetMultipleEcmpTests, ValidateFlowletStatsThread) { auto verify = [&]() { auto cfg = initialConfig(); auto portFlowletConfig = - getPortFlowletConfig(kScalingFactor1, kLoadWeight1, kQueueWeight1); + getPortFlowletConfig(kScalingFactor1(), kLoadWeight1, kQueueWeight1); EXPECT_TRUE(utility::verifyEcmpForFlowletSwitching( getHwSwitch(), @@ -1066,7 +1127,7 @@ TEST_F(HwFlowletSwitchingFlowsetMultipleEcmpTests, ValidateFlowletStatsThread) { verifyAcrossWarmBoots(setup, verify); } -TEST_F(HwEcmpFlowletSwitchingTest, VerifySkipEcmpFlowletSwitchingEnable) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifySkipEcmpFlowletSwitchingEnable) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); @@ -1094,7 +1155,7 @@ TEST_F(HwEcmpFlowletSwitchingTest, VerifySkipEcmpFlowletSwitchingEnable) { } // Verify ability to create upto 128 ECMP DLB groups in spray mode -TEST_F(HwEcmpFlowletSwitchingTest, VerifyEcmpSprayModeScale) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifyEcmpSprayModeScale) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); @@ -1129,7 +1190,7 @@ TEST_F(HwEcmpFlowletSwitchingTest, VerifyEcmpSprayModeScale) { } // Verify warmboot from 16 ECMP (flowlet) to 96 ECMP (per-packet) -TEST_F(HwEcmpFlowletSwitchingTest, VerifyModeFlowletToSpray) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifyModeFlowletToSpray) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); @@ -1156,7 +1217,7 @@ TEST_F(HwEcmpFlowletSwitchingTest, VerifyModeFlowletToSpray) { // Ideally we want to test 96 per-packet ECMP to 16 flowlet ECMP // It becomes really hard to verify post conversion because there // will be 16 flowlet ECMPs and 80 disabled ECMPs post-warmboot. -TEST_F(HwEcmpFlowletSwitchingTest, VerifyModeSprayToFlowlet) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifyModeSprayToFlowlet) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); @@ -1173,7 +1234,7 @@ TEST_F(HwEcmpFlowletSwitchingTest, VerifyModeSprayToFlowlet) { 8); } -TEST_F(HwEcmpFlowletSwitchingTest, VerifyModeSprayFlowletSizeChange) { +TEST_F(HwFlowletSwitchingEcmpTest, VerifyModeSprayFlowletSizeChange) { if (this->skipTest()) { #if defined(GTEST_SKIP) GTEST_SKIP(); diff --git a/fboss/agent/hw/test/HwParityErrorTest.cpp b/fboss/agent/hw/test/HwParityErrorTest.cpp index 2f6b6b8b30812..13e41d0109ed6 100644 --- a/fboss/agent/hw/test/HwParityErrorTest.cpp +++ b/fboss/agent/hw/test/HwParityErrorTest.cpp @@ -7,7 +7,6 @@ #include "fboss/agent/hw/test/HwTestTamUtils.h" #include "fboss/lib/CommonUtils.h" -#include #include namespace facebook::fboss { diff --git a/fboss/agent/hw/test/HwPortFb303StatsTests.cpp b/fboss/agent/hw/test/HwPortFb303StatsTests.cpp index 721033f7ad874..bc9adc8f5c1b8 100644 --- a/fboss/agent/hw/test/HwPortFb303StatsTests.cpp +++ b/fboss/agent/hw/test/HwPortFb303StatsTests.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/HwPortFb303Stats.h" #include "fboss/agent/hw/StatsConstants.h" -#include "fboss/agent/hw/gen-cpp2/hardware_stats_constants.h" #include #include @@ -137,6 +136,7 @@ HwPortStats getInitedStats() { {{0, 100}, {1, 10}, {2, 1}}, // fecCodewords 26, // pqpErrorEgressDroppedPackets_ 27, // fabricLinkDownDroppedCells_ + 28, // linkLayerFlowControlWatermark_ 0, // timestamp "test", // portName macsecStats, diff --git a/fboss/agent/hw/test/HwPortLedTests.cpp b/fboss/agent/hw/test/HwPortLedTests.cpp deleted file mode 100644 index 1d437f56be66c..0000000000000 --- a/fboss/agent/hw/test/HwPortLedTests.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -#include "fboss/agent/hw/test/HwLinkStateDependentTest.h" - -#include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/hw/test/HwPortUtils.h" -#include "fboss/agent/hw/test/HwTestPortUtils.h" -#include "fboss/lib/CommonUtils.h" - -namespace facebook::fboss { - -class HwPortLedTest : public HwLinkStateDependentTest { - protected: - cfg::SwitchConfig initialConfig() const override { - auto lbMode = getPlatform()->getAsic()->desiredLoopbackModes(); - return utility::onePortPerInterfaceConfig( - getHwSwitch(), {masterLogicalPortIds()[0]}, lbMode); - } - - // Pending on D57993788 to land - bool failHwCallsOnWarmboot() const override { - return false; - } -}; - -TEST_F(HwPortLedTest, TestLed) { - auto setup = [=, this]() { applyNewConfig(initialConfig()); }; - auto verify = [=, this]() { - auto portID = masterLogicalPortIds()[0]; - bringUpPort(portID); - WITH_RETRIES({ - EXPECT_EVENTUALLY_TRUE(utility::verifyLedStatus( - getHwSwitchEnsemble(), portID, true /* up */)); - }); - bringDownPort(portID); - WITH_RETRIES({ - EXPECT_EVENTUALLY_TRUE(utility::verifyLedStatus( - getHwSwitchEnsemble(), portID, false /* down */)); - }); - }; - verifyAcrossWarmBoots(setup, verify); -} - -TEST_F(HwPortLedTest, TestLedFromSwitchState) { - auto setup = [=, this]() { applyNewConfig(initialConfig()); }; - auto verify = [=, this]() { - auto portID = masterLogicalPortIds()[0]; - bringUpPort(portID); - WITH_RETRIES({ - EXPECT_EVENTUALLY_TRUE(utility::verifyLedStatus( - getHwSwitchEnsemble(), portID, true /* up */)); - }); - auto state = getProgrammedState(); - auto newState = state->clone(); - auto port = newState->getPorts()->getNode(portID); - auto newPort = port->modify(&newState); - newPort->setLedPortExternalState(PortLedExternalState::EXTERNAL_FORCE_OFF); - applyNewState(newState); - WITH_RETRIES({ - EXPECT_EVENTUALLY_TRUE(utility::verifyLedStatus( - getHwSwitchEnsemble(), portID, false /* down */)); - }); - }; - verifyAcrossWarmBoots(setup, verify); -} -} // namespace facebook::fboss diff --git a/fboss/agent/hw/test/HwResourceStatsTests.cpp b/fboss/agent/hw/test/HwResourceStatsTests.cpp index efb4c9fba70bf..c8d2d11032512 100644 --- a/fboss/agent/hw/test/HwResourceStatsTests.cpp +++ b/fboss/agent/hw/test/HwResourceStatsTests.cpp @@ -40,7 +40,7 @@ class HwResourceStatsTest : public HwLinkStateDependentTest { getHwSwitch(), masterLogicalPortIds()); if (FLAGS_enable_acl_table_group) { utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &cfg, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); utility::addDefaultAclTable(cfg); } return cfg; diff --git a/fboss/agent/hw/test/HwSwitchEnsemble.cpp b/fboss/agent/hw/test/HwSwitchEnsemble.cpp index 85e8bfc78242a..2068deea0dd7f 100644 --- a/fboss/agent/hw/test/HwSwitchEnsemble.cpp +++ b/fboss/agent/hw/test/HwSwitchEnsemble.cpp @@ -428,8 +428,10 @@ void HwSwitchEnsemble::linkStateChanged( [port, up](auto observer) { observer->changeLinkState(port, up); }); } -void HwSwitchEnsemble::linkActiveStateChanged( - const std::map& /*port2IsActive */) { +void HwSwitchEnsemble::linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */) { // TODO } diff --git a/fboss/agent/hw/test/HwSwitchEnsemble.h b/fboss/agent/hw/test/HwSwitchEnsemble.h index f06f0a96da12b..b4ab3700839ee 100644 --- a/fboss/agent/hw/test/HwSwitchEnsemble.h +++ b/fboss/agent/hw/test/HwSwitchEnsemble.h @@ -79,8 +79,11 @@ class HwSwitchEnsemble : public TestEnsembleIf { private: virtual void packetReceived(RxPacket* pkt) noexcept = 0; virtual void linkStateChanged(PortID port, bool up) = 0; - virtual void linkActiveStateChanged( - const std::map& port2IsActive) = 0; + virtual void linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool /* fwIsolated */, + const std::optional< + uint32_t>& /* numActiveFabricPortsAtFwIsolate */) = 0; virtual void linkConnectivityChanged( const std::map& port2OldAndNewConnectivity) = 0; @@ -182,8 +185,11 @@ class HwSwitchEnsemble : public TestEnsembleIf { cfg::PortType portType, std::optional iPhyFaultStatus = std::nullopt) override; - void linkActiveStateChanged( - const std::map& /*port2IsActive */) override; + void linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */ + ) override; void linkConnectivityChanged( const std::map& /*port2OldAndNewConnectivity*/) override { diff --git a/fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.cpp b/fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.cpp index f2e4f22d0b60e..5ab238592d36a 100644 --- a/fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.cpp +++ b/fboss/agent/hw/test/HwSwitchEnsembleRouteUpdateWrapper.cpp @@ -18,7 +18,6 @@ #include "fboss/agent/hw/test/HwSwitchEnsemble.h" -#include #include namespace facebook::fboss { diff --git a/fboss/agent/hw/test/HwSwitchStateReplayTest.cpp b/fboss/agent/hw/test/HwSwitchStateReplayTest.cpp index bd303eb9874af..73774092107c3 100644 --- a/fboss/agent/hw/test/HwSwitchStateReplayTest.cpp +++ b/fboss/agent/hw/test/HwSwitchStateReplayTest.cpp @@ -11,14 +11,12 @@ #include "fboss/agent/SysError.h" #include "fboss/agent/hw/test/HwTest.h" -#include "fboss/agent/ApplyThriftConfig.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include -#include DEFINE_string( replay_switch_state_file, diff --git a/fboss/agent/hw/test/HwTest.h b/fboss/agent/hw/test/HwTest.h index d624643ef3b04..b060fe4cfbfcd 100644 --- a/fboss/agent/hw/test/HwTest.h +++ b/fboss/agent/hw/test/HwTest.h @@ -65,8 +65,11 @@ class HwTest : public ::testing::Test, void packetReceived(RxPacket* /*pkt*/) noexcept override {} void linkStateChanged(PortID /*port*/, bool /*up*/) override {} - void linkActiveStateChanged( - const std::map& /*port2IsActive */) override {} + void linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */ + ) override {} void switchReachabilityChanged( const SwitchID /*switchId*/, const std::map>& /*switchReachabilityInfo*/) diff --git a/fboss/agent/hw/test/HwTestAclUtils.cpp b/fboss/agent/hw/test/HwTestAclUtils.cpp index ae32870dfe3df..b9364225a0a26 100644 --- a/fboss/agent/hw/test/HwTestAclUtils.cpp +++ b/fboss/agent/hw/test/HwTestAclUtils.cpp @@ -9,9 +9,6 @@ */ #include "fboss/agent/hw/test/HwTestAclUtils.h" -#include -#include "fboss/agent/hw/switch_asics/HwAsic.h" -#include "fboss/agent/test/utils/AclTestUtils.h" #include "fboss/agent/state/SwitchState.h" diff --git a/fboss/agent/hw/test/HwTestCoppUtils.cpp b/fboss/agent/hw/test/HwTestCoppUtils.cpp index f8575b8981aec..42300f484f5f6 100644 --- a/fboss/agent/hw/test/HwTestCoppUtils.cpp +++ b/fboss/agent/hw/test/HwTestCoppUtils.cpp @@ -8,16 +8,11 @@ * */ #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include -#include "fboss/agent/FbossError.h" #include "fboss/agent/HwSwitch.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -#include "fboss/agent/hw/test/HwTestAclUtils.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/state/Interface.h" #include "fboss/agent/state/SwitchState.h" -#include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/utils/CoppTestUtils.h" diff --git a/fboss/agent/hw/test/HwTestFabricUtils.cpp b/fboss/agent/hw/test/HwTestFabricUtils.cpp index 7fa3d562e044e..fceca69068a46 100644 --- a/fboss/agent/hw/test/HwTestFabricUtils.cpp +++ b/fboss/agent/hw/test/HwTestFabricUtils.cpp @@ -1,5 +1,3 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. -#include "fboss/agent/hw/test/HwTestFabricUtils.h" - namespace facebook::fboss {} // namespace facebook::fboss diff --git a/fboss/agent/hw/test/HwTestFlowletSwitchingUtils.h b/fboss/agent/hw/test/HwTestFlowletSwitchingUtils.h index a795c5f62e2ea..199e5bb4137d0 100644 --- a/fboss/agent/hw/test/HwTestFlowletSwitchingUtils.h +++ b/fboss/agent/hw/test/HwTestFlowletSwitchingUtils.h @@ -39,7 +39,8 @@ bool verifyEcmpForNonFlowlet( bool validatePortFlowletQuality( const facebook::fboss::HwSwitch* hw, const PortID& portId, - const cfg::PortFlowletConfig& portFlowletCfg); + const cfg::PortFlowletConfig& portFlowletCfg, + bool enable = true); bool validateFlowletSwitchingDisabled(const facebook::fboss::HwSwitch* hw); diff --git a/fboss/agent/hw/test/HwTestLearningUpdateObserver.h b/fboss/agent/hw/test/HwTestLearningUpdateObserver.h index 5444e8fd29096..62d07848cb2db 100644 --- a/fboss/agent/hw/test/HwTestLearningUpdateObserver.h +++ b/fboss/agent/hw/test/HwTestLearningUpdateObserver.h @@ -34,8 +34,11 @@ class HwTestLearningUpdateObserver private: void packetReceived(RxPacket* /*pkt*/) noexcept override {} void linkStateChanged(PortID /*port*/, bool /*up*/) override {} - void linkActiveStateChanged( - const std::map& /*port2IsActive */) override {} + void linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */) + override {} void switchReachabilityChanged( const SwitchID /*switchId*/, const std::map>& /*switchReachabilityInfo*/) diff --git a/fboss/agent/hw/test/HwTestLinkScanUpdateObserver.h b/fboss/agent/hw/test/HwTestLinkScanUpdateObserver.h index 83edfbb69263a..49984cdc6d476 100644 --- a/fboss/agent/hw/test/HwTestLinkScanUpdateObserver.h +++ b/fboss/agent/hw/test/HwTestLinkScanUpdateObserver.h @@ -21,8 +21,11 @@ class HwTestLinkScanUpdateObserver void l2LearningUpdateReceived( L2Entry /*l2Entry*/, L2EntryUpdateType /*l2EntryUpdateType*/) override {} - void linkActiveStateChanged( - const std::map& /*port2IsActive */) override {} + void linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */) + override {} void linkConnectivityChanged( const std::map& /*port2OldAndNewConnectivity*/) override {} diff --git a/fboss/agent/hw/test/HwTestPacketSnooper.cpp b/fboss/agent/hw/test/HwTestPacketSnooper.cpp index ab272b703f474..f8b0bef345203 100644 --- a/fboss/agent/hw/test/HwTestPacketSnooper.cpp +++ b/fboss/agent/hw/test/HwTestPacketSnooper.cpp @@ -4,8 +4,6 @@ #include "fboss/agent/RxPacket.h" #include "fboss/agent/packet/PktUtil.h" -#include - namespace facebook::fboss { HwTestPacketSnooper::HwTestPacketSnooper( diff --git a/fboss/agent/hw/test/HwTestPacketSnooper.h b/fboss/agent/hw/test/HwTestPacketSnooper.h index 9a186729085a5..cbe8af7b37b07 100644 --- a/fboss/agent/hw/test/HwTestPacketSnooper.h +++ b/fboss/agent/hw/test/HwTestPacketSnooper.h @@ -33,8 +33,11 @@ class HwTestPacketSnooper : public HwSwitchEnsemble::HwSwitchEventObserverIf { void l2LearningUpdateReceived( L2Entry /*l2Entry*/, L2EntryUpdateType /*l2EntryUpdateType*/) override {} - void linkActiveStateChanged( - const std::map& /*port2IsActive */) override {} + void linkActiveStateChangedOrFwIsolated( + const std::map& /*port2IsActive */, + bool /* fwIsolated */, + const std::optional& /* numActiveFabricPortsAtFwIsolate */) + override {} void linkConnectivityChanged( const std::map& /*port2OldAndNewConnectivity*/) override {} diff --git a/fboss/agent/hw/test/HwTestPacketUtils.cpp b/fboss/agent/hw/test/HwTestPacketUtils.cpp index 460f6273618b1..3bd5180453fac 100644 --- a/fboss/agent/hw/test/HwTestPacketUtils.cpp +++ b/fboss/agent/hw/test/HwTestPacketUtils.cpp @@ -11,10 +11,6 @@ #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include -#include -#include -#include -#include #include "common/logging/logging.h" @@ -22,10 +18,7 @@ #include "fboss/agent/LldpManager.h" #include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/packet/UDPHeader.h" -#include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/StateUtils.h" #include "fboss/agent/state/SwitchState.h" -#include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/hw/test/HwTestThriftHandler.h b/fboss/agent/hw/test/HwTestThriftHandler.h index 49ee6be01ead9..dcfc8ea10c662 100644 --- a/fboss/agent/hw/test/HwTestThriftHandler.h +++ b/fboss/agent/hw/test/HwTestThriftHandler.h @@ -77,6 +77,11 @@ class HwTestThriftHandler : public AgentHwTestCtrlSvIf { int routerID, int sizeInSw) override; + void getEcmpWeights( + std::map<::std::int32_t, ::std::int32_t>& weights, + std::unique_ptr prefix, + int routerID) override; + void injectFecError( std::unique_ptr> hwPorts, bool injectCorrectable) override; @@ -99,6 +104,14 @@ class HwTestThriftHandler : public AgentHwTestCtrlSvIf { ::std::vector<::facebook::fboss::utility::PortInfo>& portInfos, std::unique_ptr<::std::vector<::std::int32_t>> portIds) override; + bool verifyPortLedStatus(int portId, bool status) override; + bool verifyPGSettings(int portId, bool pfcEnabled) override; + void getAggPortInfo( + ::std::vector<::facebook::fboss::utility::AggPortInfo>& aggPortInfos, + std::unique_ptr<::std::vector<::std::int32_t>> aggPortIds) override; + int getNumAggPorts() override; + bool verifyPktFromAggPort(int aggPortId) override; + private: HwSwitch* hwSwitch_; }; diff --git a/fboss/agent/hw/test/HwUdfTests.cpp b/fboss/agent/hw/test/HwUdfTests.cpp index ac2cb598526b2..1174ca9952456 100644 --- a/fboss/agent/hw/test/HwUdfTests.cpp +++ b/fboss/agent/hw/test/HwUdfTests.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/test/HwTestAclUtils.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" #include "fboss/agent/hw/test/HwTestUdfUtils.h" -#include "fboss/agent/hw/test/LoadBalancerUtils.h" namespace facebook::fboss { diff --git a/fboss/agent/hw/test/PacketUtilTests.cpp b/fboss/agent/hw/test/PacketUtilTests.cpp index bacec8ca96fc4..b4e021562abaf 100644 --- a/fboss/agent/hw/test/PacketUtilTests.cpp +++ b/fboss/agent/hw/test/PacketUtilTests.cpp @@ -5,7 +5,6 @@ #include "fboss/agent/hw/mock/MockHwSwitch.h" #include "fboss/agent/hw/mock/MockPlatform.h" #include "fboss/agent/packet/EthFrame.h" -#include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/packet/UDPHeader.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/hw/test/ProdConfigFactory.cpp b/fboss/agent/hw/test/ProdConfigFactory.cpp index 286309aa6fa73..b01605a0c4f3b 100644 --- a/fboss/agent/hw/test/ProdConfigFactory.cpp +++ b/fboss/agent/hw/test/ProdConfigFactory.cpp @@ -12,11 +12,9 @@ #include "fboss/agent/FbossError.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" -#include "fboss/lib/platforms/PlatformMode.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include "fboss/agent/hw/test/LoadBalancerUtils.h" #include "fboss/agent/hw/test/dataplane_tests/HwTestPfcUtils.h" #include "fboss/agent/test/utils/DscpMarkingUtils.h" #include "fboss/agent/test/utils/OlympicTestUtils.h" @@ -58,7 +56,7 @@ void addNetworkAIQosToConfig(cfg::SwitchConfig& config, const HwAsic* hwAsic) { auto streamType = *hwAsic->getQueueStreamTypes(cfg::PortType::INTERFACE_PORT).begin(); // queue configuration is different - addNetworkAIQueueConfig(&config, streamType); + addNetworkAIQueueConfig(&config, streamType, hwAsic); } void addNetworkAIQosToConfig( diff --git a/fboss/agent/hw/test/dataplane_tests/HwHashPolarizationTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwHashPolarizationTests.cpp index 26e9e77377553..e3da94ef15aca 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwHashPolarizationTests.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwHashPolarizationTests.cpp @@ -18,7 +18,6 @@ #include "fboss/agent/RxPacket.h" #include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/packet/PktUtil.h" -#include "fboss/agent/state/LoadBalancer.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/hw/test/HwHashPolarizationTestUtils.h" diff --git a/fboss/agent/hw/test/dataplane_tests/HwInPauseDiscardsTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwInPauseDiscardsTests.cpp index 38ece14fee72e..0f29434c9ecb4 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwInPauseDiscardsTests.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwInPauseDiscardsTests.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/agent/state/Interface.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortMap.h" #include "fboss/agent/state/SwitchState.h" diff --git a/fboss/agent/hw/test/dataplane_tests/HwIpInIpTunnelTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwIpInIpTunnelTests.cpp index 7f9a9cf655afd..7d4cd7ba19e45 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwIpInIpTunnelTests.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwIpInIpTunnelTests.cpp @@ -6,18 +6,14 @@ #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwLinkStateDependentTest.h" -#include "fboss/agent/hw/test/HwTestAclUtils.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" #include "fboss/agent/hw/test/HwTestPacketSnooper.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/utils/TrapPacketUtils.h" -#include "folly/logging/xlog.h" - namespace facebook::fboss { class HwIpInIpTunnelTest : public HwLinkStateDependentTest { diff --git a/fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTestsV6Roce.cpp b/fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTestsV6Roce.cpp index 559f9a07f9608..9ce9dc36a17f7 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTestsV6Roce.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTestsV6Roce.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/hw/test/dataplane_tests/HwLoadBalancerTests.h" -#include "fboss/agent/Platform.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" diff --git a/fboss/agent/hw/test/dataplane_tests/HwPacketSendTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwPacketSendTests.cpp index 7b3765d9c22d7..62628c2c32770 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwPacketSendTests.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwPacketSendTests.cpp @@ -13,14 +13,10 @@ #include "fboss/agent/hw/test/HwLinkStateDependentTest.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/hw/test/HwTestPortUtils.h" -#include "fboss/agent/packet/EthHdr.h" #include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/TrunkUtils.h" -#include "folly/Utility.h" #include -#include #include using namespace std::chrono_literals; diff --git a/fboss/agent/hw/test/dataplane_tests/HwProdInvariantTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwProdInvariantTests.cpp index 075924be39d43..4cb2acd67180a 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwProdInvariantTests.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwProdInvariantTests.cpp @@ -19,12 +19,9 @@ #include "fboss/agent/hw/test/dataplane_tests/HwProdInvariantHelper.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/hw/test/dataplane_tests/HwTestPfcUtils.h" #include "fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.h" #include "fboss/agent/test/utils/QueuePerHostTestUtils.h" -#include "fboss/agent/state/Port.h" - DEFINE_bool( dynamic_config, false, diff --git a/fboss/agent/hw/test/dataplane_tests/HwTestAqmUtils.cpp b/fboss/agent/hw/test/dataplane_tests/HwTestAqmUtils.cpp index ba5f042432097..5063c6a5d83e2 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwTestAqmUtils.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwTestAqmUtils.cpp @@ -11,9 +11,7 @@ #include "fboss/agent/hw/test/dataplane_tests/HwTestAqmUtils.h" #include #include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/hw/test/HwTestPortUtils.h" #include "fboss/agent/test/utils/AqmTestUtils.h" -#include "fboss/lib/CommonUtils.h" namespace facebook::fboss::utility { diff --git a/fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.cpp b/fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.cpp index e94330849d3b5..0e7d215e36f18 100644 --- a/fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.cpp +++ b/fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.cpp @@ -11,8 +11,6 @@ #include "fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.h" #include "fboss/agent/hw/test/HwSwitchEnsemble.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" -#include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/SwitchState.h" #include "fboss/lib/CommonUtils.h" #include diff --git a/fboss/agent/hw/test/dataplane_tests/HwTrafficPfcTests.cpp b/fboss/agent/hw/test/dataplane_tests/HwTrafficPfcTests.cpp new file mode 100644 index 0000000000000..d8ae92f72a95a --- /dev/null +++ b/fboss/agent/hw/test/dataplane_tests/HwTrafficPfcTests.cpp @@ -0,0 +1,833 @@ +#include + +#include "fboss/agent/Platform.h" +#include "fboss/agent/SwitchStats.h" +#include "fboss/agent/Utils.h" +#include "fboss/agent/hw/test/ConfigFactory.h" +#include "fboss/agent/hw/test/HwLinkStateDependentTest.h" +#include "fboss/agent/hw/test/HwTestCoppUtils.h" +#include "fboss/agent/hw/test/HwTestPacketUtils.h" +#include "fboss/agent/test/EcmpSetupHelper.h" + +#include "fboss/agent/hw/test/dataplane_tests/HwTestQosUtils.h" +#include "fboss/agent/state/Interface.h" +#include "fboss/agent/state/Port.h" +#include "fboss/agent/state/PortMap.h" +#include "fboss/agent/state/SwitchState.h" +#include "fboss/agent/test/ResourceLibUtil.h" + +#include "fboss/lib/CommonUtils.h" + +using folly::IPAddress; +using folly::IPAddressV6; +using std::string; + +DEFINE_bool( + skip_stop_pfc_test_traffic, + false, + "Skip stopping traffic after traffic test!"); +namespace { +static constexpr auto kGlobalSharedBytes{20000}; +static constexpr auto kGlobalHeadroomBytes{ + 5000}; // keep this lower than globalSharedBytes +static constexpr auto kPgLimitBytes{2200}; +static constexpr auto kPgResumeOffsetBytes{1800}; +static constexpr auto kPgHeadroomBytes{ + 2200}; // keep this lower than kGlobalSharedBytes +static constexpr auto kGlobalIngressEgressBufferPoolSize{ + 5064760}; // Keep a high pool size for DNX +static constexpr auto kLosslessTrafficClass{2}; +static constexpr auto kLosslessPriority{2}; +static constexpr auto kNumberOfPortsToEnablePfcOn{2}; +static const std::vector kLosslessPgIds{2, 3}; +static const std::vector kLossyPgIds{0}; +// Hardcoding register value to force PFC generation for port 2, +// kLosslessPriority for DNX. This needs to be modified if the +// port used in test or PFC priority changes! Details of how to +// compute the value to use for a port/priority is captured in +// CS00012321021. To summarize, +// value = 1 << ((port_first_phy - core_first_phy)*8 + priority, +// with port_first_phy from "port management dump full port=<>", +// core_first_phy from "dnx data dump nif.phys.nof_phys_per_core". +static const std:: + map, std::string> + kRegValToForcePfcTxForPriorityOnPortDnx = { + {std::make_tuple( + facebook::fboss::cfg::AsicType::ASIC_TYPE_JERICHO2, + 2, + 2), + "0x40000000000000000"}, + {std::make_tuple( + facebook::fboss::cfg::AsicType::ASIC_TYPE_JERICHO3, + 8, + 2), + "4"}, +}; + +struct PfcBufferParams { + int globalShared = kGlobalSharedBytes; + int globalHeadroom = kGlobalHeadroomBytes; + int pgLimit = kPgLimitBytes; + int pgHeadroom = kPgHeadroomBytes; + std::optional scalingFactor = + facebook::fboss::cfg::MMUScalingFactor::ONE_128TH; + int resumeOffset = kPgResumeOffsetBytes; +}; + +struct TrafficTestParams { + PfcBufferParams buffer = PfcBufferParams{}; + bool expectDrop = false; + bool scale = false; +}; + +std::tuple getPfcTxRxXonHwPortStats( + facebook::fboss::HwSwitchEnsemble* ensemble, + const facebook::fboss::HwPortStats& portStats, + const int pfcPriority) { + return { + portStats.get_outPfc_().at(pfcPriority), + portStats.get_inPfc_().at(pfcPriority), + ensemble->getAsic()->isSupported( + facebook::fboss::HwAsic::Feature::PFC_XON_TO_XOFF_COUNTER) + ? portStats.get_inPfcXon_().at(pfcPriority) + : 0}; +} + +bool getPfcCountersRetry( + facebook::fboss::HwSwitchEnsemble* ensemble, + const facebook::fboss::PortID& portId, + const int pfcPriority) { + int txPfcCtr = 0, rxPfcCtr = 0, rxPfcXonCtr = 0; + + auto pfcCountersIncrementing = [&](const auto& newStats) { + auto portStatsIter = newStats.find(portId); + std::tie(txPfcCtr, rxPfcCtr, rxPfcXonCtr) = + getPfcTxRxXonHwPortStats(ensemble, portStatsIter->second, pfcPriority); + XLOG(DBG0) << " Port: " << portId << " PFC TX/RX PFC/RX_PFC_XON " + << txPfcCtr << "/" << rxPfcCtr << "/" << rxPfcXonCtr + << ", priority: " << pfcPriority; + + if (ensemble->getAsic()->isSupported( + facebook::fboss::HwAsic::Feature::PFC_XON_TO_XOFF_COUNTER)) { + return (txPfcCtr > 0 && rxPfcCtr > 0 && rxPfcXonCtr > 0); + } + return (txPfcCtr > 0 && rxPfcCtr > 0); + }; + + return ensemble->waitPortStatsCondition( + pfcCountersIncrementing, 10, std::chrono::milliseconds(500)); +} + +void validatePfcCounters( + facebook::fboss::HwSwitchEnsemble* ensemble, + const int pri, + const std::vector& portIds) { + // no need t retry if looking for baseline counter + for (const auto& portId : portIds) { + EXPECT_TRUE(getPfcCountersRetry(ensemble, portId, pri)); + } +} + +void validateBufferPoolWatermarkCounters( + facebook::fboss::HwSwitchEnsemble* ensemble, + const int /* pri */, + const std::vector& /* portIds */) { + uint64_t globalHeadroomWatermark{}; + uint64_t globalSharedWatermark{}; + WITH_RETRIES({ + ensemble->getHwSwitch()->updateStats(); + auto switchWatermarkStats = + ensemble->getHwSwitch()->getSwitchWatermarkStats(); + for (auto& headroomStats : + *switchWatermarkStats.globalHeadroomWatermarkBytes()) { + globalHeadroomWatermark += headroomStats.second; + } + for (auto& sharedStats : + *switchWatermarkStats.globalSharedWatermarkBytes()) { + globalSharedWatermark += sharedStats.second; + } + XLOG(DBG0) << "Global headroom watermark: " << globalHeadroomWatermark + << ", Global shared watermark: " << globalSharedWatermark; + if (ensemble->getAsic()->isSupported( + facebook::fboss::HwAsic::Feature:: + INGRESS_PRIORITY_GROUP_HEADROOM_WATERMARK)) { + EXPECT_EVENTUALLY_GT(globalHeadroomWatermark, 0); + } + EXPECT_EVENTUALLY_GT(globalSharedWatermark, 0); + }); +} + +void validateIngressPriorityGroupWatermarkCounters( + facebook::fboss::HwSwitchEnsemble* ensemble, + const int pri, + const std::vector& portIds) { + std::string watermarkKeys = "shared"; + int numKeys = 1; + if (ensemble->getAsic()->isSupported( + facebook::fboss::HwAsic::Feature:: + INGRESS_PRIORITY_GROUP_HEADROOM_WATERMARK)) { + watermarkKeys.append("|headroom"); + numKeys++; + } + auto ingressPriorityGroupWatermarksIncrementing = + [&](const auto& /*newStats*/) { + for (const auto& portId : portIds) { + const auto& portName = ensemble->getProgrammedState() + ->getPorts() + ->getNodeIf(portId) + ->getName(); + std::string pg = + ensemble->isSai() ? folly::sformat(".pg{}", pri) : ""; + auto regex = folly::sformat( + "buffer_watermark_pg_({}).{}{}.p100.60", + watermarkKeys, + portName, + pg); + auto counters = facebook::fb303::fbData->getRegexCounters(regex); + CHECK_EQ(counters.size(), numKeys); + for (const auto& ctr : counters) { + XLOG(DBG0) << ctr.first << " : " << ctr.second; + if (!ctr.second) { + return false; + } + } + } + return true; + }; + EXPECT_TRUE(ensemble->waitPortStatsCondition( + ingressPriorityGroupWatermarksIncrementing, + 5, + std::chrono::milliseconds(1000))); +} + +} // namespace + +namespace facebook::fboss { + +class HwTrafficPfcTest : public HwLinkStateDependentTest { + private: + void SetUp() override { + FLAGS_mmu_lossless_mode = true; + /* + * Makes this flag available so that it can be used in early + * stages of init to setup common buffer pool for specific + * asics like Jericho2. + */ + FLAGS_ingress_egress_buffer_pool_size = kGlobalIngressEgressBufferPoolSize; + HwLinkStateDependentTest::SetUp(); + } + + cfg::SwitchConfig initialConfig() const override { + auto cfg = utility::onePortPerInterfaceConfig( + getHwSwitch(), + masterLogicalPortIds(), + getAsic()->desiredLoopbackModes()); + utility::setTTLZeroCpuConfig(getHwSwitchEnsemble()->getL3Asics(), cfg); + return cfg; + } + + std::vector portIdsForTest() { + return { + masterLogicalInterfacePortIds()[0], masterLogicalInterfacePortIds()[1]}; + } + + std::vector kDestIps() const { + return { + folly::IPAddressV6("2620:0:1cfe:face:b00c::4"), + folly::IPAddressV6("2620:0:1cfe:face:b00c::5")}; + } + + folly::MacAddress getIntfMac() const { + return utility::getFirstInterfaceMac(getProgrammedState()); + } + + void setupQosMapForPfc(cfg::QosMap& qosMap) { + // update pfc maps + std::map tc2PgId; + std::map pfcPri2PgId; + std::map pfcPri2QueueId; + // program defaults + for (auto i = 0; i < 8; i++) { + tc2PgId.emplace(i, i); + pfcPri2PgId.emplace(i, i); + pfcPri2QueueId.emplace(i, i); + } + + for (auto& tc2Pg : tc2PgOverride) { + tc2PgId[tc2Pg.first] = tc2Pg.second; + } + for (auto& tmp : pfcPri2PgIdOverride) { + pfcPri2PgId[tmp.first] = tmp.second; + } + + qosMap.dscpMaps()->resize(8); + for (auto i = 0; i < 8; i++) { + qosMap.dscpMaps()[i].internalTrafficClass() = i; + for (auto j = 0; j < 8; j++) { + qosMap.dscpMaps()[i].fromDscpToTrafficClass()->push_back(8 * i + j); + } + } + qosMap.trafficClassToPgId() = std::move(tc2PgId); + qosMap.pfcPriorityToPgId() = std::move(pfcPri2PgId); + qosMap.pfcPriorityToQueueId() = std::move(pfcPri2QueueId); + } + + void setupPfc(cfg::SwitchConfig& cfg, const std::vector& ports) { + cfg::PortPfc pfc; + pfc.tx() = true; + pfc.rx() = true; + pfc.portPgConfigName() = "foo"; + + cfg::QosMap qosMap; + // setup qos map with pfc structs + setupQosMapForPfc(qosMap); + + // setup qosPolicy + cfg.qosPolicies()->resize(1); + cfg.qosPolicies()[0].name() = "qp"; + cfg.qosPolicies()[0].qosMap() = qosMap; + cfg::TrafficPolicyConfig dataPlaneTrafficPolicy; + dataPlaneTrafficPolicy.defaultQosPolicy() = "qp"; + cfg.dataPlaneTrafficPolicy() = dataPlaneTrafficPolicy; + + for (const auto& portID : ports) { + auto portCfg = std::find_if( + cfg.ports()->begin(), cfg.ports()->end(), [&portID](auto& port) { + return PortID(*port.logicalID()) == portID; + }); + portCfg->pfc() = pfc; + } + } + + void setupBufferPoolConfig( + std::map& bufferPoolCfgMap, + int globalSharedBytes, + int globalHeadroomBytes) { + cfg::BufferPoolConfig poolConfig; + // provide small shared buffer size + // idea is to hit the limit and trigger XOFF (PFC) + poolConfig.sharedBytes() = globalSharedBytes; + poolConfig.headroomBytes() = globalHeadroomBytes; + bufferPoolCfgMap.insert(std::make_pair("bufferNew", poolConfig)); + } + + void setupPortPgConfig( + std::map>& portPgConfigMap, + int pgLimit, + int pgHeadroom, + std::optional scalingFactor, + int resumeOffset) { + std::vector portPgConfigs; + // create 2 pgs + for (auto pgId : kLosslessPgIds) { + cfg::PortPgConfig pgConfig; + pgConfig.id() = pgId; + pgConfig.bufferPoolName() = "bufferNew"; + // provide atleast 1 cell worth of minLimit + pgConfig.minLimitBytes() = pgLimit; + // set large enough headroom to avoid drop + pgConfig.headroomLimitBytes() = pgHeadroom; + // resume offset + pgConfig.resumeOffsetBytes() = resumeOffset; + // set scaling factor + if (scalingFactor) { + pgConfig.scalingFactor() = *scalingFactor; + } + portPgConfigs.emplace_back(pgConfig); + } + + // create lossy pgs + if (!FLAGS_allow_zero_headroom_for_lossless_pg) { + // If the flag is set, we already have lossless PGs being created + // with headroom as 0 and there is no way to differentiate lossy + // and lossless PGs now that headroom is set to zero for lossless. + // So, avoid creating lossy PGs as this will result in PFC being + // enabled for 3 priorities, which is not supported for TAJO. + for (auto pgId : kLossyPgIds) { + cfg::PortPgConfig pgConfig; + pgConfig.id() = pgId; + pgConfig.bufferPoolName() = "bufferNew"; + // provide atleast 1 cell worth of minLimit + pgConfig.minLimitBytes() = pgLimit; + // headroom set 0 identifies lossy pgs + pgConfig.headroomLimitBytes() = 0; + // resume offset + pgConfig.resumeOffsetBytes() = resumeOffset; + // set scaling factor + if (scalingFactor) { + pgConfig.scalingFactor() = *scalingFactor; + } + portPgConfigs.emplace_back(pgConfig); + } + } + + portPgConfigMap["foo"] = portPgConfigs; + } + + void setupBuffers( + PfcBufferParams buffer = PfcBufferParams{}, + bool scaleConfig = false) { + auto newCfg{initialConfig()}; + int numberOfPorts = scaleConfig ? masterLogicalInterfacePortIds().size() + : kNumberOfPortsToEnablePfcOn; + auto allPorts = masterLogicalInterfacePortIds(); + std::vector ports( + allPorts.begin(), allPorts.begin() + numberOfPorts); + setupPfc(newCfg, ports); + + std::map> portPgConfigMap; + setupPortPgConfig( + portPgConfigMap, + buffer.pgLimit, + buffer.pgHeadroom, + buffer.scalingFactor, + buffer.resumeOffset); + newCfg.portPgConfigs() = portPgConfigMap; + + // create buffer pool + std::map bufferPoolCfgMap; + setupBufferPoolConfig( + bufferPoolCfgMap, buffer.globalShared, buffer.globalHeadroom); + newCfg.bufferPoolConfigs() = bufferPoolCfgMap; + cfg_ = newCfg; + applyNewConfig(newCfg); + } + + HwSwitchEnsemble::Features featuresDesired() const override { + return {HwSwitchEnsemble::LINKSCAN, HwSwitchEnsemble::PACKET_RX}; + } + + std::tuple getTxRxXonPfcCounters( + const facebook::fboss::PortID& portId, + const int pfcPriority) { + auto portStats = getLatestPortStats(portId); + return getPfcTxRxXonHwPortStats( + getHwSwitchEnsemble(), portStats, pfcPriority); + } + + void validateInitPfcCounters( + const std::vector& portIds, + const int pfcPriority) { + int txPfcCtr = 0, rxPfcCtr = 0, rxPfcXonCtr = 0; + // no need to retry if looking for baseline counter + for (const auto& portId : portIds) { + auto portStats = getHwSwitchEnsemble()->getLatestPortStats(portId); + auto ingressDropRaw = *portStats.inDiscardsRaw_(); + XLOG(DBG0) << " validateInitPfcCounters: Port: " << portId + << " IngressDropRaw: " << ingressDropRaw; + EXPECT_TRUE(ingressDropRaw == 0); + std::tie(txPfcCtr, rxPfcCtr, rxPfcXonCtr) = + getTxRxXonPfcCounters(portId, pfcPriority); + EXPECT_TRUE((txPfcCtr == 0) && (rxPfcCtr == 0) && (rxPfcXonCtr == 0)); + } + } + + void validateIngressDropCounters(const std::vector& portIds) { + WITH_RETRIES({ + for (const auto& portId : portIds) { + auto portStats = getHwSwitchEnsemble()->getLatestPortStats(portId); + auto ingressDropRaw = *portStats.inDiscardsRaw_(); + uint64_t ingressCongestionDiscards = 0; + std::string ingressCongestionDiscardLog{}; + if (getHwSwitchEnsemble()->getAsic()->isSupported( + HwAsic::Feature::INGRESS_PRIORITY_GROUP_DROPPED_PACKETS)) { + ingressCongestionDiscards = *portStats.inCongestionDiscards_(); + ingressCongestionDiscardLog = " IngressCongestionDiscards: " + + std::to_string(ingressCongestionDiscards); + } + XLOG(DBG0) << " validateIngressDropCounters: Port: " << portId + << " IngressDropRaw: " << ingressDropRaw + << ingressCongestionDiscardLog; + EXPECT_EVENTUALLY_GT(ingressDropRaw, 0); + if (getHwSwitchEnsemble()->getAsic()->isSupported( + HwAsic::Feature::INGRESS_PRIORITY_GROUP_DROPPED_PACKETS)) { + EXPECT_EVENTUALLY_GT(ingressCongestionDiscards, 0); + } + } + if (getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3) { + // Jericho3 has additional VSQ drops counters which accounts for + // ingress buffer drops. + getHwSwitchEnsemble()->getHwSwitch()->updateStats(); + fb303::ThreadCachedServiceData::get()->publishStats(); + auto vsqResourcesExhautionDrops = getHwSwitchEnsemble() + ->getHwSwitch() + ->getSwitchStats() + ->getVsqResourcesExhautionDrops(); + XLOG(DBG0) + << " validateIngressDropCounters: vsqResourceExhaustionDrops: " + << vsqResourcesExhautionDrops; + EXPECT_EVENTUALLY_GT(vsqResourcesExhautionDrops, 0); + } + }); + } + + protected: + void runTestWithCfg( + const int trafficClass, + const int pfcPriority, + TrafficTestParams testParams = TrafficTestParams{}, + std::function& portIdsToValidate)> validateCounterFn = + validatePfcCounters) { + std::vector portIds = portIdsForTest(); + auto setup = [&]() { + if ((getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2) || + (getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3)) { + // Keep low scaling factor so that headroom usage is attempted + // for Jericho family of ASICs. + testParams.buffer.scalingFactor = cfg::MMUScalingFactor::ONE_32768TH; + } + setupBuffers(testParams.buffer, testParams.scale); + setupEcmpTraffic(portIds); + // ensure counter is 0 before we start traffic + validateInitPfcCounters(portIds, pfcPriority); + }; + auto verifyCommon = [&](bool postWb) { + pumpTraffic(trafficClass); + // check counters are as expected + validateCounterFn(getHwSwitchEnsemble(), pfcPriority, portIds); + if (testParams.expectDrop) { + validateIngressDropCounters(portIds); + } + if (!FLAGS_skip_stop_pfc_test_traffic && postWb) { + // stop traffic so that unconfiguration can happen without issues + stopTraffic(portIds); + } + }; + auto verify = [&]() { verifyCommon(false /* postWb */); }; + auto verifyPostWb = [&]() { verifyCommon(true /* postWb */); }; + verifyAcrossWarmBoots(setup, verify, []() {}, verifyPostWb); + } + + void setupEcmpTraffic(const std::vector& portIds) { + utility::EcmpSetupTargetedPorts6 ecmpHelper{ + getProgrammedState(), getIntfMac()}; + + CHECK_EQ(portIds.size(), kDestIps().size()); + for (int i = 0; i < portIds.size(); ++i) { + const PortDescriptor port(portIds[i]); + RoutePrefixV6 route{kDestIps()[i], 128}; + applyNewState(ecmpHelper.resolveNextHops(getProgrammedState(), {port})); + ecmpHelper.programRoutes(getRouteUpdater(), {port}, {route}); + utility::ttlDecrementHandlingForLoopbackTraffic( + getHwSwitchEnsemble(), + ecmpHelper.getRouterId(), + ecmpHelper.nhop(port)); + } + } + + void setupConfigAndEcmpTraffic() { + setupBuffers(); + setupEcmpTraffic(portIdsForTest()); + } + + public: + void pumpTraffic(const int priority) { + auto vlanId = utility::firstVlanID(initialConfig()); + auto intfMac = getIntfMac(); + auto srcMac = utility::MacAddressGenerator().get(intfMac.u64NBO() + 1); + // pri = 7 => dscp 56 + int dscp = priority * 8; + // Tomahawk4 need 5 packets per flow to trigger PFC + int numPacketsPerFlow = getHwSwitchEnsemble()->getMinPktsForLineRate( + masterLogicalInterfacePortIds()[0]); + for (int i = 0; i < numPacketsPerFlow; i++) { + for (const auto& dstIp : kDestIps()) { + auto txPacket = utility::makeUDPTxPacket( + getHwSwitch(), + vlanId, + srcMac, + intfMac, + folly::IPAddressV6("2620:0:1cfe:face:b00c::3"), + dstIp, + 8000, + 8001, + dscp << 2, // dscp is last 6 bits in TC + 255, + std::vector(2000, 0xff)); + + getHwSwitch()->sendPacketSwitchedSync(std::move(txPacket)); + } + } + } + void stopTraffic(const std::vector& portIds) { + // Toggle the link to break looping traffic + for (auto portId : portIds) { + bringDownPort(portId); + bringUpPort(portId); + } + } + + bool canTriggerPfcDeadlockDetectionWithTraffic() { + // Return false for ASICs that cannot trigger PFC detection with + // loop traffic! + if ((getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2) || + (getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3)) { + return false; + } else { + return true; + } + } + + void setupWatchdog(bool enable) { + cfg::PfcWatchdog pfcWatchdog; + if (enable) { + pfcWatchdog.recoveryAction() = cfg::PfcWatchdogRecoveryAction::NO_DROP; + if (canTriggerPfcDeadlockDetectionWithTraffic()) { + pfcWatchdog.recoveryTimeMsecs() = 10; + pfcWatchdog.detectionTimeMsecs() = 1; + } else { + pfcWatchdog.recoveryTimeMsecs() = 1000; + pfcWatchdog.detectionTimeMsecs() = 200; + } + } + + for (const auto& portID : portIdsForTest()) { + auto portCfg = utility::findCfgPort(cfg_, portID); + if (portCfg->pfc().has_value()) { + if (enable) { + portCfg->pfc()->watchdog() = pfcWatchdog; + } else { + portCfg->pfc()->watchdog().reset(); + } + } + } + applyNewConfig(cfg_); + } + + void validatePfcWatchdogCountersReset(const PortID& port) { + auto deadlockCtr = + getHwSwitchEnsemble()->readPfcDeadlockDetectionCounter(port); + auto recoveryCtr = + getHwSwitchEnsemble()->readPfcDeadlockRecoveryCounter(port); + XLOG(DBG2) << "deadlockCtr:" << deadlockCtr + << ", recoveryCtr:" << recoveryCtr; + EXPECT_TRUE((deadlockCtr == 0) && (recoveryCtr == 0)); + } + + void validatePfcWatchdogCounters(const PortID& port) { + int deadlockCtrBefore = + getHwSwitchEnsemble()->readPfcDeadlockDetectionCounter(port); + int recoveryCtrBefore = + getHwSwitchEnsemble()->readPfcDeadlockRecoveryCounter(port); + WITH_RETRIES_N_TIMED(10, std::chrono::milliseconds(1000), { + int deadlockCtr = + getHwSwitchEnsemble()->readPfcDeadlockDetectionCounter(port); + int recoveryCtr = + getHwSwitchEnsemble()->readPfcDeadlockRecoveryCounter(port); + XLOG(DBG0) << "For port: " << port << " deadlockCtr = " << deadlockCtr + << " recoveryCtr = " << recoveryCtr; + EXPECT_EVENTUALLY_TRUE( + (deadlockCtr > deadlockCtrBefore) && + (recoveryCtr > recoveryCtrBefore)); + }); + } + + void validateRxPfcCounterIncrement( + const PortID& port, + const int pfcPriority) { + int retries = 2; + int rxPfcCtrOld = 0; + std::tie(std::ignore, rxPfcCtrOld, std::ignore) = + getTxRxXonPfcCounters(port, pfcPriority); + while (retries--) { + int rxPfcCtrNew = 0; + std::this_thread::sleep_for(std::chrono::seconds(1)); + std::tie(std::ignore, rxPfcCtrNew, std::ignore) = + getTxRxXonPfcCounters(port, pfcPriority); + if (rxPfcCtrNew > rxPfcCtrOld) { + return; + } + } + EXPECT_TRUE(0); + } + + void triggerPfcDeadlockDetection(const PortID& port) { + if ((getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2) || + (getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3)) { + // As traffic cannot trigger deadlock for DNX, force back + // to back PFC frame generation which causes a deadlock! + XLOG(DBG0) << "Triggering PFC deadlock detection on port ID : " + << static_cast(port); + auto iter = kRegValToForcePfcTxForPriorityOnPortDnx.find(std::make_tuple( + getAsic()->getAsicType(), static_cast(port), kLosslessPriority)); + EXPECT_FALSE(iter == kRegValToForcePfcTxForPriorityOnPortDnx.end()); + std::string out; + getHwSwitchEnsemble()->runDiagCommand( + "modreg CFC_FRC_NIF_ETH_PFC FRC_NIF_ETH_PFC=" + iter->second + + "\nquit\n", + out); + } else { + // Send traffic to trigger deadlock + pumpTraffic(kLosslessTrafficClass); + validateRxPfcCounterIncrement(port, kLosslessPriority); + } + } + + std::map tc2PgOverride = {}; + std::map pfcPri2PgIdOverride = {}; + cfg::SwitchConfig cfg_; +}; + +class HwTrafficPfcGenTest + : public HwTrafficPfcTest, + public testing::WithParamInterface { + void SetUp() override { + auto testParams = GetParam(); + FLAGS_mmu_lossless_mode = true; + /* + * Makes this flag available so that it can be used in early + * stages of init to setup common buffer pool for specific + * asics like Jericho2. + */ + FLAGS_ingress_egress_buffer_pool_size = kGlobalIngressEgressBufferPoolSize; + if (testParams.buffer.pgHeadroom == 0) { + // Force headroom 0 for lossless PG + FLAGS_allow_zero_headroom_for_lossless_pg = true; + } + HwLinkStateDependentTest::SetUp(); + } +}; + +INSTANTIATE_TEST_SUITE_P( + HwTrafficPfcTest, + HwTrafficPfcGenTest, + testing::Values( + TrafficTestParams{}, + TrafficTestParams{ + .buffer = + PfcBufferParams{ + .globalShared = kGlobalSharedBytes * 5, + .pgLimit = kPgLimitBytes / 3, + .resumeOffset = kPgResumeOffsetBytes / 3}, + .scale = true}, + TrafficTestParams{ + .buffer = + PfcBufferParams{.pgHeadroom = 0, .scalingFactor = std::nullopt}, + .expectDrop = true}, + TrafficTestParams{ + .buffer = + PfcBufferParams{ + .globalHeadroom = 0, + .scalingFactor = std::nullopt}, + .expectDrop = true}), + [](const ::testing::TestParamInfo& info) { + auto testParams = info.param; + if (testParams.buffer.pgHeadroom == 0) { + return "WithZeroPgHeadRoomCfg"; + } else if (testParams.buffer.globalHeadroom == 0) { + return "WithZeroGlobalHeadRoomCfg"; + } else if (testParams.scale) { + return "WithScaleCfg"; + } else { + return "WithDefaultCfg"; + } + }); + +TEST_P(HwTrafficPfcGenTest, verifyPfc) { + const int trafficClass = kLosslessTrafficClass; + const int pfcPriority = kLosslessPriority; + TrafficTestParams trafficParams = GetParam(); + runTestWithCfg(trafficClass, pfcPriority, trafficParams); +} + +TEST_F(HwTrafficPfcTest, verifyBufferPoolWatermarks) { + const int trafficClass = kLosslessTrafficClass; + const int pfcPriority = kLosslessPriority; + cfg::MMUScalingFactor scalingFactor = + getAsic()->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2 + ? cfg::MMUScalingFactor::ONE_32768TH + : cfg::MMUScalingFactor::ONE_64TH; + runTestWithCfg( + trafficClass, + pfcPriority, + TrafficTestParams{ + .buffer = PfcBufferParams{.scalingFactor = scalingFactor}}, + validateBufferPoolWatermarkCounters); +} + +TEST_F(HwTrafficPfcTest, verifyIngressPriorityGroupWatermarks) { + const int trafficClass = kLosslessTrafficClass; + const int pfcPriority = kLosslessPriority; + runTestWithCfg( + trafficClass, + pfcPriority, + TrafficTestParams{ + .buffer = PfcBufferParams{.scalingFactor = std::nullopt}}, + validateIngressPriorityGroupWatermarkCounters); +} + +// intent of this test is to send traffic so that it maps to +// tc 2, now map tc 2 to PG 3. Mapping from PG to pfc priority +// is 1:1, which means PG 3 is mapped to pfc priority 3. +// Generate traffic to fire off PFC with smaller shared buffer +TEST_F(HwTrafficPfcTest, verifyPfcWithMapChanges_0) { + const int trafficClass = kLosslessTrafficClass; + const int pfcPriority = 3; + tc2PgOverride.insert(std::make_pair(trafficClass, pfcPriority)); + runTestWithCfg(trafficClass, pfcPriority); +} + +// intent of this test is to send traffic so that it maps to +// tc 7. Now we map tc 7 -> PG 2. Mapping from PG to pfc +// priority is 1:1, which means PG 2 is mapped to pfc priority 2. +// Generate traffic to fire off PFC with smaller shared buffer +TEST_F(HwTrafficPfcTest, verifyPfcWithMapChanges_1) { + const int trafficClass = 7; + const int pfcPriority = kLosslessPriority; + tc2PgOverride.insert(std::make_pair(trafficClass, pfcPriority)); + runTestWithCfg(trafficClass, pfcPriority); +} + +// intent of this test is to setup watchdog for the PFC +// and observe it kicks in and update the watchdog counters +// watchdog counters are created/incremented when callback +// for deadlock/recovery kicks in +TEST_F(HwTrafficPfcTest, PfcWatchdog) { + auto setup = [&]() { + setupConfigAndEcmpTraffic(); + setupWatchdog(true /* enable watchdog */); + }; + auto verify = [&]() { + triggerPfcDeadlockDetection(masterLogicalInterfacePortIds()[0]); + validatePfcWatchdogCounters(masterLogicalInterfacePortIds()[0]); + }; + verifyAcrossWarmBoots(setup, verify); +} + +// intent of this test is to setup watchdog for PFC +// and remove it. Observe that counters should stop incrementing +// Clear them and check they stay the same +// Since the watchdog counters are sw based, upon warm boot +// we don't expect these counters to be incremented either +TEST_F(HwTrafficPfcTest, PfcWatchdogReset) { + auto setup = [&]() { + setupConfigAndEcmpTraffic(); + setupWatchdog(true /* enable watchdog */); + triggerPfcDeadlockDetection(masterLogicalInterfacePortIds()[0]); + // lets wait for the watchdog counters to be populated + validatePfcWatchdogCounters(masterLogicalInterfacePortIds()[0]); + // reset watchdog + setupWatchdog(false /* disable */); + // reset the watchdog counters + getHwSwitchEnsemble()->clearPfcDeadlockRecoveryCounter( + masterLogicalInterfacePortIds()[0]); + getHwSwitchEnsemble()->clearPfcDeadlockDetectionCounter( + masterLogicalInterfacePortIds()[0]); + }; + + auto verify = [&]() { + // ensure that RX PFC continues to increment + validateRxPfcCounterIncrement( + masterLogicalInterfacePortIds()[0], kLosslessPriority); + // validate that pfc watchdog counters do not increment anymore + validatePfcWatchdogCountersReset(masterLogicalInterfacePortIds()[0]); + }; + + // warmboot support to be added in next step + verifyAcrossWarmBoots(setup, verify); +} + +} // namespace facebook::fboss diff --git a/fboss/agent/hw/test/golden/asic/jericho3.csv b/fboss/agent/hw/test/golden/asic/jericho3.csv new file mode 100644 index 0000000000000..46e383030a4dd --- /dev/null +++ b/fboss/agent/hw/test/golden/asic/jericho3.csv @@ -0,0 +1,13938 @@ +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[0], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[10], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[11], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[12], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[13], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[14], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[15], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[1], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[2], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[3], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[4], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[5], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[6], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[7], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[8], +mem,CGM_PB_VSQ_RJCT_MASK.CGM0[9], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[0], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[10], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[11], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[12], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[13], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[14], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[15], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[1], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[2], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[3], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[4], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[5], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[6], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[7], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[8], +mem,CGM_PB_VSQ_RJCT_MASK.CGM1[9], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[0], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[10], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[11], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[12], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[13], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[14], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[15], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[1], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[2], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[3], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[4], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[5], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[6], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[7], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[8], +mem,CGM_PB_VSQ_RJCT_MASK.CGM2[9], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[0], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[10], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[11], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[12], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[13], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[14], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[15], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[1], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[2], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[3], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[4], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[5], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[6], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[7], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[8], +mem,CGM_PB_VSQ_RJCT_MASK.CGM3[9], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[0], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[100], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[101], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[102], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[103], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[104], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[105], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[106], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[107], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[108], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[109], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[10], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[110], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[111], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[112], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[113], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[114], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[115], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[116], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[117], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[118], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[119], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[11], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[120], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[121], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[122], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[123], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[124], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[125], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[126], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[127], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[12], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[13], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[14], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[15], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[16], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[17], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[18], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[19], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[1], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[20], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[21], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[22], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[23], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[24], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[25], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[26], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[27], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[28], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[29], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[2], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[30], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[31], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[32], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[33], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[34], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[35], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[36], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[37], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[38], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[39], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[3], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[40], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[41], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[42], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[43], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[44], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[45], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[46], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[47], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[48], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[49], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[4], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[50], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[51], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[52], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[53], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[54], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[55], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[56], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[57], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[58], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[59], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[5], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[60], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[61], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[62], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[63], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[64], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[65], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[66], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[67], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[68], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[69], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[6], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[70], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[71], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[72], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[73], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[74], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[75], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[76], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[77], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[78], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[79], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[7], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[80], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[81], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[82], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[83], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[84], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[85], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[86], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[87], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[88], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[89], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[8], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[90], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[91], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[92], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[93], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[94], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[95], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[96], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[97], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[98], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[99], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM0[9], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[0], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[100], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[101], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[102], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[103], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[104], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[105], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[106], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[107], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[108], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[109], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[10], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[110], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[111], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[112], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[113], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[114], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[115], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[116], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[117], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[118], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[119], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[11], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[120], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[121], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[122], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[123], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[124], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[125], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[126], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[127], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[12], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[13], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[14], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[15], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[16], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[17], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[18], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[19], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[1], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[20], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[21], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[22], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[23], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[24], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[25], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[26], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[27], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[28], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[29], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[2], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[30], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[31], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[32], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[33], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[34], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[35], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[36], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[37], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[38], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[39], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[3], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[40], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[41], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[42], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[43], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[44], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[45], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[46], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[47], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[48], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[49], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[4], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[50], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[51], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[52], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[53], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[54], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[55], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[56], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[57], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[58], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[59], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[5], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[60], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[61], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[62], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[63], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[64], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[65], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[66], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[67], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[68], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[69], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[6], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[70], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[71], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[72], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[73], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[74], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[75], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[76], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[77], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[78], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[79], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[7], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[80], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[81], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[82], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[83], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[84], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[85], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[86], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[87], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[88], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[89], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[8], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[90], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[91], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[92], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[93], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[94], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[95], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[96], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[97], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[98], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[99], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM1[9], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[0], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[100], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[101], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[102], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[103], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[104], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[105], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[106], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[107], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[108], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[109], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[10], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[110], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[111], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[112], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[113], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[114], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[115], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[116], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[117], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[118], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[119], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[11], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[120], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[121], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[122], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[123], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[124], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[125], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[126], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[127], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[12], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[13], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[14], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[15], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[16], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[17], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[18], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[19], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[1], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[20], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[21], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[22], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[23], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[24], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[25], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[26], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[27], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[28], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[29], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[2], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[30], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[31], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[32], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[33], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[34], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[35], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[36], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[37], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[38], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[39], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[3], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[40], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[41], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[42], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[43], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[44], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[45], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[46], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[47], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[48], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[49], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[4], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[50], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[51], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[52], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[53], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[54], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[55], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[56], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[57], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[58], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[59], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[5], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[60], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[61], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[62], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[63], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[64], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[65], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[66], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[67], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[68], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[69], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[6], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[70], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[71], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[72], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[73], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[74], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[75], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[76], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[77], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[78], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[79], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[7], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[80], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[81], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[82], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[83], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[84], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[85], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[86], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[87], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[88], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[89], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[8], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[90], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[91], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[92], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[93], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[94], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[95], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[96], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[97], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[98], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[99], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM2[9], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[0], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[100], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[101], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[102], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[103], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[104], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[105], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[106], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[107], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[108], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[109], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[10], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[110], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[111], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[112], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[113], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[114], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[115], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[116], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[117], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[118], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[119], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[11], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[120], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[121], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[122], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[123], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[124], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[125], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[126], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[127], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[12], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[13], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[14], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[15], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[16], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[17], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[18], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[19], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[1], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[20], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[21], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[22], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[23], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[24], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[25], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[26], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[27], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[28], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[29], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[2], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[30], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[31], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[32], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[33], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[34], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[35], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[36], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[37], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[38], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[39], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[3], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[40], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[41], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[42], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[43], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[44], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[45], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[46], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[47], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[48], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[49], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[4], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[50], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[51], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[52], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[53], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[54], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[55], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[56], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[57], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[58], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[59], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[5], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[60], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[61], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[62], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[63], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[64], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[65], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[66], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[67], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[68], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[69], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[6], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[70], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[71], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[72], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[73], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[74], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[75], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[76], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[77], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[78], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[79], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[7], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[80], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[81], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[82], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[83], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[84], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[85], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[86], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[87], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[88], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[89], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[8], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[90], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[91], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[92], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[93], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[94], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[95], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[96], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[97], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[98], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[99], +mem,CGM_VOQ_DRAM_BOUND_PRMS.CGM3[9], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[0], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[100], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[101], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[102], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[103], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[104], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[105], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[106], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[107], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[108], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[109], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[10], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[110], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[111], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[112], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[113], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[114], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[115], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[116], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[117], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[118], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[119], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[11], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[120], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[121], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[122], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[123], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[124], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[125], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[126], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[127], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[12], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[13], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[14], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[15], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[16], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[17], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[18], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[19], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[1], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[20], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[21], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[22], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[23], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[24], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[25], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[26], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[27], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[28], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[29], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[2], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[30], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[31], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[32], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[33], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[34], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[35], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[36], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[37], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[38], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[39], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[3], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[40], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[41], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[42], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[43], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[44], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[45], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[46], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[47], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[48], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[49], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[4], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[50], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[51], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[52], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[53], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[54], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[55], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[56], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[57], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[58], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[59], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[5], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[60], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[61], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[62], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[63], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[64], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[65], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[66], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[67], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[68], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[69], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[6], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[70], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[71], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[72], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[73], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[74], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[75], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[76], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[77], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[78], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[79], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[7], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[80], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[81], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[82], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[83], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[84], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[85], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[86], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[87], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[88], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[89], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[8], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[90], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[91], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[92], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[93], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[94], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[95], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[96], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[97], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[98], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[99], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM0[9], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[0], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[100], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[101], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[102], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[103], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[104], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[105], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[106], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[107], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[108], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[109], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[10], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[110], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[111], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[112], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[113], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[114], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[115], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[116], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[117], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[118], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[119], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[11], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[120], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[121], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[122], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[123], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[124], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[125], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[126], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[127], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[12], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[13], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[14], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[15], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[16], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[17], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[18], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[19], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[1], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[20], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[21], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[22], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[23], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[24], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[25], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[26], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[27], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[28], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[29], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[2], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[30], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[31], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[32], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[33], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[34], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[35], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[36], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[37], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[38], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[39], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[3], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[40], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[41], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[42], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[43], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[44], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[45], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[46], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[47], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[48], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[49], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[4], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[50], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[51], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[52], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[53], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[54], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[55], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[56], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[57], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[58], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[59], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[5], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[60], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[61], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[62], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[63], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[64], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[65], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[66], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[67], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[68], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[69], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[6], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[70], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[71], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[72], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[73], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[74], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[75], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[76], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[77], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[78], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[79], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[7], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[80], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[81], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[82], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[83], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[84], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[85], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[86], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[87], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[88], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[89], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[8], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[90], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[91], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[92], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[93], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[94], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[95], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[96], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[97], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[98], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[99], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM1[9], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[0], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[100], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[101], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[102], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[103], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[104], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[105], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[106], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[107], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[108], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[109], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[10], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[110], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[111], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[112], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[113], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[114], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[115], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[116], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[117], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[118], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[119], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[11], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[120], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[121], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[122], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[123], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[124], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[125], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[126], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[127], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[12], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[13], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[14], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[15], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[16], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[17], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[18], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[19], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[1], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[20], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[21], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[22], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[23], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[24], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[25], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[26], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[27], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[28], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[29], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[2], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[30], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[31], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[32], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[33], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[34], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[35], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[36], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[37], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[38], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[39], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[3], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[40], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[41], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[42], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[43], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[44], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[45], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[46], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[47], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[48], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[49], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[4], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[50], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[51], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[52], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[53], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[54], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[55], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[56], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[57], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[58], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[59], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[5], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[60], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[61], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[62], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[63], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[64], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[65], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[66], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[67], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[68], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[69], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[6], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[70], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[71], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[72], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[73], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[74], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[75], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[76], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[77], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[78], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[79], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[7], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[80], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[81], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[82], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[83], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[84], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[85], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[86], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[87], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[88], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[89], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[8], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[90], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[91], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[92], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[93], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[94], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[95], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[96], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[97], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[98], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[99], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM2[9], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[0], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[100], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[101], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[102], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[103], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[104], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[105], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[106], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[107], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[108], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[109], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[10], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[110], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[111], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[112], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[113], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[114], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[115], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[116], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[117], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[118], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[119], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[11], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[120], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[121], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[122], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[123], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[124], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[125], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[126], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[127], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[12], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[13], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[14], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[15], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[16], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[17], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[18], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[19], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[1], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[20], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[21], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[22], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[23], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[24], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[25], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[26], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[27], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[28], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[29], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[2], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[30], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[31], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[32], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[33], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[34], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[35], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[36], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[37], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[38], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[39], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[3], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[40], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[41], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[42], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[43], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[44], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[45], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[46], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[47], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[48], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[49], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[4], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[50], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[51], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[52], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[53], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[54], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[55], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[56], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[57], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[58], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[59], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[5], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[60], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[61], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[62], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[63], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[64], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[65], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[66], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[67], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[68], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[69], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[6], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[70], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[71], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[72], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[73], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[74], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[75], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[76], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[77], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[78], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[79], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[7], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[80], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[81], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[82], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[83], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[84], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[85], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[86], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[87], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[88], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[89], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[8], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[90], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[91], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[92], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[93], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[94], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[95], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[96], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[97], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[98], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[99], +mem,CGM_VOQ_DRAM_RECOVERY_PRMS.CGM3[9], +mem,CGM_VSQE_RJCT_PRMS.CGM0[0], +mem,CGM_VSQE_RJCT_PRMS.CGM0[100], +mem,CGM_VSQE_RJCT_PRMS.CGM0[101], +mem,CGM_VSQE_RJCT_PRMS.CGM0[102], +mem,CGM_VSQE_RJCT_PRMS.CGM0[103], +mem,CGM_VSQE_RJCT_PRMS.CGM0[104], +mem,CGM_VSQE_RJCT_PRMS.CGM0[105], +mem,CGM_VSQE_RJCT_PRMS.CGM0[106], +mem,CGM_VSQE_RJCT_PRMS.CGM0[107], +mem,CGM_VSQE_RJCT_PRMS.CGM0[108], +mem,CGM_VSQE_RJCT_PRMS.CGM0[109], +mem,CGM_VSQE_RJCT_PRMS.CGM0[10], +mem,CGM_VSQE_RJCT_PRMS.CGM0[110], +mem,CGM_VSQE_RJCT_PRMS.CGM0[111], +mem,CGM_VSQE_RJCT_PRMS.CGM0[112], +mem,CGM_VSQE_RJCT_PRMS.CGM0[113], +mem,CGM_VSQE_RJCT_PRMS.CGM0[114], +mem,CGM_VSQE_RJCT_PRMS.CGM0[115], +mem,CGM_VSQE_RJCT_PRMS.CGM0[116], +mem,CGM_VSQE_RJCT_PRMS.CGM0[117], +mem,CGM_VSQE_RJCT_PRMS.CGM0[118], +mem,CGM_VSQE_RJCT_PRMS.CGM0[119], +mem,CGM_VSQE_RJCT_PRMS.CGM0[11], +mem,CGM_VSQE_RJCT_PRMS.CGM0[120], +mem,CGM_VSQE_RJCT_PRMS.CGM0[121], +mem,CGM_VSQE_RJCT_PRMS.CGM0[122], +mem,CGM_VSQE_RJCT_PRMS.CGM0[123], +mem,CGM_VSQE_RJCT_PRMS.CGM0[124], +mem,CGM_VSQE_RJCT_PRMS.CGM0[125], +mem,CGM_VSQE_RJCT_PRMS.CGM0[126], +mem,CGM_VSQE_RJCT_PRMS.CGM0[127], +mem,CGM_VSQE_RJCT_PRMS.CGM0[12], +mem,CGM_VSQE_RJCT_PRMS.CGM0[13], +mem,CGM_VSQE_RJCT_PRMS.CGM0[14], +mem,CGM_VSQE_RJCT_PRMS.CGM0[15], +mem,CGM_VSQE_RJCT_PRMS.CGM0[16], +mem,CGM_VSQE_RJCT_PRMS.CGM0[17], +mem,CGM_VSQE_RJCT_PRMS.CGM0[18], +mem,CGM_VSQE_RJCT_PRMS.CGM0[19], +mem,CGM_VSQE_RJCT_PRMS.CGM0[1], +mem,CGM_VSQE_RJCT_PRMS.CGM0[20], +mem,CGM_VSQE_RJCT_PRMS.CGM0[21], +mem,CGM_VSQE_RJCT_PRMS.CGM0[22], +mem,CGM_VSQE_RJCT_PRMS.CGM0[23], +mem,CGM_VSQE_RJCT_PRMS.CGM0[24], +mem,CGM_VSQE_RJCT_PRMS.CGM0[25], +mem,CGM_VSQE_RJCT_PRMS.CGM0[26], +mem,CGM_VSQE_RJCT_PRMS.CGM0[27], +mem,CGM_VSQE_RJCT_PRMS.CGM0[28], +mem,CGM_VSQE_RJCT_PRMS.CGM0[29], +mem,CGM_VSQE_RJCT_PRMS.CGM0[2], +mem,CGM_VSQE_RJCT_PRMS.CGM0[30], +mem,CGM_VSQE_RJCT_PRMS.CGM0[31], +mem,CGM_VSQE_RJCT_PRMS.CGM0[32], +mem,CGM_VSQE_RJCT_PRMS.CGM0[33], +mem,CGM_VSQE_RJCT_PRMS.CGM0[34], +mem,CGM_VSQE_RJCT_PRMS.CGM0[35], +mem,CGM_VSQE_RJCT_PRMS.CGM0[36], +mem,CGM_VSQE_RJCT_PRMS.CGM0[37], +mem,CGM_VSQE_RJCT_PRMS.CGM0[38], +mem,CGM_VSQE_RJCT_PRMS.CGM0[39], +mem,CGM_VSQE_RJCT_PRMS.CGM0[3], +mem,CGM_VSQE_RJCT_PRMS.CGM0[40], +mem,CGM_VSQE_RJCT_PRMS.CGM0[41], +mem,CGM_VSQE_RJCT_PRMS.CGM0[42], +mem,CGM_VSQE_RJCT_PRMS.CGM0[43], +mem,CGM_VSQE_RJCT_PRMS.CGM0[44], +mem,CGM_VSQE_RJCT_PRMS.CGM0[45], +mem,CGM_VSQE_RJCT_PRMS.CGM0[46], +mem,CGM_VSQE_RJCT_PRMS.CGM0[47], +mem,CGM_VSQE_RJCT_PRMS.CGM0[48], +mem,CGM_VSQE_RJCT_PRMS.CGM0[49], +mem,CGM_VSQE_RJCT_PRMS.CGM0[4], +mem,CGM_VSQE_RJCT_PRMS.CGM0[50], +mem,CGM_VSQE_RJCT_PRMS.CGM0[51], +mem,CGM_VSQE_RJCT_PRMS.CGM0[52], +mem,CGM_VSQE_RJCT_PRMS.CGM0[53], +mem,CGM_VSQE_RJCT_PRMS.CGM0[54], +mem,CGM_VSQE_RJCT_PRMS.CGM0[55], +mem,CGM_VSQE_RJCT_PRMS.CGM0[56], +mem,CGM_VSQE_RJCT_PRMS.CGM0[57], +mem,CGM_VSQE_RJCT_PRMS.CGM0[58], +mem,CGM_VSQE_RJCT_PRMS.CGM0[59], +mem,CGM_VSQE_RJCT_PRMS.CGM0[5], +mem,CGM_VSQE_RJCT_PRMS.CGM0[60], +mem,CGM_VSQE_RJCT_PRMS.CGM0[61], +mem,CGM_VSQE_RJCT_PRMS.CGM0[62], +mem,CGM_VSQE_RJCT_PRMS.CGM0[63], +mem,CGM_VSQE_RJCT_PRMS.CGM0[64], +mem,CGM_VSQE_RJCT_PRMS.CGM0[65], +mem,CGM_VSQE_RJCT_PRMS.CGM0[66], +mem,CGM_VSQE_RJCT_PRMS.CGM0[67], +mem,CGM_VSQE_RJCT_PRMS.CGM0[68], +mem,CGM_VSQE_RJCT_PRMS.CGM0[69], +mem,CGM_VSQE_RJCT_PRMS.CGM0[6], +mem,CGM_VSQE_RJCT_PRMS.CGM0[70], +mem,CGM_VSQE_RJCT_PRMS.CGM0[71], +mem,CGM_VSQE_RJCT_PRMS.CGM0[72], +mem,CGM_VSQE_RJCT_PRMS.CGM0[73], +mem,CGM_VSQE_RJCT_PRMS.CGM0[74], +mem,CGM_VSQE_RJCT_PRMS.CGM0[75], +mem,CGM_VSQE_RJCT_PRMS.CGM0[76], +mem,CGM_VSQE_RJCT_PRMS.CGM0[77], +mem,CGM_VSQE_RJCT_PRMS.CGM0[78], +mem,CGM_VSQE_RJCT_PRMS.CGM0[79], +mem,CGM_VSQE_RJCT_PRMS.CGM0[7], +mem,CGM_VSQE_RJCT_PRMS.CGM0[80], +mem,CGM_VSQE_RJCT_PRMS.CGM0[81], +mem,CGM_VSQE_RJCT_PRMS.CGM0[82], +mem,CGM_VSQE_RJCT_PRMS.CGM0[83], +mem,CGM_VSQE_RJCT_PRMS.CGM0[84], +mem,CGM_VSQE_RJCT_PRMS.CGM0[85], +mem,CGM_VSQE_RJCT_PRMS.CGM0[86], +mem,CGM_VSQE_RJCT_PRMS.CGM0[87], +mem,CGM_VSQE_RJCT_PRMS.CGM0[88], +mem,CGM_VSQE_RJCT_PRMS.CGM0[89], +mem,CGM_VSQE_RJCT_PRMS.CGM0[8], +mem,CGM_VSQE_RJCT_PRMS.CGM0[90], +mem,CGM_VSQE_RJCT_PRMS.CGM0[91], +mem,CGM_VSQE_RJCT_PRMS.CGM0[92], +mem,CGM_VSQE_RJCT_PRMS.CGM0[93], +mem,CGM_VSQE_RJCT_PRMS.CGM0[94], +mem,CGM_VSQE_RJCT_PRMS.CGM0[95], +mem,CGM_VSQE_RJCT_PRMS.CGM0[96], +mem,CGM_VSQE_RJCT_PRMS.CGM0[97], +mem,CGM_VSQE_RJCT_PRMS.CGM0[98], +mem,CGM_VSQE_RJCT_PRMS.CGM0[99], +mem,CGM_VSQE_RJCT_PRMS.CGM0[9], +mem,CGM_VSQE_RJCT_PRMS.CGM1[0], +mem,CGM_VSQE_RJCT_PRMS.CGM1[100], +mem,CGM_VSQE_RJCT_PRMS.CGM1[101], +mem,CGM_VSQE_RJCT_PRMS.CGM1[102], +mem,CGM_VSQE_RJCT_PRMS.CGM1[103], +mem,CGM_VSQE_RJCT_PRMS.CGM1[104], +mem,CGM_VSQE_RJCT_PRMS.CGM1[105], +mem,CGM_VSQE_RJCT_PRMS.CGM1[106], +mem,CGM_VSQE_RJCT_PRMS.CGM1[107], +mem,CGM_VSQE_RJCT_PRMS.CGM1[108], +mem,CGM_VSQE_RJCT_PRMS.CGM1[109], +mem,CGM_VSQE_RJCT_PRMS.CGM1[10], +mem,CGM_VSQE_RJCT_PRMS.CGM1[110], +mem,CGM_VSQE_RJCT_PRMS.CGM1[111], +mem,CGM_VSQE_RJCT_PRMS.CGM1[112], +mem,CGM_VSQE_RJCT_PRMS.CGM1[113], +mem,CGM_VSQE_RJCT_PRMS.CGM1[114], +mem,CGM_VSQE_RJCT_PRMS.CGM1[115], +mem,CGM_VSQE_RJCT_PRMS.CGM1[116], +mem,CGM_VSQE_RJCT_PRMS.CGM1[117], +mem,CGM_VSQE_RJCT_PRMS.CGM1[118], +mem,CGM_VSQE_RJCT_PRMS.CGM1[119], +mem,CGM_VSQE_RJCT_PRMS.CGM1[11], +mem,CGM_VSQE_RJCT_PRMS.CGM1[120], +mem,CGM_VSQE_RJCT_PRMS.CGM1[121], +mem,CGM_VSQE_RJCT_PRMS.CGM1[122], +mem,CGM_VSQE_RJCT_PRMS.CGM1[123], +mem,CGM_VSQE_RJCT_PRMS.CGM1[124], +mem,CGM_VSQE_RJCT_PRMS.CGM1[125], +mem,CGM_VSQE_RJCT_PRMS.CGM1[126], +mem,CGM_VSQE_RJCT_PRMS.CGM1[127], +mem,CGM_VSQE_RJCT_PRMS.CGM1[12], +mem,CGM_VSQE_RJCT_PRMS.CGM1[13], +mem,CGM_VSQE_RJCT_PRMS.CGM1[14], +mem,CGM_VSQE_RJCT_PRMS.CGM1[15], +mem,CGM_VSQE_RJCT_PRMS.CGM1[16], +mem,CGM_VSQE_RJCT_PRMS.CGM1[17], +mem,CGM_VSQE_RJCT_PRMS.CGM1[18], +mem,CGM_VSQE_RJCT_PRMS.CGM1[19], +mem,CGM_VSQE_RJCT_PRMS.CGM1[1], +mem,CGM_VSQE_RJCT_PRMS.CGM1[20], +mem,CGM_VSQE_RJCT_PRMS.CGM1[21], +mem,CGM_VSQE_RJCT_PRMS.CGM1[22], +mem,CGM_VSQE_RJCT_PRMS.CGM1[23], +mem,CGM_VSQE_RJCT_PRMS.CGM1[24], +mem,CGM_VSQE_RJCT_PRMS.CGM1[25], +mem,CGM_VSQE_RJCT_PRMS.CGM1[26], +mem,CGM_VSQE_RJCT_PRMS.CGM1[27], +mem,CGM_VSQE_RJCT_PRMS.CGM1[28], +mem,CGM_VSQE_RJCT_PRMS.CGM1[29], +mem,CGM_VSQE_RJCT_PRMS.CGM1[2], +mem,CGM_VSQE_RJCT_PRMS.CGM1[30], +mem,CGM_VSQE_RJCT_PRMS.CGM1[31], +mem,CGM_VSQE_RJCT_PRMS.CGM1[32], +mem,CGM_VSQE_RJCT_PRMS.CGM1[33], +mem,CGM_VSQE_RJCT_PRMS.CGM1[34], +mem,CGM_VSQE_RJCT_PRMS.CGM1[35], +mem,CGM_VSQE_RJCT_PRMS.CGM1[36], +mem,CGM_VSQE_RJCT_PRMS.CGM1[37], +mem,CGM_VSQE_RJCT_PRMS.CGM1[38], +mem,CGM_VSQE_RJCT_PRMS.CGM1[39], +mem,CGM_VSQE_RJCT_PRMS.CGM1[3], +mem,CGM_VSQE_RJCT_PRMS.CGM1[40], +mem,CGM_VSQE_RJCT_PRMS.CGM1[41], +mem,CGM_VSQE_RJCT_PRMS.CGM1[42], +mem,CGM_VSQE_RJCT_PRMS.CGM1[43], +mem,CGM_VSQE_RJCT_PRMS.CGM1[44], +mem,CGM_VSQE_RJCT_PRMS.CGM1[45], +mem,CGM_VSQE_RJCT_PRMS.CGM1[46], +mem,CGM_VSQE_RJCT_PRMS.CGM1[47], +mem,CGM_VSQE_RJCT_PRMS.CGM1[48], +mem,CGM_VSQE_RJCT_PRMS.CGM1[49], +mem,CGM_VSQE_RJCT_PRMS.CGM1[4], +mem,CGM_VSQE_RJCT_PRMS.CGM1[50], +mem,CGM_VSQE_RJCT_PRMS.CGM1[51], +mem,CGM_VSQE_RJCT_PRMS.CGM1[52], +mem,CGM_VSQE_RJCT_PRMS.CGM1[53], +mem,CGM_VSQE_RJCT_PRMS.CGM1[54], +mem,CGM_VSQE_RJCT_PRMS.CGM1[55], +mem,CGM_VSQE_RJCT_PRMS.CGM1[56], +mem,CGM_VSQE_RJCT_PRMS.CGM1[57], +mem,CGM_VSQE_RJCT_PRMS.CGM1[58], +mem,CGM_VSQE_RJCT_PRMS.CGM1[59], +mem,CGM_VSQE_RJCT_PRMS.CGM1[5], +mem,CGM_VSQE_RJCT_PRMS.CGM1[60], +mem,CGM_VSQE_RJCT_PRMS.CGM1[61], +mem,CGM_VSQE_RJCT_PRMS.CGM1[62], +mem,CGM_VSQE_RJCT_PRMS.CGM1[63], +mem,CGM_VSQE_RJCT_PRMS.CGM1[64], +mem,CGM_VSQE_RJCT_PRMS.CGM1[65], +mem,CGM_VSQE_RJCT_PRMS.CGM1[66], +mem,CGM_VSQE_RJCT_PRMS.CGM1[67], +mem,CGM_VSQE_RJCT_PRMS.CGM1[68], +mem,CGM_VSQE_RJCT_PRMS.CGM1[69], +mem,CGM_VSQE_RJCT_PRMS.CGM1[6], +mem,CGM_VSQE_RJCT_PRMS.CGM1[70], +mem,CGM_VSQE_RJCT_PRMS.CGM1[71], +mem,CGM_VSQE_RJCT_PRMS.CGM1[72], +mem,CGM_VSQE_RJCT_PRMS.CGM1[73], +mem,CGM_VSQE_RJCT_PRMS.CGM1[74], +mem,CGM_VSQE_RJCT_PRMS.CGM1[75], +mem,CGM_VSQE_RJCT_PRMS.CGM1[76], +mem,CGM_VSQE_RJCT_PRMS.CGM1[77], +mem,CGM_VSQE_RJCT_PRMS.CGM1[78], +mem,CGM_VSQE_RJCT_PRMS.CGM1[79], +mem,CGM_VSQE_RJCT_PRMS.CGM1[7], +mem,CGM_VSQE_RJCT_PRMS.CGM1[80], +mem,CGM_VSQE_RJCT_PRMS.CGM1[81], +mem,CGM_VSQE_RJCT_PRMS.CGM1[82], +mem,CGM_VSQE_RJCT_PRMS.CGM1[83], +mem,CGM_VSQE_RJCT_PRMS.CGM1[84], +mem,CGM_VSQE_RJCT_PRMS.CGM1[85], +mem,CGM_VSQE_RJCT_PRMS.CGM1[86], +mem,CGM_VSQE_RJCT_PRMS.CGM1[87], +mem,CGM_VSQE_RJCT_PRMS.CGM1[88], +mem,CGM_VSQE_RJCT_PRMS.CGM1[89], +mem,CGM_VSQE_RJCT_PRMS.CGM1[8], +mem,CGM_VSQE_RJCT_PRMS.CGM1[90], +mem,CGM_VSQE_RJCT_PRMS.CGM1[91], +mem,CGM_VSQE_RJCT_PRMS.CGM1[92], +mem,CGM_VSQE_RJCT_PRMS.CGM1[93], +mem,CGM_VSQE_RJCT_PRMS.CGM1[94], +mem,CGM_VSQE_RJCT_PRMS.CGM1[95], +mem,CGM_VSQE_RJCT_PRMS.CGM1[96], +mem,CGM_VSQE_RJCT_PRMS.CGM1[97], +mem,CGM_VSQE_RJCT_PRMS.CGM1[98], +mem,CGM_VSQE_RJCT_PRMS.CGM1[99], +mem,CGM_VSQE_RJCT_PRMS.CGM1[9], +mem,CGM_VSQE_RJCT_PRMS.CGM2[0], +mem,CGM_VSQE_RJCT_PRMS.CGM2[100], +mem,CGM_VSQE_RJCT_PRMS.CGM2[101], +mem,CGM_VSQE_RJCT_PRMS.CGM2[102], +mem,CGM_VSQE_RJCT_PRMS.CGM2[103], +mem,CGM_VSQE_RJCT_PRMS.CGM2[104], +mem,CGM_VSQE_RJCT_PRMS.CGM2[105], +mem,CGM_VSQE_RJCT_PRMS.CGM2[106], +mem,CGM_VSQE_RJCT_PRMS.CGM2[107], +mem,CGM_VSQE_RJCT_PRMS.CGM2[108], +mem,CGM_VSQE_RJCT_PRMS.CGM2[109], +mem,CGM_VSQE_RJCT_PRMS.CGM2[10], +mem,CGM_VSQE_RJCT_PRMS.CGM2[110], +mem,CGM_VSQE_RJCT_PRMS.CGM2[111], +mem,CGM_VSQE_RJCT_PRMS.CGM2[112], +mem,CGM_VSQE_RJCT_PRMS.CGM2[113], +mem,CGM_VSQE_RJCT_PRMS.CGM2[114], +mem,CGM_VSQE_RJCT_PRMS.CGM2[115], +mem,CGM_VSQE_RJCT_PRMS.CGM2[116], +mem,CGM_VSQE_RJCT_PRMS.CGM2[117], +mem,CGM_VSQE_RJCT_PRMS.CGM2[118], +mem,CGM_VSQE_RJCT_PRMS.CGM2[119], +mem,CGM_VSQE_RJCT_PRMS.CGM2[11], +mem,CGM_VSQE_RJCT_PRMS.CGM2[120], +mem,CGM_VSQE_RJCT_PRMS.CGM2[121], +mem,CGM_VSQE_RJCT_PRMS.CGM2[122], +mem,CGM_VSQE_RJCT_PRMS.CGM2[123], +mem,CGM_VSQE_RJCT_PRMS.CGM2[124], +mem,CGM_VSQE_RJCT_PRMS.CGM2[125], +mem,CGM_VSQE_RJCT_PRMS.CGM2[126], +mem,CGM_VSQE_RJCT_PRMS.CGM2[127], +mem,CGM_VSQE_RJCT_PRMS.CGM2[12], +mem,CGM_VSQE_RJCT_PRMS.CGM2[13], +mem,CGM_VSQE_RJCT_PRMS.CGM2[14], +mem,CGM_VSQE_RJCT_PRMS.CGM2[15], +mem,CGM_VSQE_RJCT_PRMS.CGM2[16], +mem,CGM_VSQE_RJCT_PRMS.CGM2[17], +mem,CGM_VSQE_RJCT_PRMS.CGM2[18], +mem,CGM_VSQE_RJCT_PRMS.CGM2[19], +mem,CGM_VSQE_RJCT_PRMS.CGM2[1], +mem,CGM_VSQE_RJCT_PRMS.CGM2[20], +mem,CGM_VSQE_RJCT_PRMS.CGM2[21], +mem,CGM_VSQE_RJCT_PRMS.CGM2[22], +mem,CGM_VSQE_RJCT_PRMS.CGM2[23], +mem,CGM_VSQE_RJCT_PRMS.CGM2[24], +mem,CGM_VSQE_RJCT_PRMS.CGM2[25], +mem,CGM_VSQE_RJCT_PRMS.CGM2[26], +mem,CGM_VSQE_RJCT_PRMS.CGM2[27], +mem,CGM_VSQE_RJCT_PRMS.CGM2[28], +mem,CGM_VSQE_RJCT_PRMS.CGM2[29], +mem,CGM_VSQE_RJCT_PRMS.CGM2[2], +mem,CGM_VSQE_RJCT_PRMS.CGM2[30], +mem,CGM_VSQE_RJCT_PRMS.CGM2[31], +mem,CGM_VSQE_RJCT_PRMS.CGM2[32], +mem,CGM_VSQE_RJCT_PRMS.CGM2[33], +mem,CGM_VSQE_RJCT_PRMS.CGM2[34], +mem,CGM_VSQE_RJCT_PRMS.CGM2[35], +mem,CGM_VSQE_RJCT_PRMS.CGM2[36], +mem,CGM_VSQE_RJCT_PRMS.CGM2[37], +mem,CGM_VSQE_RJCT_PRMS.CGM2[38], +mem,CGM_VSQE_RJCT_PRMS.CGM2[39], +mem,CGM_VSQE_RJCT_PRMS.CGM2[3], +mem,CGM_VSQE_RJCT_PRMS.CGM2[40], +mem,CGM_VSQE_RJCT_PRMS.CGM2[41], +mem,CGM_VSQE_RJCT_PRMS.CGM2[42], +mem,CGM_VSQE_RJCT_PRMS.CGM2[43], +mem,CGM_VSQE_RJCT_PRMS.CGM2[44], +mem,CGM_VSQE_RJCT_PRMS.CGM2[45], +mem,CGM_VSQE_RJCT_PRMS.CGM2[46], +mem,CGM_VSQE_RJCT_PRMS.CGM2[47], +mem,CGM_VSQE_RJCT_PRMS.CGM2[48], +mem,CGM_VSQE_RJCT_PRMS.CGM2[49], +mem,CGM_VSQE_RJCT_PRMS.CGM2[4], +mem,CGM_VSQE_RJCT_PRMS.CGM2[50], +mem,CGM_VSQE_RJCT_PRMS.CGM2[51], +mem,CGM_VSQE_RJCT_PRMS.CGM2[52], +mem,CGM_VSQE_RJCT_PRMS.CGM2[53], +mem,CGM_VSQE_RJCT_PRMS.CGM2[54], +mem,CGM_VSQE_RJCT_PRMS.CGM2[55], +mem,CGM_VSQE_RJCT_PRMS.CGM2[56], +mem,CGM_VSQE_RJCT_PRMS.CGM2[57], +mem,CGM_VSQE_RJCT_PRMS.CGM2[58], +mem,CGM_VSQE_RJCT_PRMS.CGM2[59], +mem,CGM_VSQE_RJCT_PRMS.CGM2[5], +mem,CGM_VSQE_RJCT_PRMS.CGM2[60], +mem,CGM_VSQE_RJCT_PRMS.CGM2[61], +mem,CGM_VSQE_RJCT_PRMS.CGM2[62], +mem,CGM_VSQE_RJCT_PRMS.CGM2[63], +mem,CGM_VSQE_RJCT_PRMS.CGM2[64], +mem,CGM_VSQE_RJCT_PRMS.CGM2[65], +mem,CGM_VSQE_RJCT_PRMS.CGM2[66], +mem,CGM_VSQE_RJCT_PRMS.CGM2[67], +mem,CGM_VSQE_RJCT_PRMS.CGM2[68], +mem,CGM_VSQE_RJCT_PRMS.CGM2[69], +mem,CGM_VSQE_RJCT_PRMS.CGM2[6], +mem,CGM_VSQE_RJCT_PRMS.CGM2[70], +mem,CGM_VSQE_RJCT_PRMS.CGM2[71], +mem,CGM_VSQE_RJCT_PRMS.CGM2[72], +mem,CGM_VSQE_RJCT_PRMS.CGM2[73], +mem,CGM_VSQE_RJCT_PRMS.CGM2[74], +mem,CGM_VSQE_RJCT_PRMS.CGM2[75], +mem,CGM_VSQE_RJCT_PRMS.CGM2[76], +mem,CGM_VSQE_RJCT_PRMS.CGM2[77], +mem,CGM_VSQE_RJCT_PRMS.CGM2[78], +mem,CGM_VSQE_RJCT_PRMS.CGM2[79], +mem,CGM_VSQE_RJCT_PRMS.CGM2[7], +mem,CGM_VSQE_RJCT_PRMS.CGM2[80], +mem,CGM_VSQE_RJCT_PRMS.CGM2[81], +mem,CGM_VSQE_RJCT_PRMS.CGM2[82], +mem,CGM_VSQE_RJCT_PRMS.CGM2[83], +mem,CGM_VSQE_RJCT_PRMS.CGM2[84], +mem,CGM_VSQE_RJCT_PRMS.CGM2[85], +mem,CGM_VSQE_RJCT_PRMS.CGM2[86], +mem,CGM_VSQE_RJCT_PRMS.CGM2[87], +mem,CGM_VSQE_RJCT_PRMS.CGM2[88], +mem,CGM_VSQE_RJCT_PRMS.CGM2[89], +mem,CGM_VSQE_RJCT_PRMS.CGM2[8], +mem,CGM_VSQE_RJCT_PRMS.CGM2[90], +mem,CGM_VSQE_RJCT_PRMS.CGM2[91], +mem,CGM_VSQE_RJCT_PRMS.CGM2[92], +mem,CGM_VSQE_RJCT_PRMS.CGM2[93], +mem,CGM_VSQE_RJCT_PRMS.CGM2[94], +mem,CGM_VSQE_RJCT_PRMS.CGM2[95], +mem,CGM_VSQE_RJCT_PRMS.CGM2[96], +mem,CGM_VSQE_RJCT_PRMS.CGM2[97], +mem,CGM_VSQE_RJCT_PRMS.CGM2[98], +mem,CGM_VSQE_RJCT_PRMS.CGM2[99], +mem,CGM_VSQE_RJCT_PRMS.CGM2[9], +mem,CGM_VSQE_RJCT_PRMS.CGM3[0], +mem,CGM_VSQE_RJCT_PRMS.CGM3[100], +mem,CGM_VSQE_RJCT_PRMS.CGM3[101], +mem,CGM_VSQE_RJCT_PRMS.CGM3[102], +mem,CGM_VSQE_RJCT_PRMS.CGM3[103], +mem,CGM_VSQE_RJCT_PRMS.CGM3[104], +mem,CGM_VSQE_RJCT_PRMS.CGM3[105], +mem,CGM_VSQE_RJCT_PRMS.CGM3[106], +mem,CGM_VSQE_RJCT_PRMS.CGM3[107], +mem,CGM_VSQE_RJCT_PRMS.CGM3[108], +mem,CGM_VSQE_RJCT_PRMS.CGM3[109], +mem,CGM_VSQE_RJCT_PRMS.CGM3[10], +mem,CGM_VSQE_RJCT_PRMS.CGM3[110], +mem,CGM_VSQE_RJCT_PRMS.CGM3[111], +mem,CGM_VSQE_RJCT_PRMS.CGM3[112], +mem,CGM_VSQE_RJCT_PRMS.CGM3[113], +mem,CGM_VSQE_RJCT_PRMS.CGM3[114], +mem,CGM_VSQE_RJCT_PRMS.CGM3[115], +mem,CGM_VSQE_RJCT_PRMS.CGM3[116], +mem,CGM_VSQE_RJCT_PRMS.CGM3[117], +mem,CGM_VSQE_RJCT_PRMS.CGM3[118], +mem,CGM_VSQE_RJCT_PRMS.CGM3[119], +mem,CGM_VSQE_RJCT_PRMS.CGM3[11], +mem,CGM_VSQE_RJCT_PRMS.CGM3[120], +mem,CGM_VSQE_RJCT_PRMS.CGM3[121], +mem,CGM_VSQE_RJCT_PRMS.CGM3[122], +mem,CGM_VSQE_RJCT_PRMS.CGM3[123], +mem,CGM_VSQE_RJCT_PRMS.CGM3[124], +mem,CGM_VSQE_RJCT_PRMS.CGM3[125], +mem,CGM_VSQE_RJCT_PRMS.CGM3[126], +mem,CGM_VSQE_RJCT_PRMS.CGM3[127], +mem,CGM_VSQE_RJCT_PRMS.CGM3[12], +mem,CGM_VSQE_RJCT_PRMS.CGM3[13], +mem,CGM_VSQE_RJCT_PRMS.CGM3[14], +mem,CGM_VSQE_RJCT_PRMS.CGM3[15], +mem,CGM_VSQE_RJCT_PRMS.CGM3[16], +mem,CGM_VSQE_RJCT_PRMS.CGM3[17], +mem,CGM_VSQE_RJCT_PRMS.CGM3[18], +mem,CGM_VSQE_RJCT_PRMS.CGM3[19], +mem,CGM_VSQE_RJCT_PRMS.CGM3[1], +mem,CGM_VSQE_RJCT_PRMS.CGM3[20], +mem,CGM_VSQE_RJCT_PRMS.CGM3[21], +mem,CGM_VSQE_RJCT_PRMS.CGM3[22], +mem,CGM_VSQE_RJCT_PRMS.CGM3[23], +mem,CGM_VSQE_RJCT_PRMS.CGM3[24], +mem,CGM_VSQE_RJCT_PRMS.CGM3[25], +mem,CGM_VSQE_RJCT_PRMS.CGM3[26], +mem,CGM_VSQE_RJCT_PRMS.CGM3[27], +mem,CGM_VSQE_RJCT_PRMS.CGM3[28], +mem,CGM_VSQE_RJCT_PRMS.CGM3[29], +mem,CGM_VSQE_RJCT_PRMS.CGM3[2], +mem,CGM_VSQE_RJCT_PRMS.CGM3[30], +mem,CGM_VSQE_RJCT_PRMS.CGM3[31], +mem,CGM_VSQE_RJCT_PRMS.CGM3[32], +mem,CGM_VSQE_RJCT_PRMS.CGM3[33], +mem,CGM_VSQE_RJCT_PRMS.CGM3[34], +mem,CGM_VSQE_RJCT_PRMS.CGM3[35], +mem,CGM_VSQE_RJCT_PRMS.CGM3[36], +mem,CGM_VSQE_RJCT_PRMS.CGM3[37], +mem,CGM_VSQE_RJCT_PRMS.CGM3[38], +mem,CGM_VSQE_RJCT_PRMS.CGM3[39], +mem,CGM_VSQE_RJCT_PRMS.CGM3[3], +mem,CGM_VSQE_RJCT_PRMS.CGM3[40], +mem,CGM_VSQE_RJCT_PRMS.CGM3[41], +mem,CGM_VSQE_RJCT_PRMS.CGM3[42], +mem,CGM_VSQE_RJCT_PRMS.CGM3[43], +mem,CGM_VSQE_RJCT_PRMS.CGM3[44], +mem,CGM_VSQE_RJCT_PRMS.CGM3[45], +mem,CGM_VSQE_RJCT_PRMS.CGM3[46], +mem,CGM_VSQE_RJCT_PRMS.CGM3[47], +mem,CGM_VSQE_RJCT_PRMS.CGM3[48], +mem,CGM_VSQE_RJCT_PRMS.CGM3[49], +mem,CGM_VSQE_RJCT_PRMS.CGM3[4], +mem,CGM_VSQE_RJCT_PRMS.CGM3[50], +mem,CGM_VSQE_RJCT_PRMS.CGM3[51], +mem,CGM_VSQE_RJCT_PRMS.CGM3[52], +mem,CGM_VSQE_RJCT_PRMS.CGM3[53], +mem,CGM_VSQE_RJCT_PRMS.CGM3[54], +mem,CGM_VSQE_RJCT_PRMS.CGM3[55], +mem,CGM_VSQE_RJCT_PRMS.CGM3[56], +mem,CGM_VSQE_RJCT_PRMS.CGM3[57], +mem,CGM_VSQE_RJCT_PRMS.CGM3[58], +mem,CGM_VSQE_RJCT_PRMS.CGM3[59], +mem,CGM_VSQE_RJCT_PRMS.CGM3[5], +mem,CGM_VSQE_RJCT_PRMS.CGM3[60], +mem,CGM_VSQE_RJCT_PRMS.CGM3[61], +mem,CGM_VSQE_RJCT_PRMS.CGM3[62], +mem,CGM_VSQE_RJCT_PRMS.CGM3[63], +mem,CGM_VSQE_RJCT_PRMS.CGM3[64], +mem,CGM_VSQE_RJCT_PRMS.CGM3[65], +mem,CGM_VSQE_RJCT_PRMS.CGM3[66], +mem,CGM_VSQE_RJCT_PRMS.CGM3[67], +mem,CGM_VSQE_RJCT_PRMS.CGM3[68], +mem,CGM_VSQE_RJCT_PRMS.CGM3[69], +mem,CGM_VSQE_RJCT_PRMS.CGM3[6], +mem,CGM_VSQE_RJCT_PRMS.CGM3[70], +mem,CGM_VSQE_RJCT_PRMS.CGM3[71], +mem,CGM_VSQE_RJCT_PRMS.CGM3[72], +mem,CGM_VSQE_RJCT_PRMS.CGM3[73], +mem,CGM_VSQE_RJCT_PRMS.CGM3[74], +mem,CGM_VSQE_RJCT_PRMS.CGM3[75], +mem,CGM_VSQE_RJCT_PRMS.CGM3[76], +mem,CGM_VSQE_RJCT_PRMS.CGM3[77], +mem,CGM_VSQE_RJCT_PRMS.CGM3[78], +mem,CGM_VSQE_RJCT_PRMS.CGM3[79], +mem,CGM_VSQE_RJCT_PRMS.CGM3[7], +mem,CGM_VSQE_RJCT_PRMS.CGM3[80], +mem,CGM_VSQE_RJCT_PRMS.CGM3[81], +mem,CGM_VSQE_RJCT_PRMS.CGM3[82], +mem,CGM_VSQE_RJCT_PRMS.CGM3[83], +mem,CGM_VSQE_RJCT_PRMS.CGM3[84], +mem,CGM_VSQE_RJCT_PRMS.CGM3[85], +mem,CGM_VSQE_RJCT_PRMS.CGM3[86], +mem,CGM_VSQE_RJCT_PRMS.CGM3[87], +mem,CGM_VSQE_RJCT_PRMS.CGM3[88], +mem,CGM_VSQE_RJCT_PRMS.CGM3[89], +mem,CGM_VSQE_RJCT_PRMS.CGM3[8], +mem,CGM_VSQE_RJCT_PRMS.CGM3[90], +mem,CGM_VSQE_RJCT_PRMS.CGM3[91], +mem,CGM_VSQE_RJCT_PRMS.CGM3[92], +mem,CGM_VSQE_RJCT_PRMS.CGM3[93], +mem,CGM_VSQE_RJCT_PRMS.CGM3[94], +mem,CGM_VSQE_RJCT_PRMS.CGM3[95], +mem,CGM_VSQE_RJCT_PRMS.CGM3[96], +mem,CGM_VSQE_RJCT_PRMS.CGM3[97], +mem,CGM_VSQE_RJCT_PRMS.CGM3[98], +mem,CGM_VSQE_RJCT_PRMS.CGM3[99], +mem,CGM_VSQE_RJCT_PRMS.CGM3[9], +mem,CGM_VSQF_FC_PRMS.CGM0[0], +mem,CGM_VSQF_FC_PRMS.CGM0[10], +mem,CGM_VSQF_FC_PRMS.CGM0[11], +mem,CGM_VSQF_FC_PRMS.CGM0[12], +mem,CGM_VSQF_FC_PRMS.CGM0[13], +mem,CGM_VSQF_FC_PRMS.CGM0[14], +mem,CGM_VSQF_FC_PRMS.CGM0[15], +mem,CGM_VSQF_FC_PRMS.CGM0[1], +mem,CGM_VSQF_FC_PRMS.CGM0[2], +mem,CGM_VSQF_FC_PRMS.CGM0[3], +mem,CGM_VSQF_FC_PRMS.CGM0[4], +mem,CGM_VSQF_FC_PRMS.CGM0[5], +mem,CGM_VSQF_FC_PRMS.CGM0[6], +mem,CGM_VSQF_FC_PRMS.CGM0[7], +mem,CGM_VSQF_FC_PRMS.CGM0[8], +mem,CGM_VSQF_FC_PRMS.CGM0[9], +mem,CGM_VSQF_FC_PRMS.CGM1[0], +mem,CGM_VSQF_FC_PRMS.CGM1[10], +mem,CGM_VSQF_FC_PRMS.CGM1[11], +mem,CGM_VSQF_FC_PRMS.CGM1[12], +mem,CGM_VSQF_FC_PRMS.CGM1[13], +mem,CGM_VSQF_FC_PRMS.CGM1[14], +mem,CGM_VSQF_FC_PRMS.CGM1[15], +mem,CGM_VSQF_FC_PRMS.CGM1[1], +mem,CGM_VSQF_FC_PRMS.CGM1[2], +mem,CGM_VSQF_FC_PRMS.CGM1[3], +mem,CGM_VSQF_FC_PRMS.CGM1[4], +mem,CGM_VSQF_FC_PRMS.CGM1[5], +mem,CGM_VSQF_FC_PRMS.CGM1[6], +mem,CGM_VSQF_FC_PRMS.CGM1[7], +mem,CGM_VSQF_FC_PRMS.CGM1[8], +mem,CGM_VSQF_FC_PRMS.CGM1[9], +mem,CGM_VSQF_FC_PRMS.CGM2[0], +mem,CGM_VSQF_FC_PRMS.CGM2[10], +mem,CGM_VSQF_FC_PRMS.CGM2[11], +mem,CGM_VSQF_FC_PRMS.CGM2[12], +mem,CGM_VSQF_FC_PRMS.CGM2[13], +mem,CGM_VSQF_FC_PRMS.CGM2[14], +mem,CGM_VSQF_FC_PRMS.CGM2[15], +mem,CGM_VSQF_FC_PRMS.CGM2[1], +mem,CGM_VSQF_FC_PRMS.CGM2[2], +mem,CGM_VSQF_FC_PRMS.CGM2[3], +mem,CGM_VSQF_FC_PRMS.CGM2[4], +mem,CGM_VSQF_FC_PRMS.CGM2[5], +mem,CGM_VSQF_FC_PRMS.CGM2[6], +mem,CGM_VSQF_FC_PRMS.CGM2[7], +mem,CGM_VSQF_FC_PRMS.CGM2[8], +mem,CGM_VSQF_FC_PRMS.CGM2[9], +mem,CGM_VSQF_FC_PRMS.CGM3[0], +mem,CGM_VSQF_FC_PRMS.CGM3[10], +mem,CGM_VSQF_FC_PRMS.CGM3[11], +mem,CGM_VSQF_FC_PRMS.CGM3[12], +mem,CGM_VSQF_FC_PRMS.CGM3[13], +mem,CGM_VSQF_FC_PRMS.CGM3[14], +mem,CGM_VSQF_FC_PRMS.CGM3[15], +mem,CGM_VSQF_FC_PRMS.CGM3[1], +mem,CGM_VSQF_FC_PRMS.CGM3[2], +mem,CGM_VSQF_FC_PRMS.CGM3[3], +mem,CGM_VSQF_FC_PRMS.CGM3[4], +mem,CGM_VSQF_FC_PRMS.CGM3[5], +mem,CGM_VSQF_FC_PRMS.CGM3[6], +mem,CGM_VSQF_FC_PRMS.CGM3[7], +mem,CGM_VSQF_FC_PRMS.CGM3[8], +mem,CGM_VSQF_FC_PRMS.CGM3[9], +mem,CGM_VSQF_RJCT_PRMS.CGM0[0], +mem,CGM_VSQF_RJCT_PRMS.CGM0[10], +mem,CGM_VSQF_RJCT_PRMS.CGM0[11], +mem,CGM_VSQF_RJCT_PRMS.CGM0[12], +mem,CGM_VSQF_RJCT_PRMS.CGM0[13], +mem,CGM_VSQF_RJCT_PRMS.CGM0[14], +mem,CGM_VSQF_RJCT_PRMS.CGM0[15], +mem,CGM_VSQF_RJCT_PRMS.CGM0[16], +mem,CGM_VSQF_RJCT_PRMS.CGM0[17], +mem,CGM_VSQF_RJCT_PRMS.CGM0[18], +mem,CGM_VSQF_RJCT_PRMS.CGM0[19], +mem,CGM_VSQF_RJCT_PRMS.CGM0[1], +mem,CGM_VSQF_RJCT_PRMS.CGM0[20], +mem,CGM_VSQF_RJCT_PRMS.CGM0[21], +mem,CGM_VSQF_RJCT_PRMS.CGM0[22], +mem,CGM_VSQF_RJCT_PRMS.CGM0[23], +mem,CGM_VSQF_RJCT_PRMS.CGM0[24], +mem,CGM_VSQF_RJCT_PRMS.CGM0[25], +mem,CGM_VSQF_RJCT_PRMS.CGM0[26], +mem,CGM_VSQF_RJCT_PRMS.CGM0[27], +mem,CGM_VSQF_RJCT_PRMS.CGM0[28], +mem,CGM_VSQF_RJCT_PRMS.CGM0[29], +mem,CGM_VSQF_RJCT_PRMS.CGM0[2], +mem,CGM_VSQF_RJCT_PRMS.CGM0[30], +mem,CGM_VSQF_RJCT_PRMS.CGM0[31], +mem,CGM_VSQF_RJCT_PRMS.CGM0[32], +mem,CGM_VSQF_RJCT_PRMS.CGM0[33], +mem,CGM_VSQF_RJCT_PRMS.CGM0[34], +mem,CGM_VSQF_RJCT_PRMS.CGM0[35], +mem,CGM_VSQF_RJCT_PRMS.CGM0[36], +mem,CGM_VSQF_RJCT_PRMS.CGM0[37], +mem,CGM_VSQF_RJCT_PRMS.CGM0[38], +mem,CGM_VSQF_RJCT_PRMS.CGM0[39], +mem,CGM_VSQF_RJCT_PRMS.CGM0[3], +mem,CGM_VSQF_RJCT_PRMS.CGM0[40], +mem,CGM_VSQF_RJCT_PRMS.CGM0[41], +mem,CGM_VSQF_RJCT_PRMS.CGM0[42], +mem,CGM_VSQF_RJCT_PRMS.CGM0[43], +mem,CGM_VSQF_RJCT_PRMS.CGM0[44], +mem,CGM_VSQF_RJCT_PRMS.CGM0[45], +mem,CGM_VSQF_RJCT_PRMS.CGM0[46], +mem,CGM_VSQF_RJCT_PRMS.CGM0[47], +mem,CGM_VSQF_RJCT_PRMS.CGM0[48], +mem,CGM_VSQF_RJCT_PRMS.CGM0[49], +mem,CGM_VSQF_RJCT_PRMS.CGM0[4], +mem,CGM_VSQF_RJCT_PRMS.CGM0[50], +mem,CGM_VSQF_RJCT_PRMS.CGM0[51], +mem,CGM_VSQF_RJCT_PRMS.CGM0[52], +mem,CGM_VSQF_RJCT_PRMS.CGM0[53], +mem,CGM_VSQF_RJCT_PRMS.CGM0[54], +mem,CGM_VSQF_RJCT_PRMS.CGM0[55], +mem,CGM_VSQF_RJCT_PRMS.CGM0[56], +mem,CGM_VSQF_RJCT_PRMS.CGM0[57], +mem,CGM_VSQF_RJCT_PRMS.CGM0[58], +mem,CGM_VSQF_RJCT_PRMS.CGM0[59], +mem,CGM_VSQF_RJCT_PRMS.CGM0[5], +mem,CGM_VSQF_RJCT_PRMS.CGM0[60], +mem,CGM_VSQF_RJCT_PRMS.CGM0[61], +mem,CGM_VSQF_RJCT_PRMS.CGM0[62], +mem,CGM_VSQF_RJCT_PRMS.CGM0[63], +mem,CGM_VSQF_RJCT_PRMS.CGM0[6], +mem,CGM_VSQF_RJCT_PRMS.CGM0[7], +mem,CGM_VSQF_RJCT_PRMS.CGM0[8], +mem,CGM_VSQF_RJCT_PRMS.CGM0[9], +mem,CGM_VSQF_RJCT_PRMS.CGM1[0], +mem,CGM_VSQF_RJCT_PRMS.CGM1[10], +mem,CGM_VSQF_RJCT_PRMS.CGM1[11], +mem,CGM_VSQF_RJCT_PRMS.CGM1[12], +mem,CGM_VSQF_RJCT_PRMS.CGM1[13], +mem,CGM_VSQF_RJCT_PRMS.CGM1[14], +mem,CGM_VSQF_RJCT_PRMS.CGM1[15], +mem,CGM_VSQF_RJCT_PRMS.CGM1[16], +mem,CGM_VSQF_RJCT_PRMS.CGM1[17], +mem,CGM_VSQF_RJCT_PRMS.CGM1[18], +mem,CGM_VSQF_RJCT_PRMS.CGM1[19], +mem,CGM_VSQF_RJCT_PRMS.CGM1[1], +mem,CGM_VSQF_RJCT_PRMS.CGM1[20], +mem,CGM_VSQF_RJCT_PRMS.CGM1[21], +mem,CGM_VSQF_RJCT_PRMS.CGM1[22], +mem,CGM_VSQF_RJCT_PRMS.CGM1[23], +mem,CGM_VSQF_RJCT_PRMS.CGM1[24], +mem,CGM_VSQF_RJCT_PRMS.CGM1[25], +mem,CGM_VSQF_RJCT_PRMS.CGM1[26], +mem,CGM_VSQF_RJCT_PRMS.CGM1[27], +mem,CGM_VSQF_RJCT_PRMS.CGM1[28], +mem,CGM_VSQF_RJCT_PRMS.CGM1[29], +mem,CGM_VSQF_RJCT_PRMS.CGM1[2], +mem,CGM_VSQF_RJCT_PRMS.CGM1[30], +mem,CGM_VSQF_RJCT_PRMS.CGM1[31], +mem,CGM_VSQF_RJCT_PRMS.CGM1[32], +mem,CGM_VSQF_RJCT_PRMS.CGM1[33], +mem,CGM_VSQF_RJCT_PRMS.CGM1[34], +mem,CGM_VSQF_RJCT_PRMS.CGM1[35], +mem,CGM_VSQF_RJCT_PRMS.CGM1[36], +mem,CGM_VSQF_RJCT_PRMS.CGM1[37], +mem,CGM_VSQF_RJCT_PRMS.CGM1[38], +mem,CGM_VSQF_RJCT_PRMS.CGM1[39], +mem,CGM_VSQF_RJCT_PRMS.CGM1[3], +mem,CGM_VSQF_RJCT_PRMS.CGM1[40], +mem,CGM_VSQF_RJCT_PRMS.CGM1[41], +mem,CGM_VSQF_RJCT_PRMS.CGM1[42], +mem,CGM_VSQF_RJCT_PRMS.CGM1[43], +mem,CGM_VSQF_RJCT_PRMS.CGM1[44], +mem,CGM_VSQF_RJCT_PRMS.CGM1[45], +mem,CGM_VSQF_RJCT_PRMS.CGM1[46], +mem,CGM_VSQF_RJCT_PRMS.CGM1[47], +mem,CGM_VSQF_RJCT_PRMS.CGM1[48], +mem,CGM_VSQF_RJCT_PRMS.CGM1[49], +mem,CGM_VSQF_RJCT_PRMS.CGM1[4], +mem,CGM_VSQF_RJCT_PRMS.CGM1[50], +mem,CGM_VSQF_RJCT_PRMS.CGM1[51], +mem,CGM_VSQF_RJCT_PRMS.CGM1[52], +mem,CGM_VSQF_RJCT_PRMS.CGM1[53], +mem,CGM_VSQF_RJCT_PRMS.CGM1[54], +mem,CGM_VSQF_RJCT_PRMS.CGM1[55], +mem,CGM_VSQF_RJCT_PRMS.CGM1[56], +mem,CGM_VSQF_RJCT_PRMS.CGM1[57], +mem,CGM_VSQF_RJCT_PRMS.CGM1[58], +mem,CGM_VSQF_RJCT_PRMS.CGM1[59], +mem,CGM_VSQF_RJCT_PRMS.CGM1[5], +mem,CGM_VSQF_RJCT_PRMS.CGM1[60], +mem,CGM_VSQF_RJCT_PRMS.CGM1[61], +mem,CGM_VSQF_RJCT_PRMS.CGM1[62], +mem,CGM_VSQF_RJCT_PRMS.CGM1[63], +mem,CGM_VSQF_RJCT_PRMS.CGM1[6], +mem,CGM_VSQF_RJCT_PRMS.CGM1[7], +mem,CGM_VSQF_RJCT_PRMS.CGM1[8], +mem,CGM_VSQF_RJCT_PRMS.CGM1[9], +mem,CGM_VSQF_RJCT_PRMS.CGM2[0], +mem,CGM_VSQF_RJCT_PRMS.CGM2[10], +mem,CGM_VSQF_RJCT_PRMS.CGM2[11], +mem,CGM_VSQF_RJCT_PRMS.CGM2[12], +mem,CGM_VSQF_RJCT_PRMS.CGM2[13], +mem,CGM_VSQF_RJCT_PRMS.CGM2[14], +mem,CGM_VSQF_RJCT_PRMS.CGM2[15], +mem,CGM_VSQF_RJCT_PRMS.CGM2[16], +mem,CGM_VSQF_RJCT_PRMS.CGM2[17], +mem,CGM_VSQF_RJCT_PRMS.CGM2[18], +mem,CGM_VSQF_RJCT_PRMS.CGM2[19], +mem,CGM_VSQF_RJCT_PRMS.CGM2[1], +mem,CGM_VSQF_RJCT_PRMS.CGM2[20], +mem,CGM_VSQF_RJCT_PRMS.CGM2[21], +mem,CGM_VSQF_RJCT_PRMS.CGM2[22], +mem,CGM_VSQF_RJCT_PRMS.CGM2[23], +mem,CGM_VSQF_RJCT_PRMS.CGM2[24], +mem,CGM_VSQF_RJCT_PRMS.CGM2[25], +mem,CGM_VSQF_RJCT_PRMS.CGM2[26], +mem,CGM_VSQF_RJCT_PRMS.CGM2[27], +mem,CGM_VSQF_RJCT_PRMS.CGM2[28], +mem,CGM_VSQF_RJCT_PRMS.CGM2[29], +mem,CGM_VSQF_RJCT_PRMS.CGM2[2], +mem,CGM_VSQF_RJCT_PRMS.CGM2[30], +mem,CGM_VSQF_RJCT_PRMS.CGM2[31], +mem,CGM_VSQF_RJCT_PRMS.CGM2[32], +mem,CGM_VSQF_RJCT_PRMS.CGM2[33], +mem,CGM_VSQF_RJCT_PRMS.CGM2[34], +mem,CGM_VSQF_RJCT_PRMS.CGM2[35], +mem,CGM_VSQF_RJCT_PRMS.CGM2[36], +mem,CGM_VSQF_RJCT_PRMS.CGM2[37], +mem,CGM_VSQF_RJCT_PRMS.CGM2[38], +mem,CGM_VSQF_RJCT_PRMS.CGM2[39], +mem,CGM_VSQF_RJCT_PRMS.CGM2[3], +mem,CGM_VSQF_RJCT_PRMS.CGM2[40], +mem,CGM_VSQF_RJCT_PRMS.CGM2[41], +mem,CGM_VSQF_RJCT_PRMS.CGM2[42], +mem,CGM_VSQF_RJCT_PRMS.CGM2[43], +mem,CGM_VSQF_RJCT_PRMS.CGM2[44], +mem,CGM_VSQF_RJCT_PRMS.CGM2[45], +mem,CGM_VSQF_RJCT_PRMS.CGM2[46], +mem,CGM_VSQF_RJCT_PRMS.CGM2[47], +mem,CGM_VSQF_RJCT_PRMS.CGM2[48], +mem,CGM_VSQF_RJCT_PRMS.CGM2[49], +mem,CGM_VSQF_RJCT_PRMS.CGM2[4], +mem,CGM_VSQF_RJCT_PRMS.CGM2[50], +mem,CGM_VSQF_RJCT_PRMS.CGM2[51], +mem,CGM_VSQF_RJCT_PRMS.CGM2[52], +mem,CGM_VSQF_RJCT_PRMS.CGM2[53], +mem,CGM_VSQF_RJCT_PRMS.CGM2[54], +mem,CGM_VSQF_RJCT_PRMS.CGM2[55], +mem,CGM_VSQF_RJCT_PRMS.CGM2[56], +mem,CGM_VSQF_RJCT_PRMS.CGM2[57], +mem,CGM_VSQF_RJCT_PRMS.CGM2[58], +mem,CGM_VSQF_RJCT_PRMS.CGM2[59], +mem,CGM_VSQF_RJCT_PRMS.CGM2[5], +mem,CGM_VSQF_RJCT_PRMS.CGM2[60], +mem,CGM_VSQF_RJCT_PRMS.CGM2[61], +mem,CGM_VSQF_RJCT_PRMS.CGM2[62], +mem,CGM_VSQF_RJCT_PRMS.CGM2[63], +mem,CGM_VSQF_RJCT_PRMS.CGM2[6], +mem,CGM_VSQF_RJCT_PRMS.CGM2[7], +mem,CGM_VSQF_RJCT_PRMS.CGM2[8], +mem,CGM_VSQF_RJCT_PRMS.CGM2[9], +mem,CGM_VSQF_RJCT_PRMS.CGM3[0], +mem,CGM_VSQF_RJCT_PRMS.CGM3[10], +mem,CGM_VSQF_RJCT_PRMS.CGM3[11], +mem,CGM_VSQF_RJCT_PRMS.CGM3[12], +mem,CGM_VSQF_RJCT_PRMS.CGM3[13], +mem,CGM_VSQF_RJCT_PRMS.CGM3[14], +mem,CGM_VSQF_RJCT_PRMS.CGM3[15], +mem,CGM_VSQF_RJCT_PRMS.CGM3[16], +mem,CGM_VSQF_RJCT_PRMS.CGM3[17], +mem,CGM_VSQF_RJCT_PRMS.CGM3[18], +mem,CGM_VSQF_RJCT_PRMS.CGM3[19], +mem,CGM_VSQF_RJCT_PRMS.CGM3[1], +mem,CGM_VSQF_RJCT_PRMS.CGM3[20], +mem,CGM_VSQF_RJCT_PRMS.CGM3[21], +mem,CGM_VSQF_RJCT_PRMS.CGM3[22], +mem,CGM_VSQF_RJCT_PRMS.CGM3[23], +mem,CGM_VSQF_RJCT_PRMS.CGM3[24], +mem,CGM_VSQF_RJCT_PRMS.CGM3[25], +mem,CGM_VSQF_RJCT_PRMS.CGM3[26], +mem,CGM_VSQF_RJCT_PRMS.CGM3[27], +mem,CGM_VSQF_RJCT_PRMS.CGM3[28], +mem,CGM_VSQF_RJCT_PRMS.CGM3[29], +mem,CGM_VSQF_RJCT_PRMS.CGM3[2], +mem,CGM_VSQF_RJCT_PRMS.CGM3[30], +mem,CGM_VSQF_RJCT_PRMS.CGM3[31], +mem,CGM_VSQF_RJCT_PRMS.CGM3[32], +mem,CGM_VSQF_RJCT_PRMS.CGM3[33], +mem,CGM_VSQF_RJCT_PRMS.CGM3[34], +mem,CGM_VSQF_RJCT_PRMS.CGM3[35], +mem,CGM_VSQF_RJCT_PRMS.CGM3[36], +mem,CGM_VSQF_RJCT_PRMS.CGM3[37], +mem,CGM_VSQF_RJCT_PRMS.CGM3[38], +mem,CGM_VSQF_RJCT_PRMS.CGM3[39], +mem,CGM_VSQF_RJCT_PRMS.CGM3[3], +mem,CGM_VSQF_RJCT_PRMS.CGM3[40], +mem,CGM_VSQF_RJCT_PRMS.CGM3[41], +mem,CGM_VSQF_RJCT_PRMS.CGM3[42], +mem,CGM_VSQF_RJCT_PRMS.CGM3[43], +mem,CGM_VSQF_RJCT_PRMS.CGM3[44], +mem,CGM_VSQF_RJCT_PRMS.CGM3[45], +mem,CGM_VSQF_RJCT_PRMS.CGM3[46], +mem,CGM_VSQF_RJCT_PRMS.CGM3[47], +mem,CGM_VSQF_RJCT_PRMS.CGM3[48], +mem,CGM_VSQF_RJCT_PRMS.CGM3[49], +mem,CGM_VSQF_RJCT_PRMS.CGM3[4], +mem,CGM_VSQF_RJCT_PRMS.CGM3[50], +mem,CGM_VSQF_RJCT_PRMS.CGM3[51], +mem,CGM_VSQF_RJCT_PRMS.CGM3[52], +mem,CGM_VSQF_RJCT_PRMS.CGM3[53], +mem,CGM_VSQF_RJCT_PRMS.CGM3[54], +mem,CGM_VSQF_RJCT_PRMS.CGM3[55], +mem,CGM_VSQF_RJCT_PRMS.CGM3[56], +mem,CGM_VSQF_RJCT_PRMS.CGM3[57], +mem,CGM_VSQF_RJCT_PRMS.CGM3[58], +mem,CGM_VSQF_RJCT_PRMS.CGM3[59], +mem,CGM_VSQF_RJCT_PRMS.CGM3[5], +mem,CGM_VSQF_RJCT_PRMS.CGM3[60], +mem,CGM_VSQF_RJCT_PRMS.CGM3[61], +mem,CGM_VSQF_RJCT_PRMS.CGM3[62], +mem,CGM_VSQF_RJCT_PRMS.CGM3[63], +mem,CGM_VSQF_RJCT_PRMS.CGM3[6], +mem,CGM_VSQF_RJCT_PRMS.CGM3[7], +mem,CGM_VSQF_RJCT_PRMS.CGM3[8], +mem,CGM_VSQF_RJCT_PRMS.CGM3[9], +mem,IPS_CRBAL_TH.IPS0[0], +mem,IPS_CRBAL_TH.IPS0[100], +mem,IPS_CRBAL_TH.IPS0[101], +mem,IPS_CRBAL_TH.IPS0[102], +mem,IPS_CRBAL_TH.IPS0[103], +mem,IPS_CRBAL_TH.IPS0[104], +mem,IPS_CRBAL_TH.IPS0[105], +mem,IPS_CRBAL_TH.IPS0[106], +mem,IPS_CRBAL_TH.IPS0[107], +mem,IPS_CRBAL_TH.IPS0[108], +mem,IPS_CRBAL_TH.IPS0[109], +mem,IPS_CRBAL_TH.IPS0[10], +mem,IPS_CRBAL_TH.IPS0[110], +mem,IPS_CRBAL_TH.IPS0[111], +mem,IPS_CRBAL_TH.IPS0[112], +mem,IPS_CRBAL_TH.IPS0[113], +mem,IPS_CRBAL_TH.IPS0[114], +mem,IPS_CRBAL_TH.IPS0[115], +mem,IPS_CRBAL_TH.IPS0[116], +mem,IPS_CRBAL_TH.IPS0[117], +mem,IPS_CRBAL_TH.IPS0[118], +mem,IPS_CRBAL_TH.IPS0[119], +mem,IPS_CRBAL_TH.IPS0[11], +mem,IPS_CRBAL_TH.IPS0[120], +mem,IPS_CRBAL_TH.IPS0[121], +mem,IPS_CRBAL_TH.IPS0[122], +mem,IPS_CRBAL_TH.IPS0[123], +mem,IPS_CRBAL_TH.IPS0[124], +mem,IPS_CRBAL_TH.IPS0[125], +mem,IPS_CRBAL_TH.IPS0[126], +mem,IPS_CRBAL_TH.IPS0[127], +mem,IPS_CRBAL_TH.IPS0[12], +mem,IPS_CRBAL_TH.IPS0[13], +mem,IPS_CRBAL_TH.IPS0[14], +mem,IPS_CRBAL_TH.IPS0[15], +mem,IPS_CRBAL_TH.IPS0[16], +mem,IPS_CRBAL_TH.IPS0[17], +mem,IPS_CRBAL_TH.IPS0[18], +mem,IPS_CRBAL_TH.IPS0[19], +mem,IPS_CRBAL_TH.IPS0[1], +mem,IPS_CRBAL_TH.IPS0[20], +mem,IPS_CRBAL_TH.IPS0[21], +mem,IPS_CRBAL_TH.IPS0[22], +mem,IPS_CRBAL_TH.IPS0[23], +mem,IPS_CRBAL_TH.IPS0[24], +mem,IPS_CRBAL_TH.IPS0[25], +mem,IPS_CRBAL_TH.IPS0[26], +mem,IPS_CRBAL_TH.IPS0[27], +mem,IPS_CRBAL_TH.IPS0[28], +mem,IPS_CRBAL_TH.IPS0[29], +mem,IPS_CRBAL_TH.IPS0[2], +mem,IPS_CRBAL_TH.IPS0[30], +mem,IPS_CRBAL_TH.IPS0[31], +mem,IPS_CRBAL_TH.IPS0[32], +mem,IPS_CRBAL_TH.IPS0[33], +mem,IPS_CRBAL_TH.IPS0[34], +mem,IPS_CRBAL_TH.IPS0[35], +mem,IPS_CRBAL_TH.IPS0[36], +mem,IPS_CRBAL_TH.IPS0[37], +mem,IPS_CRBAL_TH.IPS0[38], +mem,IPS_CRBAL_TH.IPS0[39], +mem,IPS_CRBAL_TH.IPS0[3], +mem,IPS_CRBAL_TH.IPS0[40], +mem,IPS_CRBAL_TH.IPS0[41], +mem,IPS_CRBAL_TH.IPS0[42], +mem,IPS_CRBAL_TH.IPS0[43], +mem,IPS_CRBAL_TH.IPS0[44], +mem,IPS_CRBAL_TH.IPS0[45], +mem,IPS_CRBAL_TH.IPS0[46], +mem,IPS_CRBAL_TH.IPS0[47], +mem,IPS_CRBAL_TH.IPS0[48], +mem,IPS_CRBAL_TH.IPS0[49], +mem,IPS_CRBAL_TH.IPS0[4], +mem,IPS_CRBAL_TH.IPS0[50], +mem,IPS_CRBAL_TH.IPS0[51], +mem,IPS_CRBAL_TH.IPS0[52], +mem,IPS_CRBAL_TH.IPS0[53], +mem,IPS_CRBAL_TH.IPS0[54], +mem,IPS_CRBAL_TH.IPS0[55], +mem,IPS_CRBAL_TH.IPS0[56], +mem,IPS_CRBAL_TH.IPS0[57], +mem,IPS_CRBAL_TH.IPS0[58], +mem,IPS_CRBAL_TH.IPS0[59], +mem,IPS_CRBAL_TH.IPS0[5], +mem,IPS_CRBAL_TH.IPS0[60], +mem,IPS_CRBAL_TH.IPS0[61], +mem,IPS_CRBAL_TH.IPS0[62], +mem,IPS_CRBAL_TH.IPS0[63], +mem,IPS_CRBAL_TH.IPS0[64], +mem,IPS_CRBAL_TH.IPS0[65], +mem,IPS_CRBAL_TH.IPS0[66], +mem,IPS_CRBAL_TH.IPS0[67], +mem,IPS_CRBAL_TH.IPS0[68], +mem,IPS_CRBAL_TH.IPS0[69], +mem,IPS_CRBAL_TH.IPS0[6], +mem,IPS_CRBAL_TH.IPS0[70], +mem,IPS_CRBAL_TH.IPS0[71], +mem,IPS_CRBAL_TH.IPS0[72], +mem,IPS_CRBAL_TH.IPS0[73], +mem,IPS_CRBAL_TH.IPS0[74], +mem,IPS_CRBAL_TH.IPS0[75], +mem,IPS_CRBAL_TH.IPS0[76], +mem,IPS_CRBAL_TH.IPS0[77], +mem,IPS_CRBAL_TH.IPS0[78], +mem,IPS_CRBAL_TH.IPS0[79], +mem,IPS_CRBAL_TH.IPS0[7], +mem,IPS_CRBAL_TH.IPS0[80], +mem,IPS_CRBAL_TH.IPS0[81], +mem,IPS_CRBAL_TH.IPS0[82], +mem,IPS_CRBAL_TH.IPS0[83], +mem,IPS_CRBAL_TH.IPS0[84], +mem,IPS_CRBAL_TH.IPS0[85], +mem,IPS_CRBAL_TH.IPS0[86], +mem,IPS_CRBAL_TH.IPS0[87], +mem,IPS_CRBAL_TH.IPS0[88], +mem,IPS_CRBAL_TH.IPS0[89], +mem,IPS_CRBAL_TH.IPS0[8], +mem,IPS_CRBAL_TH.IPS0[90], +mem,IPS_CRBAL_TH.IPS0[91], +mem,IPS_CRBAL_TH.IPS0[92], +mem,IPS_CRBAL_TH.IPS0[93], +mem,IPS_CRBAL_TH.IPS0[94], +mem,IPS_CRBAL_TH.IPS0[95], +mem,IPS_CRBAL_TH.IPS0[96], +mem,IPS_CRBAL_TH.IPS0[97], +mem,IPS_CRBAL_TH.IPS0[98], +mem,IPS_CRBAL_TH.IPS0[99], +mem,IPS_CRBAL_TH.IPS0[9], +mem,IPS_CRBAL_TH.IPS1[0], +mem,IPS_CRBAL_TH.IPS1[100], +mem,IPS_CRBAL_TH.IPS1[101], +mem,IPS_CRBAL_TH.IPS1[102], +mem,IPS_CRBAL_TH.IPS1[103], +mem,IPS_CRBAL_TH.IPS1[104], +mem,IPS_CRBAL_TH.IPS1[105], +mem,IPS_CRBAL_TH.IPS1[106], +mem,IPS_CRBAL_TH.IPS1[107], +mem,IPS_CRBAL_TH.IPS1[108], +mem,IPS_CRBAL_TH.IPS1[109], +mem,IPS_CRBAL_TH.IPS1[10], +mem,IPS_CRBAL_TH.IPS1[110], +mem,IPS_CRBAL_TH.IPS1[111], +mem,IPS_CRBAL_TH.IPS1[112], +mem,IPS_CRBAL_TH.IPS1[113], +mem,IPS_CRBAL_TH.IPS1[114], +mem,IPS_CRBAL_TH.IPS1[115], +mem,IPS_CRBAL_TH.IPS1[116], +mem,IPS_CRBAL_TH.IPS1[117], +mem,IPS_CRBAL_TH.IPS1[118], +mem,IPS_CRBAL_TH.IPS1[119], +mem,IPS_CRBAL_TH.IPS1[11], +mem,IPS_CRBAL_TH.IPS1[120], +mem,IPS_CRBAL_TH.IPS1[121], +mem,IPS_CRBAL_TH.IPS1[122], +mem,IPS_CRBAL_TH.IPS1[123], +mem,IPS_CRBAL_TH.IPS1[124], +mem,IPS_CRBAL_TH.IPS1[125], +mem,IPS_CRBAL_TH.IPS1[126], +mem,IPS_CRBAL_TH.IPS1[127], +mem,IPS_CRBAL_TH.IPS1[12], +mem,IPS_CRBAL_TH.IPS1[13], +mem,IPS_CRBAL_TH.IPS1[14], +mem,IPS_CRBAL_TH.IPS1[15], +mem,IPS_CRBAL_TH.IPS1[16], +mem,IPS_CRBAL_TH.IPS1[17], +mem,IPS_CRBAL_TH.IPS1[18], +mem,IPS_CRBAL_TH.IPS1[19], +mem,IPS_CRBAL_TH.IPS1[1], +mem,IPS_CRBAL_TH.IPS1[20], +mem,IPS_CRBAL_TH.IPS1[21], +mem,IPS_CRBAL_TH.IPS1[22], +mem,IPS_CRBAL_TH.IPS1[23], +mem,IPS_CRBAL_TH.IPS1[24], +mem,IPS_CRBAL_TH.IPS1[25], +mem,IPS_CRBAL_TH.IPS1[26], +mem,IPS_CRBAL_TH.IPS1[27], +mem,IPS_CRBAL_TH.IPS1[28], +mem,IPS_CRBAL_TH.IPS1[29], +mem,IPS_CRBAL_TH.IPS1[2], +mem,IPS_CRBAL_TH.IPS1[30], +mem,IPS_CRBAL_TH.IPS1[31], +mem,IPS_CRBAL_TH.IPS1[32], +mem,IPS_CRBAL_TH.IPS1[33], +mem,IPS_CRBAL_TH.IPS1[34], +mem,IPS_CRBAL_TH.IPS1[35], +mem,IPS_CRBAL_TH.IPS1[36], +mem,IPS_CRBAL_TH.IPS1[37], +mem,IPS_CRBAL_TH.IPS1[38], +mem,IPS_CRBAL_TH.IPS1[39], +mem,IPS_CRBAL_TH.IPS1[3], +mem,IPS_CRBAL_TH.IPS1[40], +mem,IPS_CRBAL_TH.IPS1[41], +mem,IPS_CRBAL_TH.IPS1[42], +mem,IPS_CRBAL_TH.IPS1[43], +mem,IPS_CRBAL_TH.IPS1[44], +mem,IPS_CRBAL_TH.IPS1[45], +mem,IPS_CRBAL_TH.IPS1[46], +mem,IPS_CRBAL_TH.IPS1[47], +mem,IPS_CRBAL_TH.IPS1[48], +mem,IPS_CRBAL_TH.IPS1[49], +mem,IPS_CRBAL_TH.IPS1[4], +mem,IPS_CRBAL_TH.IPS1[50], +mem,IPS_CRBAL_TH.IPS1[51], +mem,IPS_CRBAL_TH.IPS1[52], +mem,IPS_CRBAL_TH.IPS1[53], +mem,IPS_CRBAL_TH.IPS1[54], +mem,IPS_CRBAL_TH.IPS1[55], +mem,IPS_CRBAL_TH.IPS1[56], +mem,IPS_CRBAL_TH.IPS1[57], +mem,IPS_CRBAL_TH.IPS1[58], +mem,IPS_CRBAL_TH.IPS1[59], +mem,IPS_CRBAL_TH.IPS1[5], +mem,IPS_CRBAL_TH.IPS1[60], +mem,IPS_CRBAL_TH.IPS1[61], +mem,IPS_CRBAL_TH.IPS1[62], +mem,IPS_CRBAL_TH.IPS1[63], +mem,IPS_CRBAL_TH.IPS1[64], +mem,IPS_CRBAL_TH.IPS1[65], +mem,IPS_CRBAL_TH.IPS1[66], +mem,IPS_CRBAL_TH.IPS1[67], +mem,IPS_CRBAL_TH.IPS1[68], +mem,IPS_CRBAL_TH.IPS1[69], +mem,IPS_CRBAL_TH.IPS1[6], +mem,IPS_CRBAL_TH.IPS1[70], +mem,IPS_CRBAL_TH.IPS1[71], +mem,IPS_CRBAL_TH.IPS1[72], +mem,IPS_CRBAL_TH.IPS1[73], +mem,IPS_CRBAL_TH.IPS1[74], +mem,IPS_CRBAL_TH.IPS1[75], +mem,IPS_CRBAL_TH.IPS1[76], +mem,IPS_CRBAL_TH.IPS1[77], +mem,IPS_CRBAL_TH.IPS1[78], +mem,IPS_CRBAL_TH.IPS1[79], +mem,IPS_CRBAL_TH.IPS1[7], +mem,IPS_CRBAL_TH.IPS1[80], +mem,IPS_CRBAL_TH.IPS1[81], +mem,IPS_CRBAL_TH.IPS1[82], +mem,IPS_CRBAL_TH.IPS1[83], +mem,IPS_CRBAL_TH.IPS1[84], +mem,IPS_CRBAL_TH.IPS1[85], +mem,IPS_CRBAL_TH.IPS1[86], +mem,IPS_CRBAL_TH.IPS1[87], +mem,IPS_CRBAL_TH.IPS1[88], +mem,IPS_CRBAL_TH.IPS1[89], +mem,IPS_CRBAL_TH.IPS1[8], +mem,IPS_CRBAL_TH.IPS1[90], +mem,IPS_CRBAL_TH.IPS1[91], +mem,IPS_CRBAL_TH.IPS1[92], +mem,IPS_CRBAL_TH.IPS1[93], +mem,IPS_CRBAL_TH.IPS1[94], +mem,IPS_CRBAL_TH.IPS1[95], +mem,IPS_CRBAL_TH.IPS1[96], +mem,IPS_CRBAL_TH.IPS1[97], +mem,IPS_CRBAL_TH.IPS1[98], +mem,IPS_CRBAL_TH.IPS1[99], +mem,IPS_CRBAL_TH.IPS1[9], +mem,IPS_CRBAL_TH.IPS2[0], +mem,IPS_CRBAL_TH.IPS2[100], +mem,IPS_CRBAL_TH.IPS2[101], +mem,IPS_CRBAL_TH.IPS2[102], +mem,IPS_CRBAL_TH.IPS2[103], +mem,IPS_CRBAL_TH.IPS2[104], +mem,IPS_CRBAL_TH.IPS2[105], +mem,IPS_CRBAL_TH.IPS2[106], +mem,IPS_CRBAL_TH.IPS2[107], +mem,IPS_CRBAL_TH.IPS2[108], +mem,IPS_CRBAL_TH.IPS2[109], +mem,IPS_CRBAL_TH.IPS2[10], +mem,IPS_CRBAL_TH.IPS2[110], +mem,IPS_CRBAL_TH.IPS2[111], +mem,IPS_CRBAL_TH.IPS2[112], +mem,IPS_CRBAL_TH.IPS2[113], +mem,IPS_CRBAL_TH.IPS2[114], +mem,IPS_CRBAL_TH.IPS2[115], +mem,IPS_CRBAL_TH.IPS2[116], +mem,IPS_CRBAL_TH.IPS2[117], +mem,IPS_CRBAL_TH.IPS2[118], +mem,IPS_CRBAL_TH.IPS2[119], +mem,IPS_CRBAL_TH.IPS2[11], +mem,IPS_CRBAL_TH.IPS2[120], +mem,IPS_CRBAL_TH.IPS2[121], +mem,IPS_CRBAL_TH.IPS2[122], +mem,IPS_CRBAL_TH.IPS2[123], +mem,IPS_CRBAL_TH.IPS2[124], +mem,IPS_CRBAL_TH.IPS2[125], +mem,IPS_CRBAL_TH.IPS2[126], +mem,IPS_CRBAL_TH.IPS2[127], +mem,IPS_CRBAL_TH.IPS2[12], +mem,IPS_CRBAL_TH.IPS2[13], +mem,IPS_CRBAL_TH.IPS2[14], +mem,IPS_CRBAL_TH.IPS2[15], +mem,IPS_CRBAL_TH.IPS2[16], +mem,IPS_CRBAL_TH.IPS2[17], +mem,IPS_CRBAL_TH.IPS2[18], +mem,IPS_CRBAL_TH.IPS2[19], +mem,IPS_CRBAL_TH.IPS2[1], +mem,IPS_CRBAL_TH.IPS2[20], +mem,IPS_CRBAL_TH.IPS2[21], +mem,IPS_CRBAL_TH.IPS2[22], +mem,IPS_CRBAL_TH.IPS2[23], +mem,IPS_CRBAL_TH.IPS2[24], +mem,IPS_CRBAL_TH.IPS2[25], +mem,IPS_CRBAL_TH.IPS2[26], +mem,IPS_CRBAL_TH.IPS2[27], +mem,IPS_CRBAL_TH.IPS2[28], +mem,IPS_CRBAL_TH.IPS2[29], +mem,IPS_CRBAL_TH.IPS2[2], +mem,IPS_CRBAL_TH.IPS2[30], +mem,IPS_CRBAL_TH.IPS2[31], +mem,IPS_CRBAL_TH.IPS2[32], +mem,IPS_CRBAL_TH.IPS2[33], +mem,IPS_CRBAL_TH.IPS2[34], +mem,IPS_CRBAL_TH.IPS2[35], +mem,IPS_CRBAL_TH.IPS2[36], +mem,IPS_CRBAL_TH.IPS2[37], +mem,IPS_CRBAL_TH.IPS2[38], +mem,IPS_CRBAL_TH.IPS2[39], +mem,IPS_CRBAL_TH.IPS2[3], +mem,IPS_CRBAL_TH.IPS2[40], +mem,IPS_CRBAL_TH.IPS2[41], +mem,IPS_CRBAL_TH.IPS2[42], +mem,IPS_CRBAL_TH.IPS2[43], +mem,IPS_CRBAL_TH.IPS2[44], +mem,IPS_CRBAL_TH.IPS2[45], +mem,IPS_CRBAL_TH.IPS2[46], +mem,IPS_CRBAL_TH.IPS2[47], +mem,IPS_CRBAL_TH.IPS2[48], +mem,IPS_CRBAL_TH.IPS2[49], +mem,IPS_CRBAL_TH.IPS2[4], +mem,IPS_CRBAL_TH.IPS2[50], +mem,IPS_CRBAL_TH.IPS2[51], +mem,IPS_CRBAL_TH.IPS2[52], +mem,IPS_CRBAL_TH.IPS2[53], +mem,IPS_CRBAL_TH.IPS2[54], +mem,IPS_CRBAL_TH.IPS2[55], +mem,IPS_CRBAL_TH.IPS2[56], +mem,IPS_CRBAL_TH.IPS2[57], +mem,IPS_CRBAL_TH.IPS2[58], +mem,IPS_CRBAL_TH.IPS2[59], +mem,IPS_CRBAL_TH.IPS2[5], +mem,IPS_CRBAL_TH.IPS2[60], +mem,IPS_CRBAL_TH.IPS2[61], +mem,IPS_CRBAL_TH.IPS2[62], +mem,IPS_CRBAL_TH.IPS2[63], +mem,IPS_CRBAL_TH.IPS2[64], +mem,IPS_CRBAL_TH.IPS2[65], +mem,IPS_CRBAL_TH.IPS2[66], +mem,IPS_CRBAL_TH.IPS2[67], +mem,IPS_CRBAL_TH.IPS2[68], +mem,IPS_CRBAL_TH.IPS2[69], +mem,IPS_CRBAL_TH.IPS2[6], +mem,IPS_CRBAL_TH.IPS2[70], +mem,IPS_CRBAL_TH.IPS2[71], +mem,IPS_CRBAL_TH.IPS2[72], +mem,IPS_CRBAL_TH.IPS2[73], +mem,IPS_CRBAL_TH.IPS2[74], +mem,IPS_CRBAL_TH.IPS2[75], +mem,IPS_CRBAL_TH.IPS2[76], +mem,IPS_CRBAL_TH.IPS2[77], +mem,IPS_CRBAL_TH.IPS2[78], +mem,IPS_CRBAL_TH.IPS2[79], +mem,IPS_CRBAL_TH.IPS2[7], +mem,IPS_CRBAL_TH.IPS2[80], +mem,IPS_CRBAL_TH.IPS2[81], +mem,IPS_CRBAL_TH.IPS2[82], +mem,IPS_CRBAL_TH.IPS2[83], +mem,IPS_CRBAL_TH.IPS2[84], +mem,IPS_CRBAL_TH.IPS2[85], +mem,IPS_CRBAL_TH.IPS2[86], +mem,IPS_CRBAL_TH.IPS2[87], +mem,IPS_CRBAL_TH.IPS2[88], +mem,IPS_CRBAL_TH.IPS2[89], +mem,IPS_CRBAL_TH.IPS2[8], +mem,IPS_CRBAL_TH.IPS2[90], +mem,IPS_CRBAL_TH.IPS2[91], +mem,IPS_CRBAL_TH.IPS2[92], +mem,IPS_CRBAL_TH.IPS2[93], +mem,IPS_CRBAL_TH.IPS2[94], +mem,IPS_CRBAL_TH.IPS2[95], +mem,IPS_CRBAL_TH.IPS2[96], +mem,IPS_CRBAL_TH.IPS2[97], +mem,IPS_CRBAL_TH.IPS2[98], +mem,IPS_CRBAL_TH.IPS2[99], +mem,IPS_CRBAL_TH.IPS2[9], +mem,IPS_CRBAL_TH.IPS3[0], +mem,IPS_CRBAL_TH.IPS3[100], +mem,IPS_CRBAL_TH.IPS3[101], +mem,IPS_CRBAL_TH.IPS3[102], +mem,IPS_CRBAL_TH.IPS3[103], +mem,IPS_CRBAL_TH.IPS3[104], +mem,IPS_CRBAL_TH.IPS3[105], +mem,IPS_CRBAL_TH.IPS3[106], +mem,IPS_CRBAL_TH.IPS3[107], +mem,IPS_CRBAL_TH.IPS3[108], +mem,IPS_CRBAL_TH.IPS3[109], +mem,IPS_CRBAL_TH.IPS3[10], +mem,IPS_CRBAL_TH.IPS3[110], +mem,IPS_CRBAL_TH.IPS3[111], +mem,IPS_CRBAL_TH.IPS3[112], +mem,IPS_CRBAL_TH.IPS3[113], +mem,IPS_CRBAL_TH.IPS3[114], +mem,IPS_CRBAL_TH.IPS3[115], +mem,IPS_CRBAL_TH.IPS3[116], +mem,IPS_CRBAL_TH.IPS3[117], +mem,IPS_CRBAL_TH.IPS3[118], +mem,IPS_CRBAL_TH.IPS3[119], +mem,IPS_CRBAL_TH.IPS3[11], +mem,IPS_CRBAL_TH.IPS3[120], +mem,IPS_CRBAL_TH.IPS3[121], +mem,IPS_CRBAL_TH.IPS3[122], +mem,IPS_CRBAL_TH.IPS3[123], +mem,IPS_CRBAL_TH.IPS3[124], +mem,IPS_CRBAL_TH.IPS3[125], +mem,IPS_CRBAL_TH.IPS3[126], +mem,IPS_CRBAL_TH.IPS3[127], +mem,IPS_CRBAL_TH.IPS3[12], +mem,IPS_CRBAL_TH.IPS3[13], +mem,IPS_CRBAL_TH.IPS3[14], +mem,IPS_CRBAL_TH.IPS3[15], +mem,IPS_CRBAL_TH.IPS3[16], +mem,IPS_CRBAL_TH.IPS3[17], +mem,IPS_CRBAL_TH.IPS3[18], +mem,IPS_CRBAL_TH.IPS3[19], +mem,IPS_CRBAL_TH.IPS3[1], +mem,IPS_CRBAL_TH.IPS3[20], +mem,IPS_CRBAL_TH.IPS3[21], +mem,IPS_CRBAL_TH.IPS3[22], +mem,IPS_CRBAL_TH.IPS3[23], +mem,IPS_CRBAL_TH.IPS3[24], +mem,IPS_CRBAL_TH.IPS3[25], +mem,IPS_CRBAL_TH.IPS3[26], +mem,IPS_CRBAL_TH.IPS3[27], +mem,IPS_CRBAL_TH.IPS3[28], +mem,IPS_CRBAL_TH.IPS3[29], +mem,IPS_CRBAL_TH.IPS3[2], +mem,IPS_CRBAL_TH.IPS3[30], +mem,IPS_CRBAL_TH.IPS3[31], +mem,IPS_CRBAL_TH.IPS3[32], +mem,IPS_CRBAL_TH.IPS3[33], +mem,IPS_CRBAL_TH.IPS3[34], +mem,IPS_CRBAL_TH.IPS3[35], +mem,IPS_CRBAL_TH.IPS3[36], +mem,IPS_CRBAL_TH.IPS3[37], +mem,IPS_CRBAL_TH.IPS3[38], +mem,IPS_CRBAL_TH.IPS3[39], +mem,IPS_CRBAL_TH.IPS3[3], +mem,IPS_CRBAL_TH.IPS3[40], +mem,IPS_CRBAL_TH.IPS3[41], +mem,IPS_CRBAL_TH.IPS3[42], +mem,IPS_CRBAL_TH.IPS3[43], +mem,IPS_CRBAL_TH.IPS3[44], +mem,IPS_CRBAL_TH.IPS3[45], +mem,IPS_CRBAL_TH.IPS3[46], +mem,IPS_CRBAL_TH.IPS3[47], +mem,IPS_CRBAL_TH.IPS3[48], +mem,IPS_CRBAL_TH.IPS3[49], +mem,IPS_CRBAL_TH.IPS3[4], +mem,IPS_CRBAL_TH.IPS3[50], +mem,IPS_CRBAL_TH.IPS3[51], +mem,IPS_CRBAL_TH.IPS3[52], +mem,IPS_CRBAL_TH.IPS3[53], +mem,IPS_CRBAL_TH.IPS3[54], +mem,IPS_CRBAL_TH.IPS3[55], +mem,IPS_CRBAL_TH.IPS3[56], +mem,IPS_CRBAL_TH.IPS3[57], +mem,IPS_CRBAL_TH.IPS3[58], +mem,IPS_CRBAL_TH.IPS3[59], +mem,IPS_CRBAL_TH.IPS3[5], +mem,IPS_CRBAL_TH.IPS3[60], +mem,IPS_CRBAL_TH.IPS3[61], +mem,IPS_CRBAL_TH.IPS3[62], +mem,IPS_CRBAL_TH.IPS3[63], +mem,IPS_CRBAL_TH.IPS3[64], +mem,IPS_CRBAL_TH.IPS3[65], +mem,IPS_CRBAL_TH.IPS3[66], +mem,IPS_CRBAL_TH.IPS3[67], +mem,IPS_CRBAL_TH.IPS3[68], +mem,IPS_CRBAL_TH.IPS3[69], +mem,IPS_CRBAL_TH.IPS3[6], +mem,IPS_CRBAL_TH.IPS3[70], +mem,IPS_CRBAL_TH.IPS3[71], +mem,IPS_CRBAL_TH.IPS3[72], +mem,IPS_CRBAL_TH.IPS3[73], +mem,IPS_CRBAL_TH.IPS3[74], +mem,IPS_CRBAL_TH.IPS3[75], +mem,IPS_CRBAL_TH.IPS3[76], +mem,IPS_CRBAL_TH.IPS3[77], +mem,IPS_CRBAL_TH.IPS3[78], +mem,IPS_CRBAL_TH.IPS3[79], +mem,IPS_CRBAL_TH.IPS3[7], +mem,IPS_CRBAL_TH.IPS3[80], +mem,IPS_CRBAL_TH.IPS3[81], +mem,IPS_CRBAL_TH.IPS3[82], +mem,IPS_CRBAL_TH.IPS3[83], +mem,IPS_CRBAL_TH.IPS3[84], +mem,IPS_CRBAL_TH.IPS3[85], +mem,IPS_CRBAL_TH.IPS3[86], +mem,IPS_CRBAL_TH.IPS3[87], +mem,IPS_CRBAL_TH.IPS3[88], +mem,IPS_CRBAL_TH.IPS3[89], +mem,IPS_CRBAL_TH.IPS3[8], +mem,IPS_CRBAL_TH.IPS3[90], +mem,IPS_CRBAL_TH.IPS3[91], +mem,IPS_CRBAL_TH.IPS3[92], +mem,IPS_CRBAL_TH.IPS3[93], +mem,IPS_CRBAL_TH.IPS3[94], +mem,IPS_CRBAL_TH.IPS3[95], +mem,IPS_CRBAL_TH.IPS3[96], +mem,IPS_CRBAL_TH.IPS3[97], +mem,IPS_CRBAL_TH.IPS3[98], +mem,IPS_CRBAL_TH.IPS3[99], +mem,IPS_CRBAL_TH.IPS3[9], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[0], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[100], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[101], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[102], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[103], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[104], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[105], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[106], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[107], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[108], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[109], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[10], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[110], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[111], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[112], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[113], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[114], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[115], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[116], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[117], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[118], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[119], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[11], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[120], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[121], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[122], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[123], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[124], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[125], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[126], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[127], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[12], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[13], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[14], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[15], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[16], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[17], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[18], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[19], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[1], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[20], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[21], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[22], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[23], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[24], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[25], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[26], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[27], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[28], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[29], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[2], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[30], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[31], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[32], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[33], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[34], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[35], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[36], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[37], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[38], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[39], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[3], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[40], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[41], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[42], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[43], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[44], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[45], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[46], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[47], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[48], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[49], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[4], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[50], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[51], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[52], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[53], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[54], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[55], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[56], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[57], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[58], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[59], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[5], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[60], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[61], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[62], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[63], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[64], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[65], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[66], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[67], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[68], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[69], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[6], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[70], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[71], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[72], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[73], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[74], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[75], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[76], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[77], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[78], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[79], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[7], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[80], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[81], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[82], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[83], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[84], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[85], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[86], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[87], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[88], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[89], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[8], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[90], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[91], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[92], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[93], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[94], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[95], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[96], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[97], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[98], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[99], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS0[9], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[0], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[100], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[101], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[102], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[103], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[104], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[105], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[106], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[107], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[108], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[109], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[10], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[110], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[111], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[112], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[113], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[114], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[115], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[116], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[117], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[118], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[119], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[11], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[120], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[121], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[122], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[123], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[124], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[125], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[126], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[127], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[12], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[13], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[14], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[15], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[16], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[17], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[18], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[19], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[1], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[20], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[21], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[22], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[23], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[24], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[25], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[26], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[27], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[28], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[29], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[2], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[30], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[31], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[32], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[33], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[34], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[35], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[36], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[37], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[38], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[39], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[3], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[40], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[41], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[42], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[43], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[44], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[45], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[46], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[47], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[48], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[49], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[4], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[50], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[51], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[52], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[53], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[54], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[55], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[56], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[57], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[58], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[59], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[5], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[60], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[61], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[62], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[63], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[64], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[65], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[66], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[67], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[68], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[69], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[6], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[70], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[71], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[72], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[73], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[74], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[75], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[76], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[77], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[78], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[79], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[7], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[80], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[81], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[82], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[83], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[84], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[85], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[86], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[87], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[88], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[89], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[8], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[90], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[91], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[92], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[93], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[94], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[95], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[96], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[97], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[98], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[99], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS1[9], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[0], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[100], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[101], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[102], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[103], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[104], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[105], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[106], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[107], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[108], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[109], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[10], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[110], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[111], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[112], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[113], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[114], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[115], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[116], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[117], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[118], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[119], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[11], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[120], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[121], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[122], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[123], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[124], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[125], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[126], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[127], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[12], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[13], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[14], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[15], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[16], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[17], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[18], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[19], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[1], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[20], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[21], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[22], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[23], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[24], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[25], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[26], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[27], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[28], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[29], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[2], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[30], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[31], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[32], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[33], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[34], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[35], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[36], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[37], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[38], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[39], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[3], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[40], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[41], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[42], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[43], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[44], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[45], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[46], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[47], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[48], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[49], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[4], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[50], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[51], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[52], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[53], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[54], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[55], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[56], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[57], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[58], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[59], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[5], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[60], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[61], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[62], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[63], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[64], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[65], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[66], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[67], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[68], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[69], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[6], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[70], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[71], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[72], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[73], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[74], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[75], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[76], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[77], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[78], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[79], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[7], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[80], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[81], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[82], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[83], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[84], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[85], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[86], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[87], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[88], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[89], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[8], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[90], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[91], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[92], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[93], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[94], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[95], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[96], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[97], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[98], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[99], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS2[9], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[0], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[100], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[101], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[102], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[103], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[104], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[105], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[106], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[107], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[108], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[109], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[10], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[110], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[111], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[112], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[113], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[114], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[115], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[116], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[117], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[118], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[119], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[11], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[120], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[121], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[122], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[123], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[124], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[125], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[126], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[127], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[12], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[13], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[14], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[15], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[16], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[17], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[18], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[19], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[1], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[20], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[21], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[22], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[23], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[24], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[25], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[26], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[27], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[28], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[29], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[2], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[30], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[31], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[32], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[33], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[34], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[35], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[36], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[37], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[38], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[39], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[3], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[40], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[41], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[42], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[43], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[44], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[45], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[46], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[47], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[48], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[49], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[4], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[50], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[51], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[52], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[53], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[54], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[55], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[56], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[57], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[58], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[59], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[5], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[60], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[61], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[62], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[63], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[64], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[65], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[66], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[67], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[68], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[69], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[6], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[70], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[71], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[72], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[73], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[74], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[75], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[76], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[77], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[78], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[79], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[7], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[80], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[81], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[82], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[83], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[84], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[85], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[86], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[87], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[88], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[89], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[8], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[90], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[91], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[92], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[93], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[94], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[95], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[96], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[97], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[98], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[99], +mem,IPS_EMPTY_Q_CRBAL_TH.IPS3[9], +mem,IPS_QSIZE_TH.IPS0[0], +mem,IPS_QSIZE_TH.IPS0[100], +mem,IPS_QSIZE_TH.IPS0[101], +mem,IPS_QSIZE_TH.IPS0[102], +mem,IPS_QSIZE_TH.IPS0[103], +mem,IPS_QSIZE_TH.IPS0[104], +mem,IPS_QSIZE_TH.IPS0[105], +mem,IPS_QSIZE_TH.IPS0[106], +mem,IPS_QSIZE_TH.IPS0[107], +mem,IPS_QSIZE_TH.IPS0[108], +mem,IPS_QSIZE_TH.IPS0[109], +mem,IPS_QSIZE_TH.IPS0[10], +mem,IPS_QSIZE_TH.IPS0[110], +mem,IPS_QSIZE_TH.IPS0[111], +mem,IPS_QSIZE_TH.IPS0[112], +mem,IPS_QSIZE_TH.IPS0[113], +mem,IPS_QSIZE_TH.IPS0[114], +mem,IPS_QSIZE_TH.IPS0[115], +mem,IPS_QSIZE_TH.IPS0[116], +mem,IPS_QSIZE_TH.IPS0[117], +mem,IPS_QSIZE_TH.IPS0[118], +mem,IPS_QSIZE_TH.IPS0[119], +mem,IPS_QSIZE_TH.IPS0[11], +mem,IPS_QSIZE_TH.IPS0[120], +mem,IPS_QSIZE_TH.IPS0[121], +mem,IPS_QSIZE_TH.IPS0[122], +mem,IPS_QSIZE_TH.IPS0[123], +mem,IPS_QSIZE_TH.IPS0[124], +mem,IPS_QSIZE_TH.IPS0[125], +mem,IPS_QSIZE_TH.IPS0[126], +mem,IPS_QSIZE_TH.IPS0[127], +mem,IPS_QSIZE_TH.IPS0[12], +mem,IPS_QSIZE_TH.IPS0[13], +mem,IPS_QSIZE_TH.IPS0[14], +mem,IPS_QSIZE_TH.IPS0[15], +mem,IPS_QSIZE_TH.IPS0[16], +mem,IPS_QSIZE_TH.IPS0[17], +mem,IPS_QSIZE_TH.IPS0[18], +mem,IPS_QSIZE_TH.IPS0[19], +mem,IPS_QSIZE_TH.IPS0[1], +mem,IPS_QSIZE_TH.IPS0[20], +mem,IPS_QSIZE_TH.IPS0[21], +mem,IPS_QSIZE_TH.IPS0[22], +mem,IPS_QSIZE_TH.IPS0[23], +mem,IPS_QSIZE_TH.IPS0[24], +mem,IPS_QSIZE_TH.IPS0[25], +mem,IPS_QSIZE_TH.IPS0[26], +mem,IPS_QSIZE_TH.IPS0[27], +mem,IPS_QSIZE_TH.IPS0[28], +mem,IPS_QSIZE_TH.IPS0[29], +mem,IPS_QSIZE_TH.IPS0[2], +mem,IPS_QSIZE_TH.IPS0[30], +mem,IPS_QSIZE_TH.IPS0[31], +mem,IPS_QSIZE_TH.IPS0[32], +mem,IPS_QSIZE_TH.IPS0[33], +mem,IPS_QSIZE_TH.IPS0[34], +mem,IPS_QSIZE_TH.IPS0[35], +mem,IPS_QSIZE_TH.IPS0[36], +mem,IPS_QSIZE_TH.IPS0[37], +mem,IPS_QSIZE_TH.IPS0[38], +mem,IPS_QSIZE_TH.IPS0[39], +mem,IPS_QSIZE_TH.IPS0[3], +mem,IPS_QSIZE_TH.IPS0[40], +mem,IPS_QSIZE_TH.IPS0[41], +mem,IPS_QSIZE_TH.IPS0[42], +mem,IPS_QSIZE_TH.IPS0[43], +mem,IPS_QSIZE_TH.IPS0[44], +mem,IPS_QSIZE_TH.IPS0[45], +mem,IPS_QSIZE_TH.IPS0[46], +mem,IPS_QSIZE_TH.IPS0[47], +mem,IPS_QSIZE_TH.IPS0[48], +mem,IPS_QSIZE_TH.IPS0[49], +mem,IPS_QSIZE_TH.IPS0[4], +mem,IPS_QSIZE_TH.IPS0[50], +mem,IPS_QSIZE_TH.IPS0[51], +mem,IPS_QSIZE_TH.IPS0[52], +mem,IPS_QSIZE_TH.IPS0[53], +mem,IPS_QSIZE_TH.IPS0[54], +mem,IPS_QSIZE_TH.IPS0[55], +mem,IPS_QSIZE_TH.IPS0[56], +mem,IPS_QSIZE_TH.IPS0[57], +mem,IPS_QSIZE_TH.IPS0[58], +mem,IPS_QSIZE_TH.IPS0[59], +mem,IPS_QSIZE_TH.IPS0[5], +mem,IPS_QSIZE_TH.IPS0[60], +mem,IPS_QSIZE_TH.IPS0[61], +mem,IPS_QSIZE_TH.IPS0[62], +mem,IPS_QSIZE_TH.IPS0[63], +mem,IPS_QSIZE_TH.IPS0[64], +mem,IPS_QSIZE_TH.IPS0[65], +mem,IPS_QSIZE_TH.IPS0[66], +mem,IPS_QSIZE_TH.IPS0[67], +mem,IPS_QSIZE_TH.IPS0[68], +mem,IPS_QSIZE_TH.IPS0[69], +mem,IPS_QSIZE_TH.IPS0[6], +mem,IPS_QSIZE_TH.IPS0[70], +mem,IPS_QSIZE_TH.IPS0[71], +mem,IPS_QSIZE_TH.IPS0[72], +mem,IPS_QSIZE_TH.IPS0[73], +mem,IPS_QSIZE_TH.IPS0[74], +mem,IPS_QSIZE_TH.IPS0[75], +mem,IPS_QSIZE_TH.IPS0[76], +mem,IPS_QSIZE_TH.IPS0[77], +mem,IPS_QSIZE_TH.IPS0[78], +mem,IPS_QSIZE_TH.IPS0[79], +mem,IPS_QSIZE_TH.IPS0[7], +mem,IPS_QSIZE_TH.IPS0[80], +mem,IPS_QSIZE_TH.IPS0[81], +mem,IPS_QSIZE_TH.IPS0[82], +mem,IPS_QSIZE_TH.IPS0[83], +mem,IPS_QSIZE_TH.IPS0[84], +mem,IPS_QSIZE_TH.IPS0[85], +mem,IPS_QSIZE_TH.IPS0[86], +mem,IPS_QSIZE_TH.IPS0[87], +mem,IPS_QSIZE_TH.IPS0[88], +mem,IPS_QSIZE_TH.IPS0[89], +mem,IPS_QSIZE_TH.IPS0[8], +mem,IPS_QSIZE_TH.IPS0[90], +mem,IPS_QSIZE_TH.IPS0[91], +mem,IPS_QSIZE_TH.IPS0[92], +mem,IPS_QSIZE_TH.IPS0[93], +mem,IPS_QSIZE_TH.IPS0[94], +mem,IPS_QSIZE_TH.IPS0[95], +mem,IPS_QSIZE_TH.IPS0[96], +mem,IPS_QSIZE_TH.IPS0[97], +mem,IPS_QSIZE_TH.IPS0[98], +mem,IPS_QSIZE_TH.IPS0[99], +mem,IPS_QSIZE_TH.IPS0[9], +mem,IPS_QSIZE_TH.IPS1[0], +mem,IPS_QSIZE_TH.IPS1[100], +mem,IPS_QSIZE_TH.IPS1[101], +mem,IPS_QSIZE_TH.IPS1[102], +mem,IPS_QSIZE_TH.IPS1[103], +mem,IPS_QSIZE_TH.IPS1[104], +mem,IPS_QSIZE_TH.IPS1[105], +mem,IPS_QSIZE_TH.IPS1[106], +mem,IPS_QSIZE_TH.IPS1[107], +mem,IPS_QSIZE_TH.IPS1[108], +mem,IPS_QSIZE_TH.IPS1[109], +mem,IPS_QSIZE_TH.IPS1[10], +mem,IPS_QSIZE_TH.IPS1[110], +mem,IPS_QSIZE_TH.IPS1[111], +mem,IPS_QSIZE_TH.IPS1[112], +mem,IPS_QSIZE_TH.IPS1[113], +mem,IPS_QSIZE_TH.IPS1[114], +mem,IPS_QSIZE_TH.IPS1[115], +mem,IPS_QSIZE_TH.IPS1[116], +mem,IPS_QSIZE_TH.IPS1[117], +mem,IPS_QSIZE_TH.IPS1[118], +mem,IPS_QSIZE_TH.IPS1[119], +mem,IPS_QSIZE_TH.IPS1[11], +mem,IPS_QSIZE_TH.IPS1[120], +mem,IPS_QSIZE_TH.IPS1[121], +mem,IPS_QSIZE_TH.IPS1[122], +mem,IPS_QSIZE_TH.IPS1[123], +mem,IPS_QSIZE_TH.IPS1[124], +mem,IPS_QSIZE_TH.IPS1[125], +mem,IPS_QSIZE_TH.IPS1[126], +mem,IPS_QSIZE_TH.IPS1[127], +mem,IPS_QSIZE_TH.IPS1[12], +mem,IPS_QSIZE_TH.IPS1[13], +mem,IPS_QSIZE_TH.IPS1[14], +mem,IPS_QSIZE_TH.IPS1[15], +mem,IPS_QSIZE_TH.IPS1[16], +mem,IPS_QSIZE_TH.IPS1[17], +mem,IPS_QSIZE_TH.IPS1[18], +mem,IPS_QSIZE_TH.IPS1[19], +mem,IPS_QSIZE_TH.IPS1[1], +mem,IPS_QSIZE_TH.IPS1[20], +mem,IPS_QSIZE_TH.IPS1[21], +mem,IPS_QSIZE_TH.IPS1[22], +mem,IPS_QSIZE_TH.IPS1[23], +mem,IPS_QSIZE_TH.IPS1[24], +mem,IPS_QSIZE_TH.IPS1[25], +mem,IPS_QSIZE_TH.IPS1[26], +mem,IPS_QSIZE_TH.IPS1[27], +mem,IPS_QSIZE_TH.IPS1[28], +mem,IPS_QSIZE_TH.IPS1[29], +mem,IPS_QSIZE_TH.IPS1[2], +mem,IPS_QSIZE_TH.IPS1[30], +mem,IPS_QSIZE_TH.IPS1[31], +mem,IPS_QSIZE_TH.IPS1[32], +mem,IPS_QSIZE_TH.IPS1[33], +mem,IPS_QSIZE_TH.IPS1[34], +mem,IPS_QSIZE_TH.IPS1[35], +mem,IPS_QSIZE_TH.IPS1[36], +mem,IPS_QSIZE_TH.IPS1[37], +mem,IPS_QSIZE_TH.IPS1[38], +mem,IPS_QSIZE_TH.IPS1[39], +mem,IPS_QSIZE_TH.IPS1[3], +mem,IPS_QSIZE_TH.IPS1[40], +mem,IPS_QSIZE_TH.IPS1[41], +mem,IPS_QSIZE_TH.IPS1[42], +mem,IPS_QSIZE_TH.IPS1[43], +mem,IPS_QSIZE_TH.IPS1[44], +mem,IPS_QSIZE_TH.IPS1[45], +mem,IPS_QSIZE_TH.IPS1[46], +mem,IPS_QSIZE_TH.IPS1[47], +mem,IPS_QSIZE_TH.IPS1[48], +mem,IPS_QSIZE_TH.IPS1[49], +mem,IPS_QSIZE_TH.IPS1[4], +mem,IPS_QSIZE_TH.IPS1[50], +mem,IPS_QSIZE_TH.IPS1[51], +mem,IPS_QSIZE_TH.IPS1[52], +mem,IPS_QSIZE_TH.IPS1[53], +mem,IPS_QSIZE_TH.IPS1[54], +mem,IPS_QSIZE_TH.IPS1[55], +mem,IPS_QSIZE_TH.IPS1[56], +mem,IPS_QSIZE_TH.IPS1[57], +mem,IPS_QSIZE_TH.IPS1[58], +mem,IPS_QSIZE_TH.IPS1[59], +mem,IPS_QSIZE_TH.IPS1[5], +mem,IPS_QSIZE_TH.IPS1[60], +mem,IPS_QSIZE_TH.IPS1[61], +mem,IPS_QSIZE_TH.IPS1[62], +mem,IPS_QSIZE_TH.IPS1[63], +mem,IPS_QSIZE_TH.IPS1[64], +mem,IPS_QSIZE_TH.IPS1[65], +mem,IPS_QSIZE_TH.IPS1[66], +mem,IPS_QSIZE_TH.IPS1[67], +mem,IPS_QSIZE_TH.IPS1[68], +mem,IPS_QSIZE_TH.IPS1[69], +mem,IPS_QSIZE_TH.IPS1[6], +mem,IPS_QSIZE_TH.IPS1[70], +mem,IPS_QSIZE_TH.IPS1[71], +mem,IPS_QSIZE_TH.IPS1[72], +mem,IPS_QSIZE_TH.IPS1[73], +mem,IPS_QSIZE_TH.IPS1[74], +mem,IPS_QSIZE_TH.IPS1[75], +mem,IPS_QSIZE_TH.IPS1[76], +mem,IPS_QSIZE_TH.IPS1[77], +mem,IPS_QSIZE_TH.IPS1[78], +mem,IPS_QSIZE_TH.IPS1[79], +mem,IPS_QSIZE_TH.IPS1[7], +mem,IPS_QSIZE_TH.IPS1[80], +mem,IPS_QSIZE_TH.IPS1[81], +mem,IPS_QSIZE_TH.IPS1[82], +mem,IPS_QSIZE_TH.IPS1[83], +mem,IPS_QSIZE_TH.IPS1[84], +mem,IPS_QSIZE_TH.IPS1[85], +mem,IPS_QSIZE_TH.IPS1[86], +mem,IPS_QSIZE_TH.IPS1[87], +mem,IPS_QSIZE_TH.IPS1[88], +mem,IPS_QSIZE_TH.IPS1[89], +mem,IPS_QSIZE_TH.IPS1[8], +mem,IPS_QSIZE_TH.IPS1[90], +mem,IPS_QSIZE_TH.IPS1[91], +mem,IPS_QSIZE_TH.IPS1[92], +mem,IPS_QSIZE_TH.IPS1[93], +mem,IPS_QSIZE_TH.IPS1[94], +mem,IPS_QSIZE_TH.IPS1[95], +mem,IPS_QSIZE_TH.IPS1[96], +mem,IPS_QSIZE_TH.IPS1[97], +mem,IPS_QSIZE_TH.IPS1[98], +mem,IPS_QSIZE_TH.IPS1[99], +mem,IPS_QSIZE_TH.IPS1[9], +mem,IPS_QSIZE_TH.IPS2[0], +mem,IPS_QSIZE_TH.IPS2[100], +mem,IPS_QSIZE_TH.IPS2[101], +mem,IPS_QSIZE_TH.IPS2[102], +mem,IPS_QSIZE_TH.IPS2[103], +mem,IPS_QSIZE_TH.IPS2[104], +mem,IPS_QSIZE_TH.IPS2[105], +mem,IPS_QSIZE_TH.IPS2[106], +mem,IPS_QSIZE_TH.IPS2[107], +mem,IPS_QSIZE_TH.IPS2[108], +mem,IPS_QSIZE_TH.IPS2[109], +mem,IPS_QSIZE_TH.IPS2[10], +mem,IPS_QSIZE_TH.IPS2[110], +mem,IPS_QSIZE_TH.IPS2[111], +mem,IPS_QSIZE_TH.IPS2[112], +mem,IPS_QSIZE_TH.IPS2[113], +mem,IPS_QSIZE_TH.IPS2[114], +mem,IPS_QSIZE_TH.IPS2[115], +mem,IPS_QSIZE_TH.IPS2[116], +mem,IPS_QSIZE_TH.IPS2[117], +mem,IPS_QSIZE_TH.IPS2[118], +mem,IPS_QSIZE_TH.IPS2[119], +mem,IPS_QSIZE_TH.IPS2[11], +mem,IPS_QSIZE_TH.IPS2[120], +mem,IPS_QSIZE_TH.IPS2[121], +mem,IPS_QSIZE_TH.IPS2[122], +mem,IPS_QSIZE_TH.IPS2[123], +mem,IPS_QSIZE_TH.IPS2[124], +mem,IPS_QSIZE_TH.IPS2[125], +mem,IPS_QSIZE_TH.IPS2[126], +mem,IPS_QSIZE_TH.IPS2[127], +mem,IPS_QSIZE_TH.IPS2[12], +mem,IPS_QSIZE_TH.IPS2[13], +mem,IPS_QSIZE_TH.IPS2[14], +mem,IPS_QSIZE_TH.IPS2[15], +mem,IPS_QSIZE_TH.IPS2[16], +mem,IPS_QSIZE_TH.IPS2[17], +mem,IPS_QSIZE_TH.IPS2[18], +mem,IPS_QSIZE_TH.IPS2[19], +mem,IPS_QSIZE_TH.IPS2[1], +mem,IPS_QSIZE_TH.IPS2[20], +mem,IPS_QSIZE_TH.IPS2[21], +mem,IPS_QSIZE_TH.IPS2[22], +mem,IPS_QSIZE_TH.IPS2[23], +mem,IPS_QSIZE_TH.IPS2[24], +mem,IPS_QSIZE_TH.IPS2[25], +mem,IPS_QSIZE_TH.IPS2[26], +mem,IPS_QSIZE_TH.IPS2[27], +mem,IPS_QSIZE_TH.IPS2[28], +mem,IPS_QSIZE_TH.IPS2[29], +mem,IPS_QSIZE_TH.IPS2[2], +mem,IPS_QSIZE_TH.IPS2[30], +mem,IPS_QSIZE_TH.IPS2[31], +mem,IPS_QSIZE_TH.IPS2[32], +mem,IPS_QSIZE_TH.IPS2[33], +mem,IPS_QSIZE_TH.IPS2[34], +mem,IPS_QSIZE_TH.IPS2[35], +mem,IPS_QSIZE_TH.IPS2[36], +mem,IPS_QSIZE_TH.IPS2[37], +mem,IPS_QSIZE_TH.IPS2[38], +mem,IPS_QSIZE_TH.IPS2[39], +mem,IPS_QSIZE_TH.IPS2[3], +mem,IPS_QSIZE_TH.IPS2[40], +mem,IPS_QSIZE_TH.IPS2[41], +mem,IPS_QSIZE_TH.IPS2[42], +mem,IPS_QSIZE_TH.IPS2[43], +mem,IPS_QSIZE_TH.IPS2[44], +mem,IPS_QSIZE_TH.IPS2[45], +mem,IPS_QSIZE_TH.IPS2[46], +mem,IPS_QSIZE_TH.IPS2[47], +mem,IPS_QSIZE_TH.IPS2[48], +mem,IPS_QSIZE_TH.IPS2[49], +mem,IPS_QSIZE_TH.IPS2[4], +mem,IPS_QSIZE_TH.IPS2[50], +mem,IPS_QSIZE_TH.IPS2[51], +mem,IPS_QSIZE_TH.IPS2[52], +mem,IPS_QSIZE_TH.IPS2[53], +mem,IPS_QSIZE_TH.IPS2[54], +mem,IPS_QSIZE_TH.IPS2[55], +mem,IPS_QSIZE_TH.IPS2[56], +mem,IPS_QSIZE_TH.IPS2[57], +mem,IPS_QSIZE_TH.IPS2[58], +mem,IPS_QSIZE_TH.IPS2[59], +mem,IPS_QSIZE_TH.IPS2[5], +mem,IPS_QSIZE_TH.IPS2[60], +mem,IPS_QSIZE_TH.IPS2[61], +mem,IPS_QSIZE_TH.IPS2[62], +mem,IPS_QSIZE_TH.IPS2[63], +mem,IPS_QSIZE_TH.IPS2[64], +mem,IPS_QSIZE_TH.IPS2[65], +mem,IPS_QSIZE_TH.IPS2[66], +mem,IPS_QSIZE_TH.IPS2[67], +mem,IPS_QSIZE_TH.IPS2[68], +mem,IPS_QSIZE_TH.IPS2[69], +mem,IPS_QSIZE_TH.IPS2[6], +mem,IPS_QSIZE_TH.IPS2[70], +mem,IPS_QSIZE_TH.IPS2[71], +mem,IPS_QSIZE_TH.IPS2[72], +mem,IPS_QSIZE_TH.IPS2[73], +mem,IPS_QSIZE_TH.IPS2[74], +mem,IPS_QSIZE_TH.IPS2[75], +mem,IPS_QSIZE_TH.IPS2[76], +mem,IPS_QSIZE_TH.IPS2[77], +mem,IPS_QSIZE_TH.IPS2[78], +mem,IPS_QSIZE_TH.IPS2[79], +mem,IPS_QSIZE_TH.IPS2[7], +mem,IPS_QSIZE_TH.IPS2[80], +mem,IPS_QSIZE_TH.IPS2[81], +mem,IPS_QSIZE_TH.IPS2[82], +mem,IPS_QSIZE_TH.IPS2[83], +mem,IPS_QSIZE_TH.IPS2[84], +mem,IPS_QSIZE_TH.IPS2[85], +mem,IPS_QSIZE_TH.IPS2[86], +mem,IPS_QSIZE_TH.IPS2[87], +mem,IPS_QSIZE_TH.IPS2[88], +mem,IPS_QSIZE_TH.IPS2[89], +mem,IPS_QSIZE_TH.IPS2[8], +mem,IPS_QSIZE_TH.IPS2[90], +mem,IPS_QSIZE_TH.IPS2[91], +mem,IPS_QSIZE_TH.IPS2[92], +mem,IPS_QSIZE_TH.IPS2[93], +mem,IPS_QSIZE_TH.IPS2[94], +mem,IPS_QSIZE_TH.IPS2[95], +mem,IPS_QSIZE_TH.IPS2[96], +mem,IPS_QSIZE_TH.IPS2[97], +mem,IPS_QSIZE_TH.IPS2[98], +mem,IPS_QSIZE_TH.IPS2[99], +mem,IPS_QSIZE_TH.IPS2[9], +mem,IPS_QSIZE_TH.IPS3[0], +mem,IPS_QSIZE_TH.IPS3[100], +mem,IPS_QSIZE_TH.IPS3[101], +mem,IPS_QSIZE_TH.IPS3[102], +mem,IPS_QSIZE_TH.IPS3[103], +mem,IPS_QSIZE_TH.IPS3[104], +mem,IPS_QSIZE_TH.IPS3[105], +mem,IPS_QSIZE_TH.IPS3[106], +mem,IPS_QSIZE_TH.IPS3[107], +mem,IPS_QSIZE_TH.IPS3[108], +mem,IPS_QSIZE_TH.IPS3[109], +mem,IPS_QSIZE_TH.IPS3[10], +mem,IPS_QSIZE_TH.IPS3[110], +mem,IPS_QSIZE_TH.IPS3[111], +mem,IPS_QSIZE_TH.IPS3[112], +mem,IPS_QSIZE_TH.IPS3[113], +mem,IPS_QSIZE_TH.IPS3[114], +mem,IPS_QSIZE_TH.IPS3[115], +mem,IPS_QSIZE_TH.IPS3[116], +mem,IPS_QSIZE_TH.IPS3[117], +mem,IPS_QSIZE_TH.IPS3[118], +mem,IPS_QSIZE_TH.IPS3[119], +mem,IPS_QSIZE_TH.IPS3[11], +mem,IPS_QSIZE_TH.IPS3[120], +mem,IPS_QSIZE_TH.IPS3[121], +mem,IPS_QSIZE_TH.IPS3[122], +mem,IPS_QSIZE_TH.IPS3[123], +mem,IPS_QSIZE_TH.IPS3[124], +mem,IPS_QSIZE_TH.IPS3[125], +mem,IPS_QSIZE_TH.IPS3[126], +mem,IPS_QSIZE_TH.IPS3[127], +mem,IPS_QSIZE_TH.IPS3[12], +mem,IPS_QSIZE_TH.IPS3[13], +mem,IPS_QSIZE_TH.IPS3[14], +mem,IPS_QSIZE_TH.IPS3[15], +mem,IPS_QSIZE_TH.IPS3[16], +mem,IPS_QSIZE_TH.IPS3[17], +mem,IPS_QSIZE_TH.IPS3[18], +mem,IPS_QSIZE_TH.IPS3[19], +mem,IPS_QSIZE_TH.IPS3[1], +mem,IPS_QSIZE_TH.IPS3[20], +mem,IPS_QSIZE_TH.IPS3[21], +mem,IPS_QSIZE_TH.IPS3[22], +mem,IPS_QSIZE_TH.IPS3[23], +mem,IPS_QSIZE_TH.IPS3[24], +mem,IPS_QSIZE_TH.IPS3[25], +mem,IPS_QSIZE_TH.IPS3[26], +mem,IPS_QSIZE_TH.IPS3[27], +mem,IPS_QSIZE_TH.IPS3[28], +mem,IPS_QSIZE_TH.IPS3[29], +mem,IPS_QSIZE_TH.IPS3[2], +mem,IPS_QSIZE_TH.IPS3[30], +mem,IPS_QSIZE_TH.IPS3[31], +mem,IPS_QSIZE_TH.IPS3[32], +mem,IPS_QSIZE_TH.IPS3[33], +mem,IPS_QSIZE_TH.IPS3[34], +mem,IPS_QSIZE_TH.IPS3[35], +mem,IPS_QSIZE_TH.IPS3[36], +mem,IPS_QSIZE_TH.IPS3[37], +mem,IPS_QSIZE_TH.IPS3[38], +mem,IPS_QSIZE_TH.IPS3[39], +mem,IPS_QSIZE_TH.IPS3[3], +mem,IPS_QSIZE_TH.IPS3[40], +mem,IPS_QSIZE_TH.IPS3[41], +mem,IPS_QSIZE_TH.IPS3[42], +mem,IPS_QSIZE_TH.IPS3[43], +mem,IPS_QSIZE_TH.IPS3[44], +mem,IPS_QSIZE_TH.IPS3[45], +mem,IPS_QSIZE_TH.IPS3[46], +mem,IPS_QSIZE_TH.IPS3[47], +mem,IPS_QSIZE_TH.IPS3[48], +mem,IPS_QSIZE_TH.IPS3[49], +mem,IPS_QSIZE_TH.IPS3[4], +mem,IPS_QSIZE_TH.IPS3[50], +mem,IPS_QSIZE_TH.IPS3[51], +mem,IPS_QSIZE_TH.IPS3[52], +mem,IPS_QSIZE_TH.IPS3[53], +mem,IPS_QSIZE_TH.IPS3[54], +mem,IPS_QSIZE_TH.IPS3[55], +mem,IPS_QSIZE_TH.IPS3[56], +mem,IPS_QSIZE_TH.IPS3[57], +mem,IPS_QSIZE_TH.IPS3[58], +mem,IPS_QSIZE_TH.IPS3[59], +mem,IPS_QSIZE_TH.IPS3[5], +mem,IPS_QSIZE_TH.IPS3[60], +mem,IPS_QSIZE_TH.IPS3[61], +mem,IPS_QSIZE_TH.IPS3[62], +mem,IPS_QSIZE_TH.IPS3[63], +mem,IPS_QSIZE_TH.IPS3[64], +mem,IPS_QSIZE_TH.IPS3[65], +mem,IPS_QSIZE_TH.IPS3[66], +mem,IPS_QSIZE_TH.IPS3[67], +mem,IPS_QSIZE_TH.IPS3[68], +mem,IPS_QSIZE_TH.IPS3[69], +mem,IPS_QSIZE_TH.IPS3[6], +mem,IPS_QSIZE_TH.IPS3[70], +mem,IPS_QSIZE_TH.IPS3[71], +mem,IPS_QSIZE_TH.IPS3[72], +mem,IPS_QSIZE_TH.IPS3[73], +mem,IPS_QSIZE_TH.IPS3[74], +mem,IPS_QSIZE_TH.IPS3[75], +mem,IPS_QSIZE_TH.IPS3[76], +mem,IPS_QSIZE_TH.IPS3[77], +mem,IPS_QSIZE_TH.IPS3[78], +mem,IPS_QSIZE_TH.IPS3[79], +mem,IPS_QSIZE_TH.IPS3[7], +mem,IPS_QSIZE_TH.IPS3[80], +mem,IPS_QSIZE_TH.IPS3[81], +mem,IPS_QSIZE_TH.IPS3[82], +mem,IPS_QSIZE_TH.IPS3[83], +mem,IPS_QSIZE_TH.IPS3[84], +mem,IPS_QSIZE_TH.IPS3[85], +mem,IPS_QSIZE_TH.IPS3[86], +mem,IPS_QSIZE_TH.IPS3[87], +mem,IPS_QSIZE_TH.IPS3[88], +mem,IPS_QSIZE_TH.IPS3[89], +mem,IPS_QSIZE_TH.IPS3[8], +mem,IPS_QSIZE_TH.IPS3[90], +mem,IPS_QSIZE_TH.IPS3[91], +mem,IPS_QSIZE_TH.IPS3[92], +mem,IPS_QSIZE_TH.IPS3[93], +mem,IPS_QSIZE_TH.IPS3[94], +mem,IPS_QSIZE_TH.IPS3[95], +mem,IPS_QSIZE_TH.IPS3[96], +mem,IPS_QSIZE_TH.IPS3[97], +mem,IPS_QSIZE_TH.IPS3[98], +mem,IPS_QSIZE_TH.IPS3[99], +mem,IPS_QSIZE_TH.IPS3[9], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[0], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1000], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1001], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1002], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1003], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1004], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1005], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1006], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1007], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1008], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1009], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1010], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1011], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1012], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1013], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1014], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1015], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1016], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1017], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1018], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1019], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1020], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1021], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1022], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1023], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1024], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1025], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1026], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1027], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1028], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1029], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1030], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1031], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1032], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1033], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1034], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1035], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1036], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1037], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1038], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1039], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1040], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1041], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1042], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1043], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1044], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1045], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1046], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1047], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1048], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1049], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1050], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1051], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1052], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1053], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1054], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1055], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1056], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1057], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1058], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1059], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1060], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1061], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1062], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1063], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1064], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1065], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1066], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1067], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1068], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1069], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1070], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1071], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1072], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1073], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1074], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1075], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1076], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1077], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1078], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1079], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1080], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1081], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1082], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1083], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1084], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1085], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1086], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1087], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1088], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1089], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1090], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1091], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1092], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1093], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1094], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1095], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1096], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1097], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1098], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1099], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[10], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[11], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[12], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[13], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[14], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[15], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[16], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[17], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[18], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[19], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[1], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[20], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[21], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[22], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[23], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[24], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[25], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[26], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[27], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[288], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[289], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[28], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[290], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[291], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[292], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[293], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[294], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[295], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[296], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[297], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[298], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[299], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[29], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[2], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[300], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[301], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[302], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[303], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[304], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[305], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[306], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[307], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[308], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[309], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[30], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[310], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[311], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[312], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[313], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[314], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[315], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[316], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[317], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[318], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[319], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[31], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[320], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[321], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[322], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[323], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[324], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[325], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[326], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[327], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[328], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[329], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[32], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[330], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[331], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[332], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[333], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[334], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[335], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[336], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[337], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[338], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[339], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[33], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[340], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[341], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[342], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[343], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[344], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[345], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[346], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[347], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[348], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[349], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[34], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[350], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[351], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[352], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[353], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[354], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[355], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[356], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[357], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[358], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[359], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[35], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[360], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[361], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[362], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[363], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[364], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[365], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[366], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[367], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[368], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[369], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[36], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[370], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[371], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[372], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[373], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[374], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[375], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[376], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[377], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[378], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[379], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[37], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[380], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[381], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[382], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[383], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[384], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[385], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[386], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[387], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[388], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[389], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[38], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[390], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[391], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[392], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[393], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[394], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[395], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[396], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[397], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[398], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[399], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[39], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[3], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[400], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[401], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[402], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[403], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[404], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[405], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[406], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[407], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[408], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[409], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[40], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[410], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[411], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[412], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[413], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[414], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[415], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[416], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[417], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[418], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[419], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[41], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[420], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[421], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[422], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[423], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[424], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[425], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[426], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[427], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[428], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[429], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[42], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[430], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[431], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[432], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[433], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[434], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[435], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[436], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[437], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[438], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[439], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[43], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[440], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[441], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[442], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[443], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[444], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[445], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[446], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[447], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[448], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[449], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[44], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[450], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[451], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[452], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[453], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[454], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[455], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[456], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[457], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[458], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[459], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[45], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[460], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[461], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[462], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[463], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[464], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[465], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[466], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[467], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[468], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[469], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[46], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[470], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[471], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[472], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[473], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[474], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[475], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[476], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[477], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[478], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[479], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[47], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[480], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[481], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[482], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[483], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[484], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[485], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[486], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[487], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[488], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[489], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[48], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[490], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[491], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[492], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[493], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[494], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[495], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[496], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[497], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[498], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[499], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[49], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[4], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[500], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[501], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[502], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[503], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[504], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[505], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[506], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[507], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[508], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[509], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[50], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[510], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[511], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[512], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[513], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[514], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[515], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[516], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[517], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[518], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[519], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[51], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[520], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[521], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[522], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[523], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[524], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[525], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[526], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[527], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[528], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[529], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[52], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[530], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[531], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[532], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[533], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[534], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[535], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[536], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[537], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[538], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[539], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[53], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[540], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[541], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[542], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[543], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[544], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[545], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[546], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[547], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[548], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[549], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[54], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[550], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[551], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[552], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[553], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[554], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[555], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[556], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[557], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[558], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[559], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[55], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[560], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[561], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[562], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[563], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[564], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[565], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[566], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[567], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[568], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[569], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[56], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[570], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[571], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[572], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[573], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[574], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[575], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[576], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[577], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[578], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[579], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[57], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[580], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[581], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[582], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[583], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[584], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[585], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[586], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[587], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[588], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[589], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[58], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[590], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[591], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[592], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[593], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[594], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[595], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[596], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[597], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[598], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[599], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[59], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[5], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[600], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[601], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[602], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[603], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[604], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[605], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[606], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[607], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[608], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[609], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[60], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[610], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[611], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[612], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[613], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[614], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[615], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[616], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[617], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[618], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[619], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[61], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[620], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[621], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[622], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[623], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[624], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[625], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[626], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[627], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[628], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[629], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[62], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[630], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[631], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[632], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[633], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[634], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[635], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[636], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[637], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[638], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[639], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[63], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[640], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[641], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[642], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[643], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[644], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[645], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[646], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[647], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[648], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[649], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[64], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[650], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[651], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[652], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[653], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[654], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[655], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[656], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[657], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[658], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[659], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[65], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[660], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[661], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[662], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[663], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[664], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[665], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[666], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[667], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[668], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[669], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[66], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[670], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[671], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[672], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[673], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[674], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[675], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[676], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[677], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[678], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[679], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[67], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[680], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[681], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[682], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[683], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[684], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[685], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[686], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[687], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[688], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[689], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[68], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[690], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[691], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[692], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[693], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[694], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[695], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[696], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[697], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[698], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[699], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[69], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[6], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[700], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[701], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[702], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[703], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[704], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[705], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[706], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[707], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[708], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[709], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[70], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[710], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[711], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[712], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[713], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[714], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[715], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[716], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[717], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[718], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[719], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[71], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[720], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[721], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[722], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[723], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[724], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[725], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[726], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[727], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[728], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[729], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[72], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[730], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[731], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[732], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[733], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[734], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[735], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[736], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[737], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[738], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[739], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[73], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[740], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[741], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[742], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[743], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[744], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[745], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[746], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[747], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[748], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[749], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[74], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[750], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[751], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[752], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[753], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[754], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[755], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[756], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[757], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[758], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[759], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[75], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[760], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[761], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[762], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[763], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[764], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[765], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[766], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[767], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[768], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[769], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[76], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[770], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[771], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[772], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[773], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[774], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[775], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[776], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[777], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[778], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[779], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[77], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[780], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[781], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[782], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[783], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[784], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[785], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[786], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[787], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[788], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[789], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[78], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[790], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[791], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[792], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[793], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[794], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[795], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[796], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[797], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[798], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[799], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[79], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[7], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[800], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[801], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[802], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[803], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[804], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[805], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[806], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[807], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[808], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[809], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[80], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[810], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[811], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[812], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[813], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[814], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[815], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[816], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[817], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[818], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[819], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[81], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[820], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[821], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[822], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[823], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[824], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[825], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[826], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[827], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[828], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[829], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[82], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[830], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[831], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[832], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[833], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[834], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[835], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[836], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[837], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[838], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[839], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[83], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[840], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[841], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[842], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[843], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[844], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[845], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[846], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[847], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[848], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[849], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[84], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[850], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[851], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[852], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[853], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[854], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[855], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[856], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[857], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[858], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[859], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[85], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[860], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[861], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[862], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[863], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[864], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[865], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[866], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[867], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[868], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[869], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[86], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[870], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[871], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[872], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[873], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[874], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[875], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[876], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[877], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[878], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[879], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[87], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[880], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[881], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[882], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[883], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[884], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[885], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[886], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[887], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[888], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[889], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[88], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[890], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[891], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[892], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[893], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[894], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[895], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[896], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[897], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[898], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[899], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[89], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[8], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[900], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[901], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[902], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[903], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[904], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[905], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[906], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[907], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[908], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[909], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[90], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[910], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[911], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[912], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[913], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[914], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[915], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[916], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[917], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[918], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[919], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[91], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[920], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[921], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[922], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[923], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[924], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[925], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[926], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[927], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[928], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[929], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[92], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[930], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[931], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[932], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[933], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[934], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[935], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[936], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[937], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[938], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[939], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[93], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[940], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[941], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[942], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[943], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[944], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[945], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[946], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[947], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[948], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[949], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[94], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[950], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[951], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[952], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[953], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[954], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[955], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[956], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[957], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[958], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[959], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[95], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[960], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[961], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[962], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[963], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[964], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[965], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[966], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[967], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[968], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[969], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[96], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[970], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[971], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[972], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[973], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[974], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[975], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[976], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[977], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[978], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[979], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[97], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[980], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[981], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[982], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[983], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[984], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[985], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[986], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[987], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[988], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[989], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[98], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[990], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[991], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[992], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[993], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[994], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[995], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[996], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[997], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[998], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[999], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[99], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH0[9], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[0], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1000], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1001], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1002], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1003], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1004], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1005], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1006], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1007], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1008], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1009], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1010], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1011], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1012], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1013], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1014], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1015], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1016], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1017], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1018], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1019], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1020], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1021], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1022], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1023], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1024], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1025], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1026], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1027], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1028], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1029], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1030], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1031], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1032], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1033], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1034], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1035], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1036], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1037], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1038], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1039], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1040], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1041], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1042], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1043], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1044], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1045], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1046], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1047], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1048], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1049], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1050], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1051], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1052], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1053], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1054], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1055], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1056], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1057], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1058], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1059], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1060], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1061], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1062], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1063], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1064], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1065], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1066], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1067], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1068], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1069], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1070], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1071], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1072], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1073], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1074], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1075], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1076], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1077], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1078], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1079], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1080], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1081], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1082], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1083], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1084], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1085], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1086], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1087], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1088], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1089], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1090], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1091], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1092], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1093], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1094], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1095], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1096], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1097], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1098], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1099], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[10], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[11], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[12], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[13], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[14], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[15], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[16], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[17], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[18], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[19], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[1], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[20], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[21], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[22], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[23], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[24], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[25], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[26], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[27], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[288], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[289], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[28], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[290], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[291], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[292], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[293], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[294], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[295], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[296], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[297], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[298], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[299], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[29], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[2], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[300], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[301], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[302], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[303], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[304], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[305], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[306], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[307], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[308], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[309], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[30], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[310], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[311], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[312], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[313], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[314], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[315], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[316], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[317], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[318], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[319], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[31], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[320], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[321], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[322], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[323], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[324], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[325], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[326], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[327], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[328], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[329], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[32], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[330], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[331], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[332], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[333], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[334], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[335], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[336], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[337], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[338], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[339], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[33], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[340], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[341], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[342], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[343], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[344], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[345], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[346], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[347], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[348], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[349], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[34], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[350], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[351], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[352], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[353], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[354], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[355], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[356], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[357], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[358], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[359], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[35], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[360], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[361], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[362], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[363], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[364], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[365], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[366], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[367], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[368], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[369], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[36], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[370], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[371], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[372], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[373], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[374], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[375], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[376], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[377], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[378], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[379], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[37], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[380], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[381], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[382], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[383], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[384], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[385], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[386], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[387], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[388], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[389], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[38], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[390], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[391], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[392], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[393], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[394], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[395], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[396], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[397], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[398], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[399], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[39], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[3], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[400], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[401], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[402], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[403], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[404], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[405], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[406], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[407], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[408], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[409], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[40], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[410], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[411], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[412], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[413], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[414], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[415], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[416], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[417], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[418], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[419], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[41], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[420], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[421], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[422], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[423], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[424], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[425], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[426], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[427], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[428], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[429], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[42], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[430], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[431], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[432], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[433], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[434], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[435], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[436], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[437], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[438], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[439], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[43], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[440], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[441], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[442], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[443], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[444], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[445], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[446], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[447], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[448], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[449], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[44], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[450], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[451], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[452], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[453], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[454], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[455], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[456], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[457], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[458], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[459], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[45], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[460], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[461], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[462], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[463], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[464], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[465], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[466], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[467], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[468], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[469], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[46], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[470], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[471], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[472], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[473], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[474], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[475], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[476], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[477], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[478], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[479], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[47], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[480], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[481], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[482], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[483], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[484], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[485], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[486], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[487], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[488], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[489], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[48], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[490], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[491], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[492], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[493], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[494], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[495], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[496], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[497], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[498], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[499], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[49], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[4], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[500], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[501], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[502], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[503], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[504], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[505], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[506], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[507], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[508], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[509], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[50], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[510], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[511], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[512], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[513], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[514], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[515], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[516], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[517], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[518], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[519], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[51], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[520], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[521], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[522], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[523], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[524], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[525], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[526], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[527], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[528], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[529], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[52], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[530], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[531], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[532], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[533], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[534], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[535], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[536], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[537], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[538], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[539], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[53], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[540], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[541], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[542], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[543], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[544], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[545], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[546], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[547], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[548], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[549], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[54], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[550], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[551], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[552], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[553], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[554], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[555], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[556], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[557], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[558], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[559], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[55], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[560], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[561], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[562], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[563], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[564], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[565], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[566], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[567], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[568], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[569], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[56], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[570], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[571], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[572], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[573], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[574], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[575], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[576], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[577], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[578], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[579], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[57], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[580], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[581], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[582], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[583], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[584], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[585], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[586], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[587], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[588], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[589], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[58], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[590], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[591], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[592], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[593], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[594], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[595], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[596], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[597], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[598], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[599], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[59], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[5], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[600], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[601], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[602], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[603], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[604], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[605], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[606], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[607], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[608], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[609], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[60], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[610], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[611], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[612], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[613], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[614], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[615], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[616], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[617], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[618], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[619], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[61], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[620], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[621], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[622], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[623], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[624], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[625], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[626], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[627], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[628], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[629], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[62], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[630], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[631], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[632], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[633], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[634], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[635], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[636], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[637], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[638], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[639], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[63], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[640], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[641], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[642], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[643], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[644], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[645], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[646], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[647], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[648], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[649], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[64], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[650], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[651], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[652], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[653], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[654], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[655], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[656], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[657], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[658], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[659], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[65], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[660], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[661], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[662], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[663], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[664], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[665], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[666], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[667], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[668], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[669], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[66], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[670], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[671], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[672], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[673], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[674], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[675], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[676], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[677], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[678], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[679], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[67], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[680], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[681], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[682], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[683], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[684], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[685], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[686], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[687], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[688], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[689], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[68], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[690], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[691], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[692], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[693], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[694], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[695], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[696], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[697], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[698], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[699], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[69], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[6], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[700], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[701], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[702], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[703], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[704], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[705], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[706], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[707], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[708], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[709], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[70], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[710], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[711], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[712], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[713], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[714], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[715], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[716], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[717], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[718], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[719], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[71], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[720], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[721], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[722], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[723], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[724], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[725], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[726], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[727], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[728], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[729], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[72], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[730], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[731], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[732], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[733], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[734], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[735], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[736], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[737], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[738], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[739], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[73], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[740], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[741], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[742], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[743], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[744], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[745], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[746], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[747], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[748], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[749], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[74], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[750], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[751], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[752], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[753], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[754], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[755], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[756], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[757], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[758], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[759], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[75], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[760], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[761], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[762], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[763], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[764], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[765], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[766], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[767], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[768], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[769], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[76], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[770], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[771], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[772], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[773], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[774], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[775], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[776], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[777], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[778], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[779], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[77], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[780], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[781], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[782], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[783], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[784], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[785], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[786], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[787], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[788], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[789], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[78], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[790], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[791], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[792], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[793], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[794], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[795], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[796], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[797], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[798], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[799], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[79], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[7], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[800], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[801], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[802], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[803], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[804], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[805], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[806], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[807], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[808], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[809], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[80], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[810], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[811], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[812], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[813], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[814], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[815], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[816], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[817], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[818], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[819], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[81], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[820], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[821], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[822], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[823], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[824], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[825], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[826], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[827], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[828], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[829], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[82], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[830], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[831], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[832], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[833], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[834], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[835], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[836], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[837], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[838], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[839], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[83], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[840], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[841], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[842], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[843], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[844], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[845], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[846], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[847], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[848], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[849], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[84], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[850], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[851], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[852], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[853], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[854], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[855], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[856], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[857], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[858], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[859], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[85], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[860], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[861], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[862], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[863], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[864], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[865], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[866], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[867], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[868], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[869], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[86], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[870], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[871], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[872], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[873], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[874], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[875], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[876], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[877], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[878], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[879], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[87], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[880], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[881], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[882], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[883], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[884], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[885], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[886], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[887], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[888], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[889], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[88], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[890], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[891], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[892], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[893], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[894], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[895], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[896], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[897], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[898], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[899], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[89], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[8], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[900], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[901], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[902], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[903], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[904], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[905], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[906], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[907], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[908], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[909], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[90], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[910], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[911], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[912], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[913], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[914], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[915], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[916], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[917], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[918], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[919], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[91], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[920], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[921], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[922], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[923], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[924], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[925], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[926], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[927], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[928], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[929], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[92], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[930], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[931], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[932], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[933], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[934], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[935], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[936], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[937], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[938], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[939], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[93], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[940], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[941], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[942], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[943], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[944], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[945], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[946], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[947], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[948], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[949], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[94], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[950], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[951], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[952], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[953], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[954], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[955], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[956], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[957], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[958], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[959], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[95], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[960], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[961], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[962], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[963], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[964], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[965], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[966], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[967], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[968], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[969], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[96], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[970], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[971], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[972], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[973], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[974], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[975], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[976], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[977], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[978], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[979], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[97], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[980], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[981], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[982], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[983], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[984], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[985], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[986], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[987], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[988], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[989], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[98], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[990], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[991], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[992], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[993], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[994], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[995], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[996], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[997], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[998], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[999], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[99], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH1[9], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[0], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1000], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1001], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1002], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1003], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1004], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1005], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1006], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1007], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1008], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1009], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1010], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1011], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1012], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1013], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1014], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1015], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1016], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1017], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1018], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1019], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1020], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1021], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1022], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1023], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1024], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1025], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1026], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1027], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1028], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1029], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1030], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1031], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1032], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1033], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1034], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1035], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1036], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1037], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1038], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1039], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1040], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1041], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1042], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1043], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1044], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1045], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1046], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1047], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1048], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1049], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1050], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1051], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1052], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1053], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1054], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1055], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1056], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1057], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1058], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1059], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1060], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1061], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1062], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1063], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1064], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1065], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1066], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1067], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1068], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1069], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1070], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1071], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1072], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1073], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1074], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1075], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1076], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1077], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1078], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1079], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1080], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1081], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1082], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1083], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1084], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1085], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1086], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1087], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1088], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1089], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1090], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1091], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1092], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1093], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1094], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1095], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1096], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1097], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1098], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1099], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[10], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[11], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[12], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[13], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[14], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[15], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[16], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[17], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[18], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[19], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[1], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[20], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[21], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[22], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[23], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[24], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[25], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[26], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[27], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[288], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[289], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[28], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[290], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[291], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[292], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[293], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[294], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[295], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[296], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[297], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[298], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[299], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[29], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[2], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[300], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[301], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[302], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[303], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[304], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[305], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[306], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[307], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[308], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[309], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[30], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[310], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[311], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[312], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[313], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[314], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[315], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[316], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[317], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[318], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[319], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[31], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[320], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[321], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[322], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[323], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[324], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[325], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[326], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[327], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[328], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[329], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[32], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[330], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[331], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[332], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[333], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[334], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[335], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[336], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[337], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[338], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[339], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[33], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[340], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[341], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[342], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[343], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[344], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[345], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[346], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[347], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[348], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[349], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[34], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[350], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[351], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[352], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[353], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[354], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[355], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[356], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[357], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[358], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[359], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[35], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[360], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[361], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[362], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[363], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[364], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[365], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[366], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[367], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[368], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[369], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[36], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[370], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[371], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[372], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[373], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[374], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[375], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[376], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[377], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[378], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[379], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[37], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[380], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[381], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[382], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[383], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[384], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[385], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[386], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[387], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[388], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[389], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[38], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[390], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[391], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[392], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[393], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[394], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[395], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[396], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[397], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[398], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[399], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[39], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[3], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[400], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[401], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[402], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[403], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[404], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[405], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[406], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[407], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[408], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[409], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[40], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[410], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[411], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[412], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[413], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[414], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[415], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[416], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[417], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[418], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[419], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[41], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[420], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[421], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[422], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[423], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[424], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[425], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[426], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[427], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[428], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[429], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[42], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[430], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[431], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[432], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[433], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[434], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[435], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[436], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[437], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[438], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[439], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[43], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[440], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[441], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[442], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[443], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[444], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[445], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[446], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[447], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[448], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[449], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[44], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[450], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[451], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[452], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[453], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[454], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[455], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[456], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[457], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[458], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[459], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[45], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[460], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[461], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[462], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[463], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[464], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[465], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[466], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[467], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[468], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[469], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[46], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[470], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[471], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[472], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[473], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[474], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[475], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[476], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[477], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[478], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[479], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[47], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[480], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[481], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[482], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[483], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[484], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[485], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[486], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[487], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[488], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[489], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[48], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[490], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[491], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[492], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[493], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[494], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[495], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[496], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[497], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[498], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[499], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[49], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[4], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[500], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[501], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[502], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[503], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[504], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[505], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[506], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[507], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[508], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[509], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[50], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[510], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[511], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[512], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[513], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[514], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[515], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[516], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[517], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[518], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[519], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[51], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[520], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[521], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[522], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[523], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[524], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[525], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[526], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[527], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[528], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[529], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[52], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[530], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[531], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[532], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[533], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[534], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[535], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[536], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[537], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[538], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[539], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[53], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[540], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[541], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[542], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[543], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[544], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[545], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[546], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[547], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[548], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[549], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[54], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[550], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[551], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[552], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[553], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[554], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[555], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[556], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[557], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[558], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[559], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[55], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[560], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[561], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[562], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[563], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[564], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[565], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[566], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[567], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[568], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[569], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[56], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[570], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[571], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[572], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[573], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[574], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[575], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[576], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[577], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[578], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[579], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[57], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[580], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[581], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[582], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[583], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[584], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[585], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[586], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[587], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[588], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[589], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[58], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[590], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[591], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[592], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[593], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[594], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[595], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[596], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[597], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[598], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[599], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[59], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[5], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[600], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[601], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[602], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[603], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[604], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[605], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[606], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[607], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[608], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[609], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[60], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[610], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[611], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[612], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[613], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[614], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[615], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[616], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[617], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[618], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[619], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[61], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[620], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[621], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[622], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[623], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[624], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[625], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[626], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[627], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[628], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[629], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[62], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[630], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[631], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[632], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[633], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[634], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[635], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[636], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[637], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[638], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[639], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[63], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[640], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[641], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[642], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[643], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[644], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[645], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[646], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[647], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[648], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[649], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[64], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[650], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[651], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[652], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[653], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[654], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[655], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[656], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[657], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[658], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[659], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[65], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[660], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[661], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[662], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[663], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[664], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[665], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[666], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[667], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[668], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[669], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[66], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[670], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[671], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[672], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[673], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[674], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[675], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[676], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[677], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[678], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[679], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[67], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[680], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[681], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[682], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[683], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[684], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[685], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[686], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[687], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[688], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[689], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[68], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[690], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[691], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[692], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[693], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[694], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[695], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[696], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[697], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[698], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[699], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[69], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[6], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[700], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[701], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[702], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[703], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[704], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[705], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[706], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[707], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[708], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[709], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[70], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[710], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[711], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[712], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[713], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[714], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[715], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[716], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[717], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[718], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[719], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[71], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[720], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[721], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[722], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[723], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[724], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[725], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[726], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[727], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[728], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[729], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[72], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[730], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[731], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[732], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[733], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[734], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[735], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[736], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[737], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[738], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[739], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[73], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[740], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[741], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[742], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[743], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[744], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[745], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[746], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[747], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[748], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[749], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[74], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[750], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[751], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[752], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[753], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[754], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[755], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[756], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[757], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[758], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[759], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[75], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[760], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[761], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[762], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[763], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[764], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[765], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[766], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[767], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[768], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[769], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[76], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[770], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[771], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[772], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[773], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[774], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[775], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[776], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[777], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[778], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[779], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[77], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[780], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[781], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[782], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[783], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[784], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[785], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[786], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[787], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[788], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[789], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[78], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[790], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[791], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[792], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[793], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[794], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[795], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[796], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[797], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[798], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[799], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[79], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[7], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[800], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[801], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[802], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[803], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[804], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[805], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[806], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[807], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[808], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[809], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[80], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[810], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[811], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[812], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[813], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[814], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[815], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[816], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[817], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[818], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[819], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[81], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[820], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[821], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[822], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[823], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[824], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[825], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[826], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[827], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[828], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[829], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[82], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[830], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[831], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[832], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[833], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[834], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[835], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[836], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[837], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[838], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[839], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[83], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[840], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[841], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[842], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[843], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[844], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[845], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[846], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[847], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[848], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[849], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[84], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[850], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[851], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[852], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[853], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[854], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[855], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[856], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[857], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[858], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[859], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[85], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[860], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[861], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[862], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[863], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[864], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[865], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[866], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[867], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[868], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[869], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[86], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[870], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[871], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[872], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[873], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[874], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[875], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[876], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[877], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[878], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[879], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[87], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[880], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[881], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[882], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[883], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[884], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[885], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[886], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[887], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[888], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[889], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[88], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[890], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[891], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[892], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[893], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[894], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[895], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[896], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[897], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[898], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[899], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[89], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[8], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[900], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[901], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[902], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[903], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[904], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[905], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[906], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[907], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[908], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[909], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[90], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[910], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[911], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[912], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[913], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[914], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[915], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[916], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[917], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[918], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[919], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[91], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[920], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[921], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[922], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[923], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[924], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[925], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[926], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[927], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[928], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[929], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[92], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[930], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[931], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[932], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[933], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[934], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[935], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[936], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[937], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[938], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[939], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[93], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[940], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[941], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[942], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[943], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[944], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[945], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[946], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[947], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[948], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[949], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[94], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[950], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[951], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[952], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[953], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[954], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[955], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[956], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[957], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[958], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[959], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[95], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[960], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[961], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[962], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[963], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[964], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[965], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[966], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[967], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[968], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[969], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[96], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[970], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[971], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[972], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[973], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[974], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[975], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[976], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[977], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[978], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[979], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[97], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[980], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[981], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[982], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[983], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[984], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[985], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[986], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[987], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[988], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[989], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[98], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[990], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[991], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[992], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[993], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[994], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[995], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[996], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[997], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[998], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[999], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[99], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH2[9], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[0], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1000], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1001], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1002], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1003], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1004], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1005], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1006], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1007], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1008], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1009], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1010], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1011], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1012], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1013], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1014], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1015], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1016], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1017], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1018], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1019], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1020], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1021], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1022], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1023], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1024], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1025], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1026], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1027], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1028], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1029], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1030], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1031], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1032], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1033], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1034], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1035], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1036], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1037], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1038], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1039], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1040], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1041], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1042], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1043], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1044], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1045], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1046], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1047], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1048], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1049], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1050], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1051], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1052], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1053], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1054], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1055], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1056], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1057], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1058], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1059], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1060], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1061], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1062], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1063], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1064], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1065], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1066], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1067], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1068], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1069], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1070], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1071], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1072], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1073], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1074], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1075], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1076], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1077], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1078], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1079], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1080], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1081], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1082], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1083], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1084], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1085], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1086], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1087], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1088], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1089], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1090], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1091], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1092], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1093], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1094], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1095], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1096], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1097], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1098], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1099], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[10], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1100], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1101], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1102], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1103], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1104], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1105], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1106], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1107], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1108], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1109], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1110], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[111], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[112], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[113], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[114], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[115], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[116], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[117], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[118], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[119], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[11], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[120], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[121], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[122], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[123], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[124], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[125], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[126], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[127], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[128], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[129], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[12], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[130], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[131], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[132], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[133], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[134], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[135], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[136], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[137], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[138], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[139], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[13], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[140], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[141], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[142], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[143], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[144], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[145], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[146], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[147], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[148], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[149], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[14], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[150], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[151], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[152], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[153], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[154], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[155], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[156], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[157], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[158], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[159], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[15], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[160], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[161], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[162], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[163], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[164], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[165], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[166], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[167], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[168], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[169], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[16], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[170], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[171], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[172], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[173], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[174], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[175], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[176], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[177], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[178], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[179], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[17], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[180], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[181], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[182], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[183], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[184], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[185], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[186], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[187], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[188], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[189], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[18], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[190], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[191], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[192], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[193], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[194], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[195], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[196], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[197], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[198], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[199], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[19], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[1], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[200], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[201], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[202], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[203], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[204], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[205], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[206], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[207], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[208], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[209], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[20], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[210], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[211], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[212], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[213], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[214], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[215], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[216], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[217], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[218], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[219], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[21], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[220], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[221], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[222], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[223], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[224], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[225], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[226], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[227], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[228], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[229], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[22], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[230], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[231], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[232], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[233], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[234], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[235], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[236], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[237], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[238], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[239], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[23], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[240], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[241], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[242], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[243], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[244], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[245], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[246], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[247], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[248], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[249], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[24], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[250], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[251], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[252], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[253], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[254], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[255], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[256], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[257], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[258], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[259], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[25], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[260], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[261], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[262], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[263], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[264], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[265], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[266], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[267], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[268], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[269], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[26], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[270], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[271], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[272], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[273], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[274], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[275], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[276], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[277], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[278], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[279], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[27], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[280], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[281], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[282], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[283], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[284], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[285], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[286], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[287], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[288], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[289], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[28], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[290], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[291], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[292], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[293], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[294], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[295], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[296], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[297], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[298], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[299], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[29], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[2], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[300], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[301], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[302], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[303], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[304], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[305], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[306], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[307], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[308], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[309], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[30], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[310], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[311], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[312], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[313], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[314], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[315], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[316], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[317], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[318], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[319], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[31], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[320], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[321], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[322], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[323], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[324], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[325], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[326], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[327], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[328], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[329], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[32], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[330], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[331], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[332], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[333], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[334], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[335], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[336], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[337], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[338], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[339], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[33], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[340], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[341], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[342], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[343], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[344], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[345], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[346], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[347], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[348], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[349], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[34], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[350], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[351], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[352], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[353], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[354], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[355], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[356], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[357], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[358], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[359], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[35], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[360], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[361], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[362], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[363], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[364], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[365], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[366], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[367], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[368], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[369], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[36], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[370], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[371], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[372], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[373], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[374], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[375], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[376], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[377], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[378], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[379], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[37], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[380], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[381], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[382], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[383], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[384], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[385], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[386], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[387], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[388], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[389], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[38], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[390], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[391], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[392], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[393], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[394], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[395], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[396], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[397], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[398], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[399], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[39], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[3], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[400], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[401], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[402], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[403], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[404], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[405], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[406], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[407], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[408], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[409], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[40], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[410], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[411], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[412], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[413], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[414], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[415], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[416], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[417], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[418], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[419], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[41], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[420], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[421], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[422], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[423], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[424], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[425], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[426], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[427], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[428], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[429], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[42], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[430], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[431], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[432], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[433], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[434], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[435], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[436], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[437], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[438], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[439], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[43], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[440], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[441], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[442], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[443], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[444], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[445], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[446], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[447], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[448], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[449], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[44], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[450], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[451], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[452], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[453], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[454], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[455], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[456], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[457], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[458], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[459], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[45], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[460], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[461], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[462], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[463], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[464], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[465], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[466], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[467], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[468], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[469], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[46], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[470], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[471], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[472], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[473], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[474], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[475], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[476], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[477], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[478], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[479], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[47], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[480], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[481], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[482], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[483], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[484], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[485], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[486], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[487], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[488], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[489], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[48], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[490], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[491], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[492], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[493], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[494], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[495], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[496], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[497], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[498], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[499], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[49], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[4], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[500], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[501], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[502], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[503], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[504], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[505], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[506], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[507], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[508], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[509], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[50], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[510], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[511], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[512], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[513], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[514], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[515], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[516], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[517], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[518], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[519], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[51], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[520], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[521], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[522], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[523], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[524], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[525], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[526], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[527], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[528], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[529], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[52], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[530], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[531], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[532], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[533], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[534], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[535], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[536], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[537], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[538], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[539], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[53], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[540], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[541], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[542], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[543], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[544], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[545], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[546], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[547], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[548], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[549], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[54], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[550], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[551], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[552], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[553], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[554], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[555], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[556], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[557], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[558], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[559], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[55], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[560], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[561], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[562], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[563], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[564], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[565], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[566], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[567], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[568], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[569], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[56], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[570], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[571], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[572], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[573], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[574], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[575], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[576], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[577], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[578], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[579], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[57], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[580], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[581], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[582], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[583], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[584], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[585], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[586], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[587], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[588], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[589], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[58], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[590], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[591], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[592], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[593], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[594], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[595], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[596], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[597], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[598], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[599], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[59], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[5], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[600], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[601], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[602], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[603], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[604], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[605], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[606], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[607], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[608], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[609], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[60], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[610], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[611], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[612], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[613], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[614], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[615], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[616], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[617], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[618], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[619], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[61], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[620], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[621], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[622], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[623], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[624], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[625], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[626], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[627], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[628], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[629], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[62], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[630], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[631], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[632], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[633], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[634], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[635], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[636], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[637], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[638], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[639], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[63], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[640], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[641], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[642], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[643], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[644], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[645], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[646], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[647], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[648], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[649], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[64], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[650], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[651], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[652], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[653], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[654], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[655], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[656], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[657], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[658], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[659], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[65], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[660], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[661], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[662], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[663], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[664], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[665], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[666], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[667], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[668], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[669], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[66], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[670], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[671], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[672], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[673], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[674], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[675], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[676], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[677], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[678], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[679], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[67], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[680], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[681], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[682], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[683], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[684], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[685], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[686], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[687], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[688], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[689], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[68], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[690], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[691], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[692], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[693], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[694], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[695], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[696], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[697], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[698], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[699], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[69], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[6], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[700], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[701], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[702], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[703], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[704], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[705], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[706], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[707], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[708], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[709], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[70], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[710], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[711], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[712], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[713], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[714], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[715], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[716], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[717], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[718], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[719], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[71], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[720], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[721], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[722], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[723], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[724], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[725], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[726], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[727], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[728], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[729], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[72], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[730], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[731], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[732], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[733], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[734], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[735], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[736], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[737], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[738], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[739], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[73], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[740], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[741], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[742], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[743], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[744], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[745], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[746], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[747], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[748], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[749], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[74], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[750], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[751], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[752], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[753], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[754], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[755], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[756], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[757], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[758], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[759], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[75], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[760], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[761], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[762], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[763], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[764], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[765], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[766], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[767], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[768], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[769], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[76], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[770], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[771], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[772], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[773], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[774], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[775], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[776], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[777], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[778], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[779], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[77], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[780], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[781], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[782], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[783], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[784], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[785], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[786], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[787], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[788], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[789], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[78], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[790], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[791], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[792], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[793], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[794], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[795], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[796], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[797], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[798], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[799], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[79], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[7], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[800], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[801], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[802], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[803], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[804], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[805], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[806], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[807], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[808], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[809], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[80], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[810], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[811], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[812], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[813], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[814], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[815], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[816], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[817], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[818], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[819], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[81], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[820], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[821], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[822], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[823], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[824], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[825], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[826], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[827], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[828], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[829], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[82], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[830], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[831], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[832], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[833], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[834], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[835], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[836], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[837], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[838], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[839], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[83], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[840], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[841], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[842], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[843], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[844], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[845], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[846], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[847], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[848], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[849], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[84], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[850], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[851], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[852], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[853], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[854], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[855], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[856], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[857], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[858], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[859], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[85], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[860], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[861], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[862], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[863], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[864], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[865], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[866], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[867], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[868], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[869], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[86], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[870], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[871], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[872], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[873], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[874], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[875], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[876], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[877], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[878], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[879], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[87], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[880], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[881], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[882], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[883], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[884], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[885], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[886], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[887], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[888], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[889], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[88], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[890], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[891], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[892], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[893], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[894], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[895], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[896], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[897], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[898], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[899], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[89], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[8], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[900], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[901], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[902], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[903], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[904], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[905], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[906], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[907], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[908], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[909], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[90], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[910], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[911], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[912], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[913], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[914], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[915], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[916], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[917], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[918], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[919], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[91], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[920], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[921], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[922], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[923], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[924], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[925], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[926], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[927], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[928], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[929], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[92], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[930], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[931], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[932], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[933], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[934], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[935], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[936], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[937], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[938], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[939], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[93], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[940], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[941], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[942], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[943], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[944], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[945], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[946], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[947], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[948], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[949], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[94], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[950], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[951], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[952], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[953], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[954], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[955], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[956], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[957], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[958], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[959], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[95], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[960], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[961], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[962], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[963], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[964], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[965], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[966], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[967], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[968], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[969], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[96], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[970], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[971], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[972], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[973], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[974], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[975], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[976], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[977], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[978], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[979], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[97], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[980], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[981], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[982], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[983], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[984], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[985], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[986], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[987], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[988], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[989], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[98], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[990], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[991], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[992], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[993], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[994], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[995], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[996], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[997], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[998], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[999], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[99], +mem,SCH_DEVICE_RATE_MEMORY_DRM.SCH3[9], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[0], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1000], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1001], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1002], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1003], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1004], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1005], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1006], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1007], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1008], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1009], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1010], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1011], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1012], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1013], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1014], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1015], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1016], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1017], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1018], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1019], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1020], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1021], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1022], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1023], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1024], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1025], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1026], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1027], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1028], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1029], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1030], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1031], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1032], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1033], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1034], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1035], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1036], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1037], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1038], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1039], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1040], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1041], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1042], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1043], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1044], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1045], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1046], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1047], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1048], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1049], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1050], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1051], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1052], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1053], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1054], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1055], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1056], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1057], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1058], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1059], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1060], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1061], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1062], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1063], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1064], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1065], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1066], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1067], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1068], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1069], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1070], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1071], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1072], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1073], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1074], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1075], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1076], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1077], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1078], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1079], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1080], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1081], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1082], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1083], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1084], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1085], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1086], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1087], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1088], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1089], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1090], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1091], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1092], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1093], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1094], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1095], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1096], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1097], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1098], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1099], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[10], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[11], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[12], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[13], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[14], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[15], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[16], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[17], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[18], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[19], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[1], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[20], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[21], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[22], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[23], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[24], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[25], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[26], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[27], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[288], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[289], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[28], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[290], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[291], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[292], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[293], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[294], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[295], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[296], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[297], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[298], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[299], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[29], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[2], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[300], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[301], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[302], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[303], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[304], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[305], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[306], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[307], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[308], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[309], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[30], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[310], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[311], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[312], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[313], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[314], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[315], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[316], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[317], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[318], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[319], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[31], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[320], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[321], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[322], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[323], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[324], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[325], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[326], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[327], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[328], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[329], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[32], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[330], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[331], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[332], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[333], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[334], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[335], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[336], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[337], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[338], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[339], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[33], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[340], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[341], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[342], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[343], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[344], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[345], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[346], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[347], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[348], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[349], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[34], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[350], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[351], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[352], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[353], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[354], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[355], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[356], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[357], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[358], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[359], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[35], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[360], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[361], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[362], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[363], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[364], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[365], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[366], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[367], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[368], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[369], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[36], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[370], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[371], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[372], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[373], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[374], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[375], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[376], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[377], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[378], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[379], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[37], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[380], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[381], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[382], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[383], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[384], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[385], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[386], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[387], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[388], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[389], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[38], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[390], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[391], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[392], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[393], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[394], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[395], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[396], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[397], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[398], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[399], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[39], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[3], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[400], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[401], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[402], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[403], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[404], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[405], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[406], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[407], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[408], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[409], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[40], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[410], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[411], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[412], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[413], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[414], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[415], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[416], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[417], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[418], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[419], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[41], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[420], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[421], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[422], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[423], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[424], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[425], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[426], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[427], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[428], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[429], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[42], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[430], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[431], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[432], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[433], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[434], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[435], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[436], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[437], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[438], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[439], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[43], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[440], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[441], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[442], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[443], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[444], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[445], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[446], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[447], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[448], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[449], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[44], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[450], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[451], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[452], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[453], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[454], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[455], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[456], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[457], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[458], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[459], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[45], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[460], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[461], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[462], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[463], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[464], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[465], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[466], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[467], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[468], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[469], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[46], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[470], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[471], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[472], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[473], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[474], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[475], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[476], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[477], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[478], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[479], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[47], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[480], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[481], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[482], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[483], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[484], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[485], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[486], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[487], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[488], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[489], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[48], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[490], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[491], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[492], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[493], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[494], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[495], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[496], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[497], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[498], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[499], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[49], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[4], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[500], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[501], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[502], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[503], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[504], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[505], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[506], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[507], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[508], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[509], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[50], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[510], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[511], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[512], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[513], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[514], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[515], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[516], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[517], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[518], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[519], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[51], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[520], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[521], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[522], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[523], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[524], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[525], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[526], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[527], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[528], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[529], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[52], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[530], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[531], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[532], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[533], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[534], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[535], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[536], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[537], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[538], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[539], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[53], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[540], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[541], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[542], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[543], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[544], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[545], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[546], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[547], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[548], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[549], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[54], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[550], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[551], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[552], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[553], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[554], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[555], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[556], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[557], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[558], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[559], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[55], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[560], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[561], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[562], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[563], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[564], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[565], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[566], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[567], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[568], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[569], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[56], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[570], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[571], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[572], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[573], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[574], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[575], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[576], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[577], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[578], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[579], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[57], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[580], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[581], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[582], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[583], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[584], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[585], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[586], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[587], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[588], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[589], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[58], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[590], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[591], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[592], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[593], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[594], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[595], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[596], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[597], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[598], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[599], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[59], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[5], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[600], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[601], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[602], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[603], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[604], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[605], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[606], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[607], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[608], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[609], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[60], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[610], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[611], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[612], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[613], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[614], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[615], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[616], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[617], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[618], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[619], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[61], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[620], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[621], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[622], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[623], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[624], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[625], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[626], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[627], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[628], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[629], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[62], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[630], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[631], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[632], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[633], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[634], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[635], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[636], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[637], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[638], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[639], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[63], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[640], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[641], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[642], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[643], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[644], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[645], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[646], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[647], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[648], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[649], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[64], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[650], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[651], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[652], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[653], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[654], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[655], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[656], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[657], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[658], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[659], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[65], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[660], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[661], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[662], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[663], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[664], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[665], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[666], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[667], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[668], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[669], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[66], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[670], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[671], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[672], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[673], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[674], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[675], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[676], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[677], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[678], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[679], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[67], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[680], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[681], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[682], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[683], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[684], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[685], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[686], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[687], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[688], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[689], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[68], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[690], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[691], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[692], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[693], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[694], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[695], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[696], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[697], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[698], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[699], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[69], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[6], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[700], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[701], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[702], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[703], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[704], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[705], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[706], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[707], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[708], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[709], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[70], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[710], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[711], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[712], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[713], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[714], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[715], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[716], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[717], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[718], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[719], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[71], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[720], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[721], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[722], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[723], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[724], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[725], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[726], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[727], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[728], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[729], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[72], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[730], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[731], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[732], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[733], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[734], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[735], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[736], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[737], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[738], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[739], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[73], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[740], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[741], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[742], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[743], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[744], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[745], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[746], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[747], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[748], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[749], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[74], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[750], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[751], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[752], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[753], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[754], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[755], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[756], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[757], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[758], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[759], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[75], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[760], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[761], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[762], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[763], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[764], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[765], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[766], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[767], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[768], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[769], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[76], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[770], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[771], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[772], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[773], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[774], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[775], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[776], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[777], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[778], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[779], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[77], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[780], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[781], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[782], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[783], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[784], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[785], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[786], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[787], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[788], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[789], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[78], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[790], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[791], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[792], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[793], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[794], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[795], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[796], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[797], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[798], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[799], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[79], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[7], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[800], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[801], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[802], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[803], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[804], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[805], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[806], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[807], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[808], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[809], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[80], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[810], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[811], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[812], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[813], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[814], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[815], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[816], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[817], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[818], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[819], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[81], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[820], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[821], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[822], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[823], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[824], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[825], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[826], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[827], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[828], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[829], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[82], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[830], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[831], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[832], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[833], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[834], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[835], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[836], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[837], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[838], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[839], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[83], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[840], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[841], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[842], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[843], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[844], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[845], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[846], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[847], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[848], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[849], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[84], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[850], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[851], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[852], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[853], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[854], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[855], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[856], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[857], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[858], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[859], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[85], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[860], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[861], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[862], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[863], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[864], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[865], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[866], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[867], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[868], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[869], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[86], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[870], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[871], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[872], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[873], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[874], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[875], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[876], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[877], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[878], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[879], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[87], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[880], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[881], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[882], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[883], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[884], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[885], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[886], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[887], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[888], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[889], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[88], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[890], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[891], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[892], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[893], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[894], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[895], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[896], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[897], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[898], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[899], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[89], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[8], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[900], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[901], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[902], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[903], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[904], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[905], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[906], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[907], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[908], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[909], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[90], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[910], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[911], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[912], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[913], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[914], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[915], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[916], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[917], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[918], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[919], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[91], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[920], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[921], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[922], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[923], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[924], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[925], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[926], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[927], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[928], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[929], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[92], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[930], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[931], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[932], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[933], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[934], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[935], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[936], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[937], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[938], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[939], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[93], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[940], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[941], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[942], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[943], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[944], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[945], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[946], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[947], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[948], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[949], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[94], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[950], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[951], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[952], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[953], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[954], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[955], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[956], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[957], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[958], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[959], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[95], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[960], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[961], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[962], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[963], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[964], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[965], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[966], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[967], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[968], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[969], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[96], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[970], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[971], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[972], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[973], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[974], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[975], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[976], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[977], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[978], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[979], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[97], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[980], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[981], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[982], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[983], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[984], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[985], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[986], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[987], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[988], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[989], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[98], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[990], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[991], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[992], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[993], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[994], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[995], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[996], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[997], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[998], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[999], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[99], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH0[9], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[0], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1000], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1001], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1002], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1003], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1004], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1005], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1006], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1007], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1008], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1009], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1010], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1011], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1012], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1013], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1014], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1015], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1016], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1017], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1018], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1019], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1020], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1021], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1022], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1023], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1024], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1025], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1026], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1027], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1028], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1029], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1030], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1031], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1032], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1033], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1034], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1035], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1036], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1037], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1038], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1039], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1040], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1041], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1042], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1043], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1044], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1045], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1046], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1047], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1048], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1049], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1050], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1051], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1052], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1053], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1054], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1055], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1056], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1057], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1058], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1059], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1060], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1061], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1062], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1063], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1064], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1065], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1066], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1067], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1068], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1069], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1070], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1071], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1072], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1073], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1074], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1075], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1076], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1077], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1078], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1079], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1080], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1081], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1082], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1083], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1084], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1085], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1086], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1087], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1088], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1089], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1090], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1091], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1092], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1093], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1094], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1095], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1096], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1097], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1098], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1099], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[10], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[11], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[12], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[13], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[14], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[15], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[16], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[17], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[18], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[19], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[1], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[20], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[21], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[22], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[23], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[24], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[25], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[26], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[27], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[288], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[289], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[28], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[290], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[291], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[292], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[293], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[294], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[295], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[296], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[297], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[298], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[299], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[29], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[2], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[300], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[301], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[302], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[303], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[304], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[305], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[306], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[307], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[308], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[309], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[30], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[310], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[311], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[312], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[313], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[314], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[315], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[316], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[317], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[318], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[319], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[31], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[320], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[321], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[322], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[323], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[324], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[325], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[326], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[327], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[328], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[329], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[32], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[330], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[331], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[332], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[333], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[334], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[335], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[336], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[337], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[338], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[339], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[33], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[340], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[341], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[342], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[343], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[344], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[345], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[346], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[347], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[348], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[349], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[34], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[350], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[351], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[352], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[353], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[354], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[355], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[356], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[357], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[358], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[359], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[35], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[360], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[361], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[362], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[363], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[364], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[365], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[366], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[367], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[368], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[369], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[36], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[370], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[371], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[372], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[373], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[374], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[375], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[376], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[377], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[378], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[379], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[37], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[380], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[381], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[382], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[383], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[384], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[385], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[386], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[387], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[388], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[389], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[38], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[390], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[391], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[392], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[393], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[394], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[395], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[396], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[397], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[398], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[399], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[39], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[3], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[400], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[401], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[402], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[403], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[404], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[405], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[406], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[407], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[408], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[409], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[40], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[410], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[411], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[412], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[413], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[414], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[415], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[416], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[417], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[418], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[419], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[41], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[420], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[421], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[422], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[423], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[424], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[425], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[426], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[427], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[428], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[429], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[42], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[430], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[431], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[432], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[433], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[434], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[435], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[436], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[437], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[438], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[439], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[43], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[440], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[441], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[442], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[443], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[444], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[445], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[446], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[447], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[448], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[449], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[44], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[450], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[451], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[452], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[453], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[454], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[455], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[456], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[457], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[458], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[459], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[45], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[460], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[461], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[462], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[463], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[464], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[465], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[466], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[467], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[468], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[469], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[46], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[470], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[471], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[472], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[473], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[474], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[475], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[476], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[477], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[478], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[479], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[47], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[480], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[481], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[482], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[483], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[484], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[485], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[486], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[487], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[488], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[489], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[48], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[490], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[491], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[492], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[493], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[494], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[495], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[496], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[497], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[498], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[499], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[49], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[4], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[500], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[501], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[502], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[503], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[504], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[505], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[506], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[507], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[508], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[509], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[50], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[510], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[511], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[512], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[513], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[514], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[515], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[516], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[517], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[518], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[519], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[51], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[520], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[521], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[522], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[523], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[524], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[525], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[526], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[527], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[528], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[529], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[52], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[530], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[531], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[532], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[533], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[534], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[535], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[536], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[537], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[538], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[539], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[53], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[540], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[541], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[542], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[543], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[544], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[545], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[546], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[547], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[548], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[549], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[54], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[550], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[551], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[552], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[553], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[554], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[555], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[556], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[557], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[558], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[559], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[55], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[560], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[561], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[562], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[563], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[564], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[565], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[566], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[567], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[568], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[569], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[56], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[570], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[571], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[572], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[573], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[574], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[575], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[576], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[577], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[578], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[579], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[57], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[580], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[581], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[582], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[583], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[584], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[585], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[586], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[587], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[588], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[589], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[58], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[590], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[591], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[592], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[593], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[594], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[595], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[596], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[597], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[598], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[599], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[59], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[5], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[600], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[601], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[602], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[603], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[604], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[605], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[606], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[607], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[608], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[609], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[60], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[610], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[611], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[612], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[613], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[614], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[615], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[616], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[617], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[618], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[619], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[61], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[620], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[621], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[622], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[623], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[624], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[625], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[626], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[627], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[628], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[629], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[62], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[630], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[631], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[632], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[633], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[634], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[635], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[636], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[637], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[638], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[639], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[63], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[640], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[641], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[642], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[643], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[644], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[645], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[646], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[647], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[648], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[649], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[64], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[650], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[651], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[652], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[653], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[654], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[655], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[656], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[657], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[658], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[659], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[65], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[660], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[661], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[662], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[663], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[664], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[665], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[666], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[667], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[668], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[669], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[66], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[670], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[671], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[672], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[673], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[674], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[675], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[676], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[677], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[678], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[679], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[67], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[680], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[681], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[682], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[683], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[684], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[685], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[686], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[687], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[688], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[689], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[68], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[690], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[691], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[692], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[693], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[694], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[695], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[696], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[697], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[698], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[699], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[69], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[6], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[700], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[701], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[702], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[703], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[704], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[705], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[706], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[707], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[708], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[709], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[70], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[710], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[711], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[712], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[713], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[714], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[715], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[716], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[717], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[718], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[719], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[71], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[720], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[721], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[722], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[723], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[724], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[725], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[726], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[727], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[728], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[729], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[72], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[730], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[731], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[732], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[733], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[734], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[735], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[736], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[737], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[738], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[739], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[73], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[740], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[741], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[742], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[743], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[744], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[745], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[746], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[747], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[748], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[749], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[74], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[750], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[751], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[752], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[753], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[754], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[755], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[756], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[757], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[758], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[759], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[75], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[760], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[761], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[762], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[763], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[764], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[765], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[766], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[767], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[768], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[769], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[76], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[770], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[771], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[772], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[773], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[774], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[775], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[776], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[777], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[778], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[779], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[77], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[780], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[781], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[782], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[783], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[784], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[785], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[786], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[787], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[788], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[789], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[78], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[790], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[791], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[792], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[793], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[794], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[795], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[796], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[797], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[798], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[799], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[79], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[7], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[800], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[801], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[802], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[803], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[804], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[805], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[806], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[807], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[808], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[809], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[80], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[810], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[811], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[812], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[813], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[814], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[815], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[816], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[817], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[818], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[819], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[81], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[820], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[821], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[822], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[823], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[824], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[825], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[826], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[827], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[828], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[829], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[82], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[830], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[831], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[832], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[833], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[834], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[835], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[836], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[837], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[838], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[839], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[83], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[840], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[841], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[842], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[843], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[844], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[845], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[846], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[847], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[848], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[849], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[84], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[850], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[851], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[852], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[853], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[854], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[855], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[856], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[857], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[858], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[859], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[85], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[860], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[861], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[862], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[863], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[864], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[865], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[866], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[867], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[868], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[869], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[86], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[870], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[871], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[872], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[873], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[874], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[875], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[876], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[877], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[878], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[879], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[87], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[880], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[881], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[882], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[883], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[884], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[885], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[886], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[887], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[888], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[889], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[88], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[890], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[891], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[892], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[893], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[894], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[895], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[896], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[897], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[898], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[899], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[89], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[8], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[900], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[901], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[902], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[903], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[904], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[905], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[906], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[907], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[908], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[909], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[90], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[910], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[911], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[912], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[913], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[914], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[915], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[916], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[917], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[918], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[919], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[91], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[920], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[921], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[922], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[923], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[924], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[925], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[926], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[927], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[928], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[929], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[92], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[930], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[931], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[932], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[933], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[934], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[935], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[936], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[937], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[938], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[939], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[93], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[940], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[941], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[942], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[943], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[944], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[945], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[946], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[947], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[948], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[949], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[94], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[950], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[951], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[952], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[953], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[954], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[955], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[956], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[957], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[958], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[959], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[95], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[960], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[961], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[962], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[963], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[964], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[965], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[966], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[967], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[968], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[969], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[96], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[970], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[971], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[972], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[973], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[974], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[975], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[976], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[977], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[978], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[979], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[97], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[980], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[981], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[982], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[983], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[984], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[985], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[986], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[987], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[988], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[989], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[98], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[990], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[991], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[992], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[993], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[994], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[995], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[996], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[997], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[998], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[999], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[99], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH1[9], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[0], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1000], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1001], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1002], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1003], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1004], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1005], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1006], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1007], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1008], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1009], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1010], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1011], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1012], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1013], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1014], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1015], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1016], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1017], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1018], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1019], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1020], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1021], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1022], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1023], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1024], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1025], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1026], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1027], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1028], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1029], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1030], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1031], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1032], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1033], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1034], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1035], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1036], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1037], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1038], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1039], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1040], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1041], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1042], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1043], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1044], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1045], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1046], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1047], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1048], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1049], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1050], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1051], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1052], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1053], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1054], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1055], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1056], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1057], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1058], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1059], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1060], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1061], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1062], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1063], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1064], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1065], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1066], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1067], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1068], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1069], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1070], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1071], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1072], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1073], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1074], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1075], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1076], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1077], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1078], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1079], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1080], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1081], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1082], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1083], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1084], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1085], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1086], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1087], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1088], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1089], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1090], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1091], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1092], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1093], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1094], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1095], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1096], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1097], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1098], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1099], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[10], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[11], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[12], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[13], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[14], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[15], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[16], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[17], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[18], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[19], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[1], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[20], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[21], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[22], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[23], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[24], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[25], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[26], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[27], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[288], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[289], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[28], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[290], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[291], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[292], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[293], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[294], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[295], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[296], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[297], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[298], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[299], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[29], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[2], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[300], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[301], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[302], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[303], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[304], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[305], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[306], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[307], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[308], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[309], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[30], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[310], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[311], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[312], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[313], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[314], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[315], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[316], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[317], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[318], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[319], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[31], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[320], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[321], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[322], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[323], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[324], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[325], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[326], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[327], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[328], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[329], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[32], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[330], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[331], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[332], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[333], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[334], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[335], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[336], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[337], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[338], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[339], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[33], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[340], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[341], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[342], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[343], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[344], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[345], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[346], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[347], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[348], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[349], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[34], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[350], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[351], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[352], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[353], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[354], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[355], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[356], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[357], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[358], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[359], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[35], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[360], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[361], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[362], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[363], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[364], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[365], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[366], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[367], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[368], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[369], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[36], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[370], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[371], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[372], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[373], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[374], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[375], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[376], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[377], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[378], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[379], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[37], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[380], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[381], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[382], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[383], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[384], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[385], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[386], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[387], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[388], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[389], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[38], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[390], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[391], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[392], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[393], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[394], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[395], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[396], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[397], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[398], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[399], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[39], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[3], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[400], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[401], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[402], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[403], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[404], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[405], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[406], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[407], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[408], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[409], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[40], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[410], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[411], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[412], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[413], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[414], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[415], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[416], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[417], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[418], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[419], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[41], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[420], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[421], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[422], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[423], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[424], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[425], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[426], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[427], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[428], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[429], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[42], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[430], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[431], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[432], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[433], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[434], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[435], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[436], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[437], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[438], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[439], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[43], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[440], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[441], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[442], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[443], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[444], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[445], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[446], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[447], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[448], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[449], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[44], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[450], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[451], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[452], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[453], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[454], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[455], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[456], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[457], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[458], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[459], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[45], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[460], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[461], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[462], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[463], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[464], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[465], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[466], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[467], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[468], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[469], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[46], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[470], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[471], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[472], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[473], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[474], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[475], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[476], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[477], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[478], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[479], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[47], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[480], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[481], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[482], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[483], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[484], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[485], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[486], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[487], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[488], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[489], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[48], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[490], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[491], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[492], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[493], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[494], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[495], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[496], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[497], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[498], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[499], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[49], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[4], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[500], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[501], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[502], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[503], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[504], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[505], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[506], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[507], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[508], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[509], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[50], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[510], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[511], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[512], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[513], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[514], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[515], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[516], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[517], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[518], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[519], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[51], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[520], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[521], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[522], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[523], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[524], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[525], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[526], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[527], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[528], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[529], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[52], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[530], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[531], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[532], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[533], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[534], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[535], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[536], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[537], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[538], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[539], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[53], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[540], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[541], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[542], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[543], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[544], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[545], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[546], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[547], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[548], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[549], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[54], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[550], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[551], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[552], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[553], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[554], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[555], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[556], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[557], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[558], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[559], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[55], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[560], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[561], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[562], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[563], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[564], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[565], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[566], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[567], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[568], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[569], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[56], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[570], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[571], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[572], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[573], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[574], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[575], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[576], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[577], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[578], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[579], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[57], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[580], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[581], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[582], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[583], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[584], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[585], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[586], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[587], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[588], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[589], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[58], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[590], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[591], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[592], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[593], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[594], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[595], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[596], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[597], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[598], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[599], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[59], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[5], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[600], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[601], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[602], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[603], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[604], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[605], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[606], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[607], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[608], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[609], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[60], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[610], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[611], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[612], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[613], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[614], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[615], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[616], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[617], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[618], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[619], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[61], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[620], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[621], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[622], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[623], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[624], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[625], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[626], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[627], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[628], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[629], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[62], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[630], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[631], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[632], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[633], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[634], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[635], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[636], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[637], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[638], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[639], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[63], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[640], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[641], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[642], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[643], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[644], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[645], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[646], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[647], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[648], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[649], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[64], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[650], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[651], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[652], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[653], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[654], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[655], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[656], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[657], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[658], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[659], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[65], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[660], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[661], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[662], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[663], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[664], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[665], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[666], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[667], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[668], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[669], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[66], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[670], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[671], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[672], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[673], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[674], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[675], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[676], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[677], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[678], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[679], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[67], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[680], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[681], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[682], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[683], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[684], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[685], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[686], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[687], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[688], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[689], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[68], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[690], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[691], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[692], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[693], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[694], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[695], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[696], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[697], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[698], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[699], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[69], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[6], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[700], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[701], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[702], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[703], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[704], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[705], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[706], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[707], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[708], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[709], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[70], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[710], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[711], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[712], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[713], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[714], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[715], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[716], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[717], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[718], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[719], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[71], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[720], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[721], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[722], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[723], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[724], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[725], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[726], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[727], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[728], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[729], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[72], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[730], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[731], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[732], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[733], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[734], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[735], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[736], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[737], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[738], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[739], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[73], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[740], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[741], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[742], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[743], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[744], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[745], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[746], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[747], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[748], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[749], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[74], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[750], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[751], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[752], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[753], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[754], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[755], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[756], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[757], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[758], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[759], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[75], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[760], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[761], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[762], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[763], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[764], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[765], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[766], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[767], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[768], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[769], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[76], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[770], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[771], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[772], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[773], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[774], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[775], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[776], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[777], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[778], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[779], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[77], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[780], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[781], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[782], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[783], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[784], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[785], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[786], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[787], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[788], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[789], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[78], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[790], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[791], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[792], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[793], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[794], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[795], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[796], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[797], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[798], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[799], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[79], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[7], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[800], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[801], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[802], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[803], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[804], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[805], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[806], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[807], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[808], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[809], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[80], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[810], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[811], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[812], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[813], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[814], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[815], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[816], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[817], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[818], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[819], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[81], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[820], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[821], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[822], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[823], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[824], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[825], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[826], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[827], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[828], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[829], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[82], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[830], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[831], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[832], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[833], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[834], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[835], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[836], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[837], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[838], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[839], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[83], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[840], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[841], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[842], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[843], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[844], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[845], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[846], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[847], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[848], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[849], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[84], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[850], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[851], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[852], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[853], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[854], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[855], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[856], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[857], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[858], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[859], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[85], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[860], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[861], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[862], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[863], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[864], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[865], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[866], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[867], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[868], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[869], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[86], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[870], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[871], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[872], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[873], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[874], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[875], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[876], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[877], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[878], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[879], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[87], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[880], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[881], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[882], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[883], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[884], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[885], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[886], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[887], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[888], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[889], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[88], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[890], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[891], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[892], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[893], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[894], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[895], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[896], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[897], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[898], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[899], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[89], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[8], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[900], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[901], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[902], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[903], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[904], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[905], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[906], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[907], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[908], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[909], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[90], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[910], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[911], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[912], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[913], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[914], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[915], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[916], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[917], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[918], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[919], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[91], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[920], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[921], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[922], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[923], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[924], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[925], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[926], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[927], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[928], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[929], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[92], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[930], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[931], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[932], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[933], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[934], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[935], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[936], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[937], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[938], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[939], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[93], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[940], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[941], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[942], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[943], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[944], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[945], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[946], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[947], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[948], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[949], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[94], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[950], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[951], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[952], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[953], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[954], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[955], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[956], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[957], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[958], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[959], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[95], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[960], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[961], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[962], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[963], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[964], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[965], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[966], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[967], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[968], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[969], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[96], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[970], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[971], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[972], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[973], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[974], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[975], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[976], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[977], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[978], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[979], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[97], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[980], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[981], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[982], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[983], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[984], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[985], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[986], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[987], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[988], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[989], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[98], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[990], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[991], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[992], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[993], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[994], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[995], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[996], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[997], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[998], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[999], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[99], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH2[9], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[0], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1000], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1001], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1002], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1003], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1004], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1005], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1006], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1007], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1008], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1009], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1010], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1011], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1012], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1013], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1014], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1015], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1016], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1017], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1018], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1019], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1020], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1021], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1022], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1023], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1024], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1025], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1026], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1027], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1028], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1029], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1030], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1031], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1032], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1033], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1034], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1035], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1036], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1037], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1038], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1039], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1040], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1041], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1042], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1043], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1044], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1045], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1046], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1047], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1048], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1049], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1050], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1051], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1052], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1053], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1054], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1055], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1056], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1057], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1058], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1059], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1060], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1061], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1062], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1063], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1064], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1065], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1066], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1067], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1068], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1069], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1070], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1071], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1072], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1073], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1074], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1075], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1076], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1077], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1078], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1079], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1080], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1081], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1082], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1083], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1084], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1085], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1086], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1087], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1088], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1089], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1090], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1091], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1092], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1093], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1094], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1095], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1096], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1097], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1098], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1099], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[10], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1100], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1101], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1102], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1103], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1104], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1105], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1106], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1107], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1108], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1109], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1110], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[111], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[112], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[113], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[114], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[115], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[116], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[117], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[118], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[119], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[11], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[120], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[121], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[122], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[123], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[124], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[125], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[126], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[127], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[128], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[129], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[12], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[130], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[131], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[132], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[133], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[134], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[135], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[136], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[137], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[138], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[139], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[13], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[140], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[141], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[142], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[143], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[144], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[145], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[146], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[147], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[148], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[149], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[14], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[150], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[151], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[152], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[153], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[154], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[155], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[156], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[157], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[158], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[159], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[15], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[160], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[161], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[162], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[163], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[164], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[165], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[166], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[167], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[168], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[169], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[16], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[170], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[171], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[172], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[173], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[174], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[175], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[176], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[177], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[178], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[179], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[17], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[180], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[181], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[182], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[183], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[184], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[185], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[186], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[187], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[188], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[189], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[18], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[190], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[191], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[192], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[193], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[194], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[195], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[196], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[197], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[198], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[199], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[19], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[1], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[200], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[201], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[202], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[203], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[204], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[205], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[206], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[207], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[208], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[209], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[20], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[210], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[211], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[212], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[213], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[214], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[215], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[216], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[217], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[218], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[219], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[21], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[220], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[221], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[222], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[223], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[224], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[225], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[226], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[227], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[228], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[229], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[22], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[230], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[231], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[232], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[233], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[234], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[235], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[236], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[237], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[238], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[239], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[23], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[240], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[241], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[242], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[243], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[244], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[245], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[246], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[247], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[248], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[249], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[24], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[250], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[251], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[252], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[253], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[254], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[255], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[256], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[257], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[258], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[259], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[25], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[260], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[261], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[262], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[263], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[264], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[265], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[266], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[267], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[268], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[269], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[26], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[270], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[271], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[272], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[273], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[274], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[275], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[276], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[277], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[278], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[279], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[27], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[280], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[281], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[282], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[283], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[284], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[285], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[286], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[287], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[288], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[289], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[28], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[290], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[291], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[292], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[293], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[294], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[295], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[296], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[297], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[298], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[299], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[29], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[2], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[300], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[301], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[302], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[303], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[304], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[305], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[306], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[307], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[308], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[309], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[30], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[310], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[311], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[312], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[313], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[314], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[315], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[316], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[317], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[318], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[319], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[31], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[320], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[321], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[322], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[323], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[324], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[325], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[326], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[327], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[328], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[329], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[32], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[330], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[331], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[332], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[333], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[334], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[335], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[336], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[337], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[338], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[339], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[33], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[340], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[341], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[342], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[343], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[344], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[345], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[346], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[347], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[348], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[349], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[34], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[350], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[351], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[352], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[353], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[354], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[355], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[356], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[357], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[358], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[359], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[35], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[360], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[361], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[362], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[363], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[364], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[365], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[366], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[367], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[368], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[369], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[36], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[370], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[371], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[372], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[373], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[374], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[375], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[376], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[377], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[378], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[379], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[37], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[380], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[381], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[382], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[383], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[384], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[385], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[386], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[387], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[388], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[389], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[38], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[390], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[391], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[392], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[393], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[394], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[395], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[396], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[397], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[398], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[399], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[39], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[3], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[400], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[401], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[402], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[403], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[404], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[405], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[406], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[407], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[408], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[409], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[40], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[410], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[411], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[412], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[413], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[414], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[415], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[416], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[417], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[418], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[419], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[41], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[420], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[421], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[422], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[423], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[424], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[425], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[426], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[427], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[428], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[429], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[42], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[430], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[431], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[432], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[433], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[434], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[435], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[436], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[437], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[438], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[439], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[43], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[440], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[441], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[442], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[443], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[444], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[445], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[446], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[447], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[448], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[449], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[44], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[450], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[451], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[452], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[453], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[454], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[455], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[456], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[457], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[458], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[459], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[45], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[460], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[461], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[462], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[463], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[464], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[465], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[466], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[467], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[468], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[469], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[46], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[470], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[471], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[472], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[473], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[474], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[475], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[476], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[477], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[478], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[479], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[47], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[480], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[481], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[482], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[483], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[484], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[485], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[486], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[487], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[488], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[489], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[48], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[490], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[491], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[492], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[493], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[494], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[495], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[496], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[497], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[498], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[499], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[49], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[4], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[500], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[501], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[502], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[503], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[504], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[505], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[506], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[507], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[508], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[509], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[50], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[510], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[511], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[512], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[513], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[514], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[515], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[516], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[517], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[518], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[519], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[51], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[520], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[521], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[522], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[523], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[524], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[525], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[526], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[527], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[528], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[529], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[52], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[530], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[531], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[532], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[533], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[534], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[535], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[536], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[537], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[538], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[539], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[53], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[540], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[541], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[542], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[543], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[544], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[545], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[546], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[547], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[548], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[549], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[54], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[550], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[551], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[552], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[553], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[554], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[555], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[556], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[557], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[558], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[559], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[55], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[560], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[561], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[562], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[563], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[564], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[565], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[566], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[567], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[568], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[569], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[56], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[570], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[571], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[572], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[573], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[574], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[575], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[576], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[577], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[578], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[579], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[57], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[580], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[581], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[582], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[583], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[584], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[585], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[586], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[587], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[588], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[589], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[58], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[590], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[591], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[592], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[593], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[594], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[595], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[596], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[597], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[598], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[599], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[59], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[5], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[600], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[601], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[602], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[603], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[604], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[605], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[606], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[607], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[608], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[609], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[60], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[610], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[611], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[612], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[613], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[614], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[615], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[616], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[617], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[618], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[619], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[61], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[620], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[621], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[622], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[623], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[624], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[625], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[626], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[627], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[628], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[629], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[62], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[630], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[631], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[632], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[633], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[634], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[635], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[636], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[637], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[638], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[639], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[63], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[640], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[641], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[642], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[643], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[644], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[645], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[646], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[647], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[648], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[649], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[64], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[650], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[651], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[652], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[653], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[654], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[655], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[656], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[657], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[658], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[659], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[65], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[660], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[661], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[662], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[663], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[664], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[665], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[666], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[667], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[668], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[669], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[66], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[670], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[671], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[672], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[673], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[674], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[675], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[676], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[677], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[678], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[679], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[67], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[680], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[681], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[682], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[683], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[684], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[685], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[686], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[687], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[688], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[689], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[68], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[690], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[691], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[692], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[693], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[694], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[695], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[696], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[697], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[698], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[699], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[69], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[6], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[700], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[701], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[702], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[703], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[704], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[705], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[706], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[707], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[708], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[709], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[70], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[710], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[711], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[712], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[713], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[714], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[715], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[716], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[717], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[718], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[719], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[71], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[720], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[721], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[722], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[723], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[724], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[725], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[726], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[727], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[728], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[729], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[72], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[730], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[731], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[732], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[733], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[734], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[735], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[736], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[737], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[738], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[739], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[73], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[740], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[741], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[742], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[743], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[744], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[745], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[746], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[747], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[748], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[749], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[74], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[750], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[751], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[752], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[753], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[754], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[755], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[756], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[757], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[758], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[759], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[75], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[760], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[761], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[762], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[763], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[764], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[765], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[766], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[767], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[768], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[769], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[76], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[770], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[771], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[772], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[773], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[774], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[775], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[776], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[777], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[778], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[779], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[77], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[780], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[781], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[782], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[783], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[784], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[785], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[786], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[787], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[788], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[789], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[78], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[790], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[791], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[792], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[793], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[794], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[795], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[796], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[797], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[798], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[799], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[79], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[7], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[800], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[801], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[802], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[803], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[804], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[805], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[806], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[807], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[808], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[809], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[80], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[810], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[811], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[812], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[813], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[814], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[815], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[816], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[817], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[818], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[819], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[81], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[820], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[821], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[822], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[823], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[824], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[825], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[826], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[827], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[828], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[829], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[82], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[830], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[831], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[832], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[833], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[834], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[835], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[836], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[837], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[838], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[839], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[83], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[840], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[841], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[842], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[843], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[844], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[845], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[846], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[847], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[848], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[849], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[84], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[850], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[851], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[852], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[853], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[854], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[855], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[856], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[857], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[858], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[859], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[85], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[860], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[861], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[862], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[863], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[864], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[865], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[866], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[867], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[868], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[869], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[86], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[870], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[871], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[872], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[873], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[874], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[875], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[876], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[877], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[878], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[879], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[87], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[880], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[881], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[882], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[883], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[884], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[885], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[886], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[887], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[888], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[889], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[88], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[890], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[891], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[892], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[893], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[894], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[895], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[896], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[897], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[898], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[899], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[89], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[8], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[900], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[901], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[902], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[903], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[904], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[905], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[906], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[907], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[908], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[909], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[90], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[910], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[911], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[912], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[913], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[914], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[915], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[916], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[917], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[918], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[919], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[91], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[920], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[921], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[922], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[923], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[924], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[925], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[926], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[927], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[928], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[929], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[92], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[930], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[931], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[932], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[933], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[934], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[935], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[936], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[937], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[938], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[939], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[93], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[940], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[941], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[942], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[943], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[944], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[945], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[946], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[947], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[948], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[949], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[94], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[950], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[951], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[952], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[953], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[954], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[955], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[956], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[957], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[958], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[959], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[95], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[960], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[961], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[962], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[963], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[964], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[965], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[966], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[967], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[968], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[969], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[96], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[970], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[971], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[972], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[973], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[974], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[975], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[976], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[977], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[978], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[979], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[97], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[980], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[981], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[982], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[983], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[984], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[985], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[986], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[987], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[988], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[989], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[98], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[990], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[991], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[992], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[993], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[994], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[995], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[996], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[997], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[998], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[999], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[99], +mem,SCH_SHARED_DEVICE_RATE_SHARED_DRM.SCH3[9], +reg,CGM_TOTAL_SRAM_RSRC_FLOW_CONTROL_THS.CGM0[0x219],0: +reg,CGM_TOTAL_SRAM_RSRC_FLOW_CONTROL_THS.CGM1[0x219],0: +reg,CGM_TOTAL_SRAM_RSRC_FLOW_CONTROL_THS.CGM2[0x219],0: +reg,CGM_TOTAL_SRAM_RSRC_FLOW_CONTROL_THS.CGM3[0x219],0: +reg,CIG_RCI_CONFIGS.CIG0[0x103],0x5140e101f407d081ac: +reg,CIG_RCI_CORE_MAPPING.CIG0[0x104],0x32002bc025801f40190012c00c8: +reg,CIG_RCI_DEVICE_MAPPING.CIG0[0x105],0x32002bc025801f40190012c00c8: +reg,CIG_RCI_FDA_OUT_TH.CIG0[0x107],0x18008008006405143e8: +reg,CIG_RCI_FDA_OUT_TOTAL_TH.CIG0[0x108],0x800200080017704e20fa0: +reg,FDA_OFM_CORE_FIFO_CONFIG_CORE.FDA0[0x166],0x875b7d0: +reg,FDA_OFM_CORE_FIFO_CONFIG_CORE.FDA1[0x166],0x875b7d0: +reg,FDA_OFM_CORE_FIFO_CONFIG_CORE.FDA2[0x166],0x875b7d0: +reg,FDA_OFM_CORE_FIFO_CONFIG_CORE.FDA3[0x166],0x875b7d0: +reg,FDTS_FDT_SHAPER_CONFIGURATIONS.FDTS0[0x104],0x500a0006428080a4176004e601: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC0[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC10[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC11[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC12[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC13[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC14[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC15[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC16[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC17[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC18[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC19[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC1[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC20[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC21[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC22[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC23[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC24[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC25[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC26[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC27[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC28[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC29[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC2[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC30[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC31[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC32[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC33[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC34[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC35[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC36[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC37[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC38[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC39[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC3[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC4[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC5[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC6[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC7[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC8[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(0).FMAC9[0x11d],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC0[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC10[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC11[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC12[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC13[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC14[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC15[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC16[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC17[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC18[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC19[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC1[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC20[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC21[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC22[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC23[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC24[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC25[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC26[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC27[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC28[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC29[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC2[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC30[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC31[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC32[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC33[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC34[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC35[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC36[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC37[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC38[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC39[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC3[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC4[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC5[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC6[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC7[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC8[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(1).FMAC9[0x11e],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC0[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC10[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC11[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC12[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC13[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC14[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC15[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC16[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC17[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC18[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC19[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC1[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC20[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC21[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC22[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC23[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC24[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC25[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC26[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC27[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC28[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC29[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC2[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC30[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC31[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC32[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC33[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC34[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC35[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC36[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC37[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC38[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC39[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC3[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC4[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC5[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC6[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC7[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC8[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(2).FMAC9[0x11f],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC0[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC10[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC11[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC12[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC13[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC14[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC15[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC16[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC17[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC18[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC19[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC1[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC20[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC21[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC22[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC23[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC24[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC25[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC26[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC27[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC28[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC29[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC2[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC30[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC31[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC32[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC33[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC34[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC35[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC36[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC37[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC38[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC39[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC3[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC4[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC5[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC6[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC7[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC8[0x120],0x280f8: +reg,FMAC_LINK_LEVEL_FLOW_CONTROL_CONFIGURATIONS(3).FMAC9[0x120],0x280f8: +reg,RQP_RQP_AGING_CONFIG.RQP0[0x106],0x40001000002b: +reg,RQP_RQP_AGING_CONFIG.RQP1[0x106],0x40001000002b: +reg,RQP_RQP_AGING_CONFIG.RQP2[0x106],0x40001000002b: +reg,RQP_RQP_AGING_CONFIG.RQP3[0x106],0x40001000002b: diff --git a/fboss/agent/if/agent_hw_test_ctrl.thrift b/fboss/agent/if/agent_hw_test_ctrl.thrift index b44ac11168cf9..c7c283745c6fa 100644 --- a/fboss/agent/if/agent_hw_test_ctrl.thrift +++ b/fboss/agent/if/agent_hw_test_ctrl.thrift @@ -36,6 +36,12 @@ struct PortInfo { 1: i32 loopbackMode; } +struct AggPortInfo { + 1: bool isPresent; + 2: i32 numMembers; + 3: i32 numActiveMembers; +} + service AgentHwTestCtrl { // acl utils begin i32 getDefaultAclTableNumAclEntries(); @@ -78,6 +84,7 @@ service AgentHwTestCtrl { NeighborInfo getNeighborInfo(1: ctrl.IfAndIP neighbor); i32 getHwEcmpSize(1: CIDRNetwork prefix, 2: i32 routerID, 3: i32 sizeInSw); + map getEcmpWeights(1: CIDRNetwork prefix, 2: i32 routerID); void injectFecError(1: list hwPorts, 2: bool injectCorrectable); @@ -100,4 +107,10 @@ service AgentHwTestCtrl { // port utils list getPortInfo(1: list portIds); + bool verifyPortLedStatus(1: i32 port, 2: bool status); + bool verifyPGSettings(1: i32 port, 2: bool pfcEnabled); + + list getAggPortInfo(1: list aggPortIds); + i32 getNumAggPorts(); + bool verifyPktFromAggPort(1: i32 aggPortId); } diff --git a/fboss/agent/if/ctrl.thrift b/fboss/agent/if/ctrl.thrift index 980fda9acf7bc..42b433eaf21d3 100644 --- a/fboss/agent/if/ctrl.thrift +++ b/fboss/agent/if/ctrl.thrift @@ -430,6 +430,7 @@ struct SystemPortThrift { */ 13: optional common.LivenessStatus remoteSystemPortLivenessStatus; 14: switch_config.Scope scope = switch_config.Scope.LOCAL; + 15: bool shelDestinationEnabled = false; } struct PortHardwareDetails { diff --git a/fboss/agent/if/multiswitch_ctrl.thrift b/fboss/agent/if/multiswitch_ctrl.thrift index b53da510f366c..a5467fbf42bf8 100644 --- a/fboss/agent/if/multiswitch_ctrl.thrift +++ b/fboss/agent/if/multiswitch_ctrl.thrift @@ -26,6 +26,8 @@ struct LinkEvent { struct LinkActiveEvent { 1: map port2IsActive; + 2: bool fwIsolated; + 3: optional i32 numActiveFabricPortsAtFwIsolate; } struct FabricConnectivityDelta { diff --git a/fboss/agent/mnpu/SplitAgentThriftSyncer.cpp b/fboss/agent/mnpu/SplitAgentThriftSyncer.cpp index d11f981430495..ead1489dde330 100644 --- a/fboss/agent/mnpu/SplitAgentThriftSyncer.cpp +++ b/fboss/agent/mnpu/SplitAgentThriftSyncer.cpp @@ -107,14 +107,21 @@ void SplitAgentThriftSyncer::linkStateChanged( linkChangeEventSinkClient_->enqueue(std::move(changeEvent)); } -void SplitAgentThriftSyncer::linkActiveStateChanged( - const std::map& port2IsActive) { +void SplitAgentThriftSyncer::linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) { multiswitch::LinkActiveEvent event; for (const auto& [portID, isActive] : port2IsActive) { event.port2IsActive()[portID] = isActive; } + event.fwIsolated() = fwIsolated; + if (numActiveFabricPortsAtFwIsolate) { + event.numActiveFabricPortsAtFwIsolate() = *numActiveFabricPortsAtFwIsolate; + } + multiswitch::LinkChangeEvent changeEvent; changeEvent.linkActiveEvents() = event; linkChangeEventSinkClient_->enqueue(std::move(changeEvent)); diff --git a/fboss/agent/mnpu/SplitAgentThriftSyncer.h b/fboss/agent/mnpu/SplitAgentThriftSyncer.h index 8710ae1b9e7cd..2877882943e09 100644 --- a/fboss/agent/mnpu/SplitAgentThriftSyncer.h +++ b/fboss/agent/mnpu/SplitAgentThriftSyncer.h @@ -48,8 +48,10 @@ class SplitAgentThriftSyncer : public HwSwitchCallback { cfg::PortType portType, std::optional iPhyFaultStatus = std::nullopt) override; - void linkActiveStateChanged( - const std::map& port2IsActive) override; + void linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) override; void linkConnectivityChanged( const std::map& port2OldAndNewConnectivity) override; diff --git a/fboss/agent/platforms/common/meru800bfa/Meru800bfaP1PlatformMapping.cpp b/fboss/agent/platforms/common/meru800bfa/Meru800bfaP1PlatformMapping.cpp index fefda41047450..adaddd06a8709 100644 --- a/fboss/agent/platforms/common/meru800bfa/Meru800bfaP1PlatformMapping.cpp +++ b/fboss/agent/platforms/common/meru800bfa/Meru800bfaP1PlatformMapping.cpp @@ -49429,7 +49429,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -49459,7 +49459,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -147021,7 +147021,7 @@ constexpr auto kJsonMultiNpuPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -147051,7 +147051,7 @@ constexpr auto kJsonMultiNpuPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } diff --git a/fboss/agent/platforms/common/meru800bfa/Meru800bfaP2PlatformMapping.h b/fboss/agent/platforms/common/meru800bfa/Meru800bfaP2PlatformMapping.h index 658c8967d72bb..315b97f224c5c 100644 --- a/fboss/agent/platforms/common/meru800bfa/Meru800bfaP2PlatformMapping.h +++ b/fboss/agent/platforms/common/meru800bfa/Meru800bfaP2PlatformMapping.h @@ -49940,7 +49940,7 @@ constexpr auto kJsonSingleNpuP2PlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -49970,7 +49970,7 @@ constexpr auto kJsonSingleNpuP2PlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -148557,7 +148557,7 @@ constexpr auto kJsonMultiNpuP2PlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -148587,7 +148587,7 @@ constexpr auto kJsonMultiNpuP2PlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } diff --git a/fboss/agent/platforms/common/meru800bfa/Meru800bfaProdPlatformMapping.h b/fboss/agent/platforms/common/meru800bfa/Meru800bfaProdPlatformMapping.h index 1e11050a2b69c..f4fe52648cc73 100644 --- a/fboss/agent/platforms/common/meru800bfa/Meru800bfaProdPlatformMapping.h +++ b/fboss/agent/platforms/common/meru800bfa/Meru800bfaProdPlatformMapping.h @@ -49942,7 +49942,7 @@ constexpr auto kJsonSingleNpuProdPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -49972,7 +49972,7 @@ constexpr auto kJsonSingleNpuProdPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -148559,7 +148559,7 @@ constexpr auto kJsonMultiNpuProdPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 544, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -148589,7 +148589,7 @@ constexpr auto kJsonMultiNpuProdPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } diff --git a/fboss/agent/platforms/common/meru800bia/Meru800biaPlatformMapping.cpp b/fboss/agent/platforms/common/meru800bia/Meru800biaPlatformMapping.cpp index 329ef29f6285c..c834a0387756b 100644 --- a/fboss/agent/platforms/common/meru800bia/Meru800biaPlatformMapping.cpp +++ b/fboss/agent/platforms/common/meru800bia/Meru800biaPlatformMapping.cpp @@ -43032,7 +43032,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -43047,7 +43047,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 4, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 21 } } @@ -43062,7 +43062,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 8, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 23 } } @@ -43092,7 +43092,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -43152,7 +43152,7 @@ constexpr auto kJsonPlatformMappingStr = R"( "numLanes": 4, "modulation": 1, "fec": 528, - "medium": 2, + "medium": 3, "interfaceType": 21 } } @@ -71672,7 +71672,7 @@ constexpr auto kJsonDsfJ3ScaleTestPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -71687,7 +71687,7 @@ constexpr auto kJsonDsfJ3ScaleTestPlatformMappingStr = R"( "numLanes": 4, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 21 } } @@ -71717,7 +71717,7 @@ constexpr auto kJsonDsfJ3ScaleTestPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -71732,7 +71732,7 @@ constexpr auto kJsonDsfJ3ScaleTestPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -71777,7 +71777,7 @@ constexpr auto kJsonDsfJ3ScaleTestPlatformMappingStr = R"( "numLanes": 4, "modulation": 1, "fec": 528, - "medium": 2, + "medium": 3, "interfaceType": 21 } } @@ -97402,7 +97402,7 @@ constexpr auto kJsonEdswPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 545, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -97417,7 +97417,7 @@ constexpr auto kJsonEdswPlatformMappingStr = R"( "numLanes": 8, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 23 } } @@ -97447,7 +97447,7 @@ constexpr auto kJsonEdswPlatformMappingStr = R"( "numLanes": 1, "modulation": 2, "fec": 11, - "medium": 2, + "medium": 3, "interfaceType": 41 } } @@ -97492,7 +97492,68345 @@ constexpr auto kJsonEdswPlatformMappingStr = R"( "numLanes": 4, "modulation": 1, "fec": 528, - "medium": 2, + "medium": 3, + "interfaceType": 21 + } + } + } + ] +} +)"; + +constexpr auto kJsonDualStageRdsw3q2qPlatformMappingStr = R"( +{ + "ports": { + "1": { + "mapping": { + "id": 1, + "name": "eth1/19/1", + "controllingPort": 1, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16385 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16385 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 3 + } + } + ] + } + } + } + }, + "2": { + "mapping": { + "id": 2, + "name": "eth1/16/1", + "controllingPort": 2, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 3 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 3 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + ] + } + } + } + }, + "3": { + "mapping": { + "id": 3, + "name": "eth1/16/5", + "controllingPort": 2, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + } + } + }, + "4": { + "mapping": { + "id": 4, + "name": "eth1/18/1", + "controllingPort": 4, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 6, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16388 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16388 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + ] + } + } + } + }, + "5": { + "mapping": { + "id": 5, + "name": "eth1/15/1", + "controllingPort": 5, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 8, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 6 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 6 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + ] + } + } + } + }, + "6": { + "mapping": { + "id": 6, + "name": "eth1/15/5", + "controllingPort": 5, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 10, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + } + } + }, + "7": { + "mapping": { + "id": 7, + "name": "eth1/17/1", + "controllingPort": 7, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 12, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 8 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 8 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + ] + } + } + } + }, + "8": { + "mapping": { + "id": 8, + "name": "eth1/17/5", + "controllingPort": 7, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 14, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + } + } + }, + "9": { + "mapping": { + "id": 9, + "name": "eth1/13/1", + "controllingPort": 9, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16393 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16393 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + ] + } + } + } + }, + "10": { + "mapping": { + "id": 10, + "name": "eth1/11/1", + "controllingPort": 10, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 11 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 11 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + ] + } + } + } + }, + "11": { + "mapping": { + "id": 11, + "name": "eth1/11/5", + "controllingPort": 10, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + } + } + }, + "12": { + "mapping": { + "id": 12, + "name": "eth1/14/1", + "controllingPort": 12, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 6, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16396 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16396 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + ] + } + } + } + }, + "13": { + "mapping": { + "id": 13, + "name": "eth1/12/1", + "controllingPort": 13, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 8, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 14 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 14 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + ] + } + } + } + }, + "14": { + "mapping": { + "id": 14, + "name": "eth1/12/5", + "controllingPort": 13, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 10, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + } + } + }, + "15": { + "mapping": { + "id": 15, + "name": "eth1/20/1", + "controllingPort": 15, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16399 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16399 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + ] + } + } + } + }, + "16": { + "mapping": { + "id": 16, + "name": "eth1/22/1", + "controllingPort": 16, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 17 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 17 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + ] + } + } + } + }, + "17": { + "mapping": { + "id": 17, + "name": "eth1/22/5", + "controllingPort": 16, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + } + } + }, + "18": { + "mapping": { + "id": 18, + "name": "eth1/21/1", + "controllingPort": 18, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 6, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16402 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16402 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + ] + } + } + } + }, + "19": { + "mapping": { + "id": 19, + "name": "eth1/24/1", + "controllingPort": 19, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 8, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 20 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 20 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + ] + } + } + } + }, + "20": { + "mapping": { + "id": 20, + "name": "eth1/24/5", + "controllingPort": 19, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 10, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + } + } + }, + "21": { + "mapping": { + "id": 21, + "name": "eth1/27/1", + "controllingPort": 21, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16405 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16405 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + ] + } + } + } + }, + "22": { + "mapping": { + "id": 22, + "name": "eth1/28/1", + "controllingPort": 22, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 23 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 23 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 3 + } + } + ] + } + } + } + }, + "23": { + "mapping": { + "id": 23, + "name": "eth1/28/5", + "controllingPort": 22, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip28", + "lane": 7 + } + } + ] + } + } + } + }, + "24": { + "mapping": { + "id": 24, + "name": "eth1/25/1", + "controllingPort": 24, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 6, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 16408 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 16408 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + ] + } + } + } + }, + "25": { + "mapping": { + "id": 25, + "name": "eth1/26/1", + "controllingPort": 25, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 8, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 26 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 26 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + ] + } + } + } + }, + "26": { + "mapping": { + "id": 26, + "name": "eth1/26/5", + "controllingPort": 25, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 10, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + } + } + }, + "27": { + "mapping": { + "id": 27, + "name": "eth1/23/1", + "controllingPort": 27, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 12, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + ] + } + }, + "35": { + "subsumedPorts": [ + 28 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + ] + } + }, + "39": { + "subsumedPorts": [ + 28 + ], + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + ] + } + } + } + }, + "28": { + "mapping": { + "id": 28, + "name": "eth1/23/5", + "controllingPort": 27, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 14, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + } + } + }, + "1024": { + "mapping": { + "id": 1024, + "name": "fab1/10/3", + "controllingPort": 1024, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + } + } + }, + "1025": { + "mapping": { + "id": 1025, + "name": "fab1/10/2", + "controllingPort": 1025, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + } + } + }, + "1026": { + "mapping": { + "id": 1026, + "name": "fab1/10/1", + "controllingPort": 1026, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + } + } + }, + "1027": { + "mapping": { + "id": 1027, + "name": "fab1/10/5", + "controllingPort": 1027, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + } + } + }, + "1028": { + "mapping": { + "id": 1028, + "name": "fab1/10/8", + "controllingPort": 1028, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + } + } + }, + "1029": { + "mapping": { + "id": 1029, + "name": "fab1/10/7", + "controllingPort": 1029, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + } + } + }, + "1030": { + "mapping": { + "id": 1030, + "name": "fab1/10/6", + "controllingPort": 1030, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + } + } + }, + "1031": { + "mapping": { + "id": 1031, + "name": "fab1/10/4", + "controllingPort": 1031, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + } + } + }, + "1032": { + "mapping": { + "id": 1032, + "name": "fab1/9/3", + "controllingPort": 1032, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + } + } + }, + "1033": { + "mapping": { + "id": 1033, + "name": "fab1/9/2", + "controllingPort": 1033, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + } + } + }, + "1034": { + "mapping": { + "id": 1034, + "name": "fab1/9/1", + "controllingPort": 1034, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + } + } + }, + "1035": { + "mapping": { + "id": 1035, + "name": "fab1/9/5", + "controllingPort": 1035, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + } + } + }, + "1036": { + "mapping": { + "id": 1036, + "name": "fab1/9/8", + "controllingPort": 1036, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + } + } + }, + "1037": { + "mapping": { + "id": 1037, + "name": "fab1/9/7", + "controllingPort": 1037, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + } + } + }, + "1038": { + "mapping": { + "id": 1038, + "name": "fab1/9/6", + "controllingPort": 1038, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + } + } + }, + "1039": { + "mapping": { + "id": 1039, + "name": "fab1/9/4", + "controllingPort": 1039, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + } + } + }, + "1040": { + "mapping": { + "id": 1040, + "name": "fab1/8/3", + "controllingPort": 1040, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + } + } + }, + "1041": { + "mapping": { + "id": 1041, + "name": "fab1/8/4", + "controllingPort": 1041, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + } + } + }, + "1042": { + "mapping": { + "id": 1042, + "name": "fab1/8/1", + "controllingPort": 1042, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + } + } + }, + "1043": { + "mapping": { + "id": 1043, + "name": "fab1/8/2", + "controllingPort": 1043, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + } + } + }, + "1044": { + "mapping": { + "id": 1044, + "name": "fab1/8/5", + "controllingPort": 1044, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + } + } + }, + "1045": { + "mapping": { + "id": 1045, + "name": "fab1/8/6", + "controllingPort": 1045, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + } + } + }, + "1046": { + "mapping": { + "id": 1046, + "name": "fab1/8/7", + "controllingPort": 1046, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + } + } + }, + "1047": { + "mapping": { + "id": 1047, + "name": "fab1/8/8", + "controllingPort": 1047, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + } + } + }, + "1048": { + "mapping": { + "id": 1048, + "name": "fab1/7/1", + "controllingPort": 1048, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + } + } + }, + "1049": { + "mapping": { + "id": 1049, + "name": "fab1/7/2", + "controllingPort": 1049, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + } + } + }, + "1050": { + "mapping": { + "id": 1050, + "name": "fab1/7/3", + "controllingPort": 1050, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + } + } + }, + "1051": { + "mapping": { + "id": 1051, + "name": "fab1/7/4", + "controllingPort": 1051, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + } + } + }, + "1052": { + "mapping": { + "id": 1052, + "name": "fab1/7/5", + "controllingPort": 1052, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + } + } + }, + "1053": { + "mapping": { + "id": 1053, + "name": "fab1/7/6", + "controllingPort": 1053, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + } + } + }, + "1054": { + "mapping": { + "id": 1054, + "name": "fab1/7/7", + "controllingPort": 1054, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + } + } + }, + "1055": { + "mapping": { + "id": 1055, + "name": "fab1/7/8", + "controllingPort": 1055, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + } + } + }, + "1056": { + "mapping": { + "id": 1056, + "name": "fab1/6/7", + "controllingPort": 1056, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + } + } + }, + "1057": { + "mapping": { + "id": 1057, + "name": "fab1/6/4", + "controllingPort": 1057, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + } + } + }, + "1058": { + "mapping": { + "id": 1058, + "name": "fab1/6/6", + "controllingPort": 1058, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + } + } + }, + "1059": { + "mapping": { + "id": 1059, + "name": "fab1/6/8", + "controllingPort": 1059, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + } + } + }, + "1060": { + "mapping": { + "id": 1060, + "name": "fab1/6/5", + "controllingPort": 1060, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + } + } + }, + "1061": { + "mapping": { + "id": 1061, + "name": "fab1/6/1", + "controllingPort": 1061, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + } + } + }, + "1062": { + "mapping": { + "id": 1062, + "name": "fab1/6/3", + "controllingPort": 1062, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + } + } + }, + "1063": { + "mapping": { + "id": 1063, + "name": "fab1/6/2", + "controllingPort": 1063, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + } + } + }, + "1064": { + "mapping": { + "id": 1064, + "name": "fab1/5/7", + "controllingPort": 1064, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + } + } + }, + "1065": { + "mapping": { + "id": 1065, + "name": "fab1/5/4", + "controllingPort": 1065, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + } + } + }, + "1066": { + "mapping": { + "id": 1066, + "name": "fab1/5/6", + "controllingPort": 1066, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + } + } + }, + "1067": { + "mapping": { + "id": 1067, + "name": "fab1/5/8", + "controllingPort": 1067, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + } + } + }, + "1068": { + "mapping": { + "id": 1068, + "name": "fab1/5/5", + "controllingPort": 1068, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + } + } + }, + "1069": { + "mapping": { + "id": 1069, + "name": "fab1/5/3", + "controllingPort": 1069, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + } + } + }, + "1070": { + "mapping": { + "id": 1070, + "name": "fab1/5/1", + "controllingPort": 1070, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + } + } + }, + "1071": { + "mapping": { + "id": 1071, + "name": "fab1/5/2", + "controllingPort": 1071, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + } + } + }, + "1072": { + "mapping": { + "id": 1072, + "name": "fab1/4/3", + "controllingPort": 1072, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + } + } + }, + "1073": { + "mapping": { + "id": 1073, + "name": "fab1/4/4", + "controllingPort": 1073, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + } + } + }, + "1074": { + "mapping": { + "id": 1074, + "name": "fab1/4/1", + "controllingPort": 1074, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + } + } + }, + "1075": { + "mapping": { + "id": 1075, + "name": "fab1/4/2", + "controllingPort": 1075, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + } + } + }, + "1076": { + "mapping": { + "id": 1076, + "name": "fab1/4/5", + "controllingPort": 1076, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + } + } + }, + "1077": { + "mapping": { + "id": 1077, + "name": "fab1/4/6", + "controllingPort": 1077, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + } + } + }, + "1078": { + "mapping": { + "id": 1078, + "name": "fab1/4/7", + "controllingPort": 1078, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + } + } + }, + "1079": { + "mapping": { + "id": 1079, + "name": "fab1/4/8", + "controllingPort": 1079, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + } + } + }, + "1080": { + "mapping": { + "id": 1080, + "name": "fab1/3/1", + "controllingPort": 1080, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + } + } + }, + "1081": { + "mapping": { + "id": 1081, + "name": "fab1/3/2", + "controllingPort": 1081, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + } + } + }, + "1082": { + "mapping": { + "id": 1082, + "name": "fab1/3/3", + "controllingPort": 1082, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + } + } + }, + "1083": { + "mapping": { + "id": 1083, + "name": "fab1/3/4", + "controllingPort": 1083, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + } + } + }, + "1084": { + "mapping": { + "id": 1084, + "name": "fab1/3/5", + "controllingPort": 1084, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + } + } + }, + "1085": { + "mapping": { + "id": 1085, + "name": "fab1/3/6", + "controllingPort": 1085, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + } + } + }, + "1086": { + "mapping": { + "id": 1086, + "name": "fab1/3/7", + "controllingPort": 1086, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + } + } + }, + "1087": { + "mapping": { + "id": 1087, + "name": "fab1/3/8", + "controllingPort": 1087, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + } + } + }, + "1088": { + "mapping": { + "id": 1088, + "name": "fab1/1/3", + "controllingPort": 1088, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + } + } + }, + "1089": { + "mapping": { + "id": 1089, + "name": "fab1/1/2", + "controllingPort": 1089, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + } + } + }, + "1090": { + "mapping": { + "id": 1090, + "name": "fab1/1/6", + "controllingPort": 1090, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + } + } + }, + "1091": { + "mapping": { + "id": 1091, + "name": "fab1/1/4", + "controllingPort": 1091, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + } + } + }, + "1092": { + "mapping": { + "id": 1092, + "name": "fab1/1/5", + "controllingPort": 1092, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + } + } + }, + "1093": { + "mapping": { + "id": 1093, + "name": "fab1/1/1", + "controllingPort": 1093, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + } + } + }, + "1094": { + "mapping": { + "id": 1094, + "name": "fab1/1/7", + "controllingPort": 1094, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + } + } + }, + "1095": { + "mapping": { + "id": 1095, + "name": "fab1/1/8", + "controllingPort": 1095, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + } + } + }, + "1096": { + "mapping": { + "id": 1096, + "name": "fab1/2/1", + "controllingPort": 1096, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + } + } + }, + "1097": { + "mapping": { + "id": 1097, + "name": "fab1/2/4", + "controllingPort": 1097, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + } + } + }, + "1098": { + "mapping": { + "id": 1098, + "name": "fab1/2/3", + "controllingPort": 1098, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + } + } + }, + "1099": { + "mapping": { + "id": 1099, + "name": "fab1/2/8", + "controllingPort": 1099, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + } + } + }, + "1100": { + "mapping": { + "id": 1100, + "name": "fab1/2/5", + "controllingPort": 1100, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + } + } + }, + "1101": { + "mapping": { + "id": 1101, + "name": "fab1/2/6", + "controllingPort": 1101, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + } + } + }, + "1102": { + "mapping": { + "id": 1102, + "name": "fab1/2/7", + "controllingPort": 1102, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + } + } + }, + "1103": { + "mapping": { + "id": 1103, + "name": "fab1/2/2", + "controllingPort": 1103, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + } + } + }, + "1104": { + "mapping": { + "id": 1104, + "name": "fab1/30/7", + "controllingPort": 1104, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + } + } + }, + "1105": { + "mapping": { + "id": 1105, + "name": "fab1/30/4", + "controllingPort": 1105, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + } + } + }, + "1106": { + "mapping": { + "id": 1106, + "name": "fab1/30/6", + "controllingPort": 1106, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + } + } + }, + "1107": { + "mapping": { + "id": 1107, + "name": "fab1/30/8", + "controllingPort": 1107, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + } + } + }, + "1108": { + "mapping": { + "id": 1108, + "name": "fab1/30/5", + "controllingPort": 1108, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + } + } + }, + "1109": { + "mapping": { + "id": 1109, + "name": "fab1/30/3", + "controllingPort": 1109, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + } + } + }, + "1110": { + "mapping": { + "id": 1110, + "name": "fab1/30/1", + "controllingPort": 1110, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + } + } + }, + "1111": { + "mapping": { + "id": 1111, + "name": "fab1/30/2", + "controllingPort": 1111, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + } + } + }, + "1112": { + "mapping": { + "id": 1112, + "name": "fab1/29/3", + "controllingPort": 1112, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + } + } + }, + "1113": { + "mapping": { + "id": 1113, + "name": "fab1/29/8", + "controllingPort": 1113, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + } + } + }, + "1114": { + "mapping": { + "id": 1114, + "name": "fab1/29/7", + "controllingPort": 1114, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + } + } + }, + "1115": { + "mapping": { + "id": 1115, + "name": "fab1/29/5", + "controllingPort": 1115, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + } + } + }, + "1116": { + "mapping": { + "id": 1116, + "name": "fab1/29/2", + "controllingPort": 1116, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + } + } + }, + "1117": { + "mapping": { + "id": 1117, + "name": "fab1/29/1", + "controllingPort": 1117, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + } + } + }, + "1118": { + "mapping": { + "id": 1118, + "name": "fab1/29/6", + "controllingPort": 1118, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + } + } + }, + "1119": { + "mapping": { + "id": 1119, + "name": "fab1/29/4", + "controllingPort": 1119, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + } + } + }, + "1120": { + "mapping": { + "id": 1120, + "name": "fab1/32/1", + "controllingPort": 1120, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + } + } + }, + "1121": { + "mapping": { + "id": 1121, + "name": "fab1/32/4", + "controllingPort": 1121, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + } + } + }, + "1122": { + "mapping": { + "id": 1122, + "name": "fab1/32/6", + "controllingPort": 1122, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + } + } + }, + "1123": { + "mapping": { + "id": 1123, + "name": "fab1/32/2", + "controllingPort": 1123, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + } + } + }, + "1124": { + "mapping": { + "id": 1124, + "name": "fab1/32/5", + "controllingPort": 1124, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + } + } + }, + "1125": { + "mapping": { + "id": 1125, + "name": "fab1/32/3", + "controllingPort": 1125, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + } + } + }, + "1126": { + "mapping": { + "id": 1126, + "name": "fab1/32/7", + "controllingPort": 1126, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + } + } + }, + "1127": { + "mapping": { + "id": 1127, + "name": "fab1/32/8", + "controllingPort": 1127, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + } + } + }, + "1128": { + "mapping": { + "id": 1128, + "name": "fab1/33/6", + "controllingPort": 1128, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + } + } + }, + "1129": { + "mapping": { + "id": 1129, + "name": "fab1/33/8", + "controllingPort": 1129, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + } + } + }, + "1130": { + "mapping": { + "id": 1130, + "name": "fab1/33/7", + "controllingPort": 1130, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + } + } + }, + "1131": { + "mapping": { + "id": 1131, + "name": "fab1/33/5", + "controllingPort": 1131, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + } + } + }, + "1132": { + "mapping": { + "id": 1132, + "name": "fab1/33/2", + "controllingPort": 1132, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + } + } + }, + "1133": { + "mapping": { + "id": 1133, + "name": "fab1/33/1", + "controllingPort": 1133, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + } + } + }, + "1134": { + "mapping": { + "id": 1134, + "name": "fab1/33/3", + "controllingPort": 1134, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + } + } + }, + "1135": { + "mapping": { + "id": 1135, + "name": "fab1/33/4", + "controllingPort": 1135, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + } + } + }, + "1136": { + "mapping": { + "id": 1136, + "name": "fab1/31/6", + "controllingPort": 1136, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + } + } + }, + "1137": { + "mapping": { + "id": 1137, + "name": "fab1/31/8", + "controllingPort": 1137, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + } + } + }, + "1138": { + "mapping": { + "id": 1138, + "name": "fab1/31/1", + "controllingPort": 1138, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + } + } + }, + "1139": { + "mapping": { + "id": 1139, + "name": "fab1/31/2", + "controllingPort": 1139, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + } + } + }, + "1140": { + "mapping": { + "id": 1140, + "name": "fab1/31/5", + "controllingPort": 1140, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + } + } + }, + "1141": { + "mapping": { + "id": 1141, + "name": "fab1/31/3", + "controllingPort": 1141, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + } + } + }, + "1142": { + "mapping": { + "id": 1142, + "name": "fab1/31/7", + "controllingPort": 1142, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + } + } + }, + "1143": { + "mapping": { + "id": 1143, + "name": "fab1/31/4", + "controllingPort": 1143, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + } + } + }, + "1144": { + "mapping": { + "id": 1144, + "name": "fab1/34/3", + "controllingPort": 1144, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + } + } + }, + "1145": { + "mapping": { + "id": 1145, + "name": "fab1/34/8", + "controllingPort": 1145, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + } + } + }, + "1146": { + "mapping": { + "id": 1146, + "name": "fab1/34/5", + "controllingPort": 1146, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + } + } + }, + "1147": { + "mapping": { + "id": 1147, + "name": "fab1/34/7", + "controllingPort": 1147, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + } + } + }, + "1148": { + "mapping": { + "id": 1148, + "name": "fab1/34/6", + "controllingPort": 1148, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + } + } + }, + "1149": { + "mapping": { + "id": 1149, + "name": "fab1/34/1", + "controllingPort": 1149, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + } + } + }, + "1150": { + "mapping": { + "id": 1150, + "name": "fab1/34/2", + "controllingPort": 1150, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + } + } + }, + "1151": { + "mapping": { + "id": 1151, + "name": "fab1/34/4", + "controllingPort": 1151, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + } + } + }, + "1152": { + "mapping": { + "id": 1152, + "name": "fab1/38/5", + "controllingPort": 1152, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + } + } + }, + "1153": { + "mapping": { + "id": 1153, + "name": "fab1/38/4", + "controllingPort": 1153, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + } + } + }, + "1154": { + "mapping": { + "id": 1154, + "name": "fab1/38/6", + "controllingPort": 1154, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + } + } + }, + "1155": { + "mapping": { + "id": 1155, + "name": "fab1/38/8", + "controllingPort": 1155, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + } + } + }, + "1156": { + "mapping": { + "id": 1156, + "name": "fab1/38/1", + "controllingPort": 1156, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + } + } + }, + "1157": { + "mapping": { + "id": 1157, + "name": "fab1/38/3", + "controllingPort": 1157, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + } + } + }, + "1158": { + "mapping": { + "id": 1158, + "name": "fab1/38/7", + "controllingPort": 1158, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + } + } + }, + "1159": { + "mapping": { + "id": 1159, + "name": "fab1/38/2", + "controllingPort": 1159, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + } + } + }, + "1160": { + "mapping": { + "id": 1160, + "name": "fab1/37/3", + "controllingPort": 1160, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + } + } + }, + "1161": { + "mapping": { + "id": 1161, + "name": "fab1/37/8", + "controllingPort": 1161, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + } + } + }, + "1162": { + "mapping": { + "id": 1162, + "name": "fab1/37/5", + "controllingPort": 1162, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + } + } + }, + "1163": { + "mapping": { + "id": 1163, + "name": "fab1/37/7", + "controllingPort": 1163, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + } + } + }, + "1164": { + "mapping": { + "id": 1164, + "name": "fab1/37/6", + "controllingPort": 1164, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + } + } + }, + "1165": { + "mapping": { + "id": 1165, + "name": "fab1/37/1", + "controllingPort": 1165, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + } + } + }, + "1166": { + "mapping": { + "id": 1166, + "name": "fab1/37/2", + "controllingPort": 1166, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + } + } + }, + "1167": { + "mapping": { + "id": 1167, + "name": "fab1/37/4", + "controllingPort": 1167, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + } + } + }, + "1168": { + "mapping": { + "id": 1168, + "name": "fab1/35/1", + "controllingPort": 1168, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + } + } + }, + "1169": { + "mapping": { + "id": 1169, + "name": "fab1/35/4", + "controllingPort": 1169, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + } + } + }, + "1170": { + "mapping": { + "id": 1170, + "name": "fab1/35/6", + "controllingPort": 1170, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + } + } + }, + "1171": { + "mapping": { + "id": 1171, + "name": "fab1/35/2", + "controllingPort": 1171, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + } + } + }, + "1172": { + "mapping": { + "id": 1172, + "name": "fab1/35/5", + "controllingPort": 1172, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + } + } + }, + "1173": { + "mapping": { + "id": 1173, + "name": "fab1/35/3", + "controllingPort": 1173, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + } + } + }, + "1174": { + "mapping": { + "id": 1174, + "name": "fab1/35/7", + "controllingPort": 1174, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + } + } + }, + "1175": { + "mapping": { + "id": 1175, + "name": "fab1/35/8", + "controllingPort": 1175, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + } + } + }, + "1176": { + "mapping": { + "id": 1176, + "name": "fab1/36/1", + "controllingPort": 1176, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + } + } + }, + "1177": { + "mapping": { + "id": 1177, + "name": "fab1/36/2", + "controllingPort": 1177, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + } + } + }, + "1178": { + "mapping": { + "id": 1178, + "name": "fab1/36/3", + "controllingPort": 1178, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + } + } + }, + "1179": { + "mapping": { + "id": 1179, + "name": "fab1/36/7", + "controllingPort": 1179, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + } + } + }, + "1180": { + "mapping": { + "id": 1180, + "name": "fab1/36/6", + "controllingPort": 1180, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + } + } + }, + "1181": { + "mapping": { + "id": 1181, + "name": "fab1/36/5", + "controllingPort": 1181, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + } + } + }, + "1182": { + "mapping": { + "id": 1182, + "name": "fab1/36/8", + "controllingPort": 1182, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + } + } + }, + "1183": { + "mapping": { + "id": 1183, + "name": "fab1/36/4", + "controllingPort": 1183, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + } + } + }, + "16385": { + "mapping": { + "id": 16385, + "name": "eth1/19/5", + "controllingPort": 1, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip19", + "lane": 7 + } + } + ] + } + } + } + }, + "16388": { + "mapping": { + "id": 16388, + "name": "eth1/18/5", + "controllingPort": 4, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 7, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + } + } + }, + "16391": { + "mapping": { + "id": 16391, + "name": "rcy1/1/447", + "controllingPort": 16391, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core447", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 0, + "attachedCorePortIndex": 13, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core447", + "lane": 0 + } + } + ] + } + } + } + }, + "16393": { + "mapping": { + "id": 16393, + "name": "eth1/13/5", + "controllingPort": 9, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + } + } + }, + "16396": { + "mapping": { + "id": 16396, + "name": "eth1/14/5", + "controllingPort": 12, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 7, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + } + } + }, + "16399": { + "mapping": { + "id": 16399, + "name": "eth1/20/5", + "controllingPort": 15, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + } + } + }, + "16402": { + "mapping": { + "id": 16402, + "name": "eth1/21/5", + "controllingPort": 18, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 7, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + } + } + }, + "16405": { + "mapping": { + "id": 16405, + "name": "eth1/27/5", + "controllingPort": 21, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + } + } + }, + "16408": { + "mapping": { + "id": 16408, + "name": "eth1/25/5", + "controllingPort": 24, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 7, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -8, + "pre2": 0, + "main": 89, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + }, + "24": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -24, + "pre2": 4, + "main": 130, + "post": -12, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + }, + "38": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + }, + "45": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -36, + "pre2": 14, + "main": 112, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": -4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + } + } + }, + "16411": { + "mapping": { + "id": 16411, + "name": "eth1/39/1", + "controllingPort": 16411, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + } + ], + "portType": 4, + "attachedCoreId": 3, + "attachedCorePortIndex": 13, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "22": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + ] + } + }, + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + ] + } + } + } + }, + "32769": { + "mapping": { + "id": 32769, + "name": "rcy1/1/441", + "controllingPort": 32769, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core441", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 1, + "attachedCorePortIndex": 18, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core441", + "lane": 0 + } + } + ] + } + } + } + }, + "32770": { + "mapping": { + "id": 32770, + "name": "rcy1/1/442", + "controllingPort": 32770, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core442", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 0, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core442", + "lane": 0 + } + } + ] + } + } + } + }, + "32771": { + "mapping": { + "id": 32771, + "name": "rcy1/1/443", + "controllingPort": 32771, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core443", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 2, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core443", + "lane": 0 + } + } + ] + } + } + } + }, + "32772": { + "mapping": { + "id": 32772, + "name": "evt1/1/504", + "controllingPort": 32772, + "pins": [ + { + "a": { + "chip": "NPU-J3_EVT-slot1/chip1/core504", + "lane": 0 + } + } + ], + "portType": 5, + "attachedCoreId": 2, + "attachedCorePortIndex": 18, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_EVT-slot1/chip1/core504", + "lane": 0 + } + } + ] + } + } + } + }, + "32773": { + "mapping": { + "id": 32773, + "name": "rcy1/1/445", + "controllingPort": 32773, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core445", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 3, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core445", + "lane": 0 + } + } + ] + } + } + } + } + }, + "chips": [ + { + "name": "NPU-J3_FE-slot1/chip1/core0", + "type": 1, + "physicalID": 0 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core0", + "type": 1, + "physicalID": 0 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core1", + "type": 1, + "physicalID": 1 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core1", + "type": 1, + "physicalID": 1 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core2", + "type": 1, + "physicalID": 2 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core2", + "type": 1, + "physicalID": 2 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core3", + "type": 1, + "physicalID": 3 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core3", + "type": 1, + "physicalID": 3 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core4", + "type": 1, + "physicalID": 4 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core4", + "type": 1, + "physicalID": 4 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core5", + "type": 1, + "physicalID": 5 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core5", + "type": 1, + "physicalID": 5 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core6", + "type": 1, + "physicalID": 6 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core6", + "type": 1, + "physicalID": 6 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core7", + "type": 1, + "physicalID": 7 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core7", + "type": 1, + "physicalID": 7 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core8", + "type": 1, + "physicalID": 8 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core8", + "type": 1, + "physicalID": 8 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core9", + "type": 1, + "physicalID": 9 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core9", + "type": 1, + "physicalID": 9 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core10", + "type": 1, + "physicalID": 10 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core10", + "type": 1, + "physicalID": 10 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core11", + "type": 1, + "physicalID": 11 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core11", + "type": 1, + "physicalID": 11 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core12", + "type": 1, + "physicalID": 12 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core12", + "type": 1, + "physicalID": 12 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core13", + "type": 1, + "physicalID": 13 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core13", + "type": 1, + "physicalID": 13 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core14", + "type": 1, + "physicalID": 14 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core14", + "type": 1, + "physicalID": 14 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core15", + "type": 1, + "physicalID": 15 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core15", + "type": 1, + "physicalID": 15 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core16", + "type": 1, + "physicalID": 16 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core16", + "type": 1, + "physicalID": 16 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core17", + "type": 1, + "physicalID": 17 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core17", + "type": 1, + "physicalID": 17 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core18", + "type": 1, + "physicalID": 18 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core18", + "type": 1, + "physicalID": 18 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core19", + "type": 1, + "physicalID": 19 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core441", + "type": 1, + "physicalID": 441 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core442", + "type": 1, + "physicalID": 442 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core443", + "type": 1, + "physicalID": 443 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core444", + "type": 1, + "physicalID": 444 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core445", + "type": 1, + "physicalID": 445 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core447", + "type": 1, + "physicalID": 447 + }, + { + "name": "NPU-J3_EVT-slot1/chip1/core504", + "type": 1, + "physicalID": 504 + }, + { + "name": "NPU-J3_EVT-slot1/chip1/core506", + "type": 1, + "physicalID": 506 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip1", + "type": 3, + "physicalID": 0 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip2", + "type": 3, + "physicalID": 1 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip3", + "type": 3, + "physicalID": 2 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip4", + "type": 3, + "physicalID": 3 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip5", + "type": 3, + "physicalID": 4 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip6", + "type": 3, + "physicalID": 5 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip7", + "type": 3, + "physicalID": 6 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip8", + "type": 3, + "physicalID": 7 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip9", + "type": 3, + "physicalID": 8 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip10", + "type": 3, + "physicalID": 9 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip11", + "type": 3, + "physicalID": 10 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip12", + "type": 3, + "physicalID": 11 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip13", + "type": 3, + "physicalID": 12 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip14", + "type": 3, + "physicalID": 13 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip15", + "type": 3, + "physicalID": 14 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip16", + "type": 3, + "physicalID": 15 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip17", + "type": 3, + "physicalID": 16 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip18", + "type": 3, + "physicalID": 17 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip19", + "type": 3, + "physicalID": 18 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip20", + "type": 3, + "physicalID": 19 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip21", + "type": 3, + "physicalID": 20 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip22", + "type": 3, + "physicalID": 21 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip23", + "type": 3, + "physicalID": 22 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip24", + "type": 3, + "physicalID": 23 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip25", + "type": 3, + "physicalID": 24 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip26", + "type": 3, + "physicalID": 25 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip27", + "type": 3, + "physicalID": 26 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip28", + "type": 3, + "physicalID": 27 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip29", + "type": 3, + "physicalID": 28 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip30", + "type": 3, + "physicalID": 29 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip31", + "type": 3, + "physicalID": 30 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip32", + "type": 3, + "physicalID": 31 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip33", + "type": 3, + "physicalID": 32 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip34", + "type": 3, + "physicalID": 33 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip35", + "type": 3, + "physicalID": 34 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip36", + "type": 3, + "physicalID": 35 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip37", + "type": 3, + "physicalID": 36 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip38", + "type": 3, + "physicalID": 37 + }, + { + "name": "TRANSCEIVER-QSFP28-slot1/chip39", + "type": 3, + "physicalID": 38 + } + ], + "platformSupportedProfiles": [ + { + "factor": { + "profileID": 35 + }, + "profile": { + "speed": 400000, + "iphy": { + "numLanes": 8, + "modulation": 2, + "fec": 11, + "medium": 1, + "interfaceType": 13 + } + } + }, + { + "factor": { + "profileID": 36 + }, + "profile": { + "speed": 53125, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 545, + "medium": 1, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 37 + }, + "profile": { + "speed": 53125, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 545, + "medium": 3, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 38 + }, + "profile": { + "speed": 400000, + "iphy": { + "numLanes": 4, + "modulation": 2, + "fec": 11, + "medium": 3, + "interfaceType": 21 + } + } + }, + { + "factor": { + "profileID": 39 + }, + "profile": { + "speed": 800000, + "iphy": { + "numLanes": 8, + "modulation": 2, + "fec": 11, + "medium": 3, + "interfaceType": 23 + } + } + }, + { + "factor": { + "profileID": 41 + }, + "profile": { + "speed": 106250, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 11, + "medium": 1, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 42 + }, + "profile": { + "speed": 106250, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 11, + "medium": 3, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 45 + }, + "profile": { + "speed": 400000, + "iphy": { + "numLanes": 4, + "modulation": 2, + "fec": 11, + "medium": 1, + "interfaceType": 12 + } + } + }, + { + "factor": { + "profileID": 49 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 1, + "medium": 1, + "interfaceType": 10 + } + } + }, + { + "factor": { + "profileID": 22 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 4, + "modulation": 1, + "fec": 528, + "medium": 1, + "interfaceType": 12 + } + } + }, + { + "factor": { + "profileID": 23 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 4, + "modulation": 1, + "fec": 528, + "medium": 3, + "interfaceType": 21 + } + } + }, + { + "factor": { + "profileID": 24 + }, + "profile": { + "speed": 200000, + "iphy": { + "numLanes": 4, + "modulation": 2, + "fec": 11, + "medium": 1, + "interfaceType": 12 + } + } + } + ] +} +)"; + +constexpr auto kJsonDualStageEdsw3q2qPlatformMappingStr = R"( +{ + "ports": { + "1": { + "mapping": { + "id": 1, + "name": "eth1/16/1", + "controllingPort": 1, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip16", + "lane": 7 + } + } + ] + } + } + } + }, + "2": { + "mapping": { + "id": 2, + "name": "eth1/15/1", + "controllingPort": 2, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip15", + "lane": 7 + } + } + ] + } + } + } + }, + "3": { + "mapping": { + "id": 3, + "name": "eth1/17/1", + "controllingPort": 3, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip17", + "lane": 7 + } + } + ] + } + } + } + }, + "4": { + "mapping": { + "id": 4, + "name": "eth1/13/1", + "controllingPort": 4, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip13", + "lane": 7 + } + } + ] + } + } + } + }, + "5": { + "mapping": { + "id": 5, + "name": "eth1/14/1", + "controllingPort": 5, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip14", + "lane": 7 + } + } + ] + } + } + } + }, + "6": { + "mapping": { + "id": 6, + "name": "eth1/12/1", + "controllingPort": 6, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip12", + "lane": 7 + } + } + ] + } + } + } + }, + "7": { + "mapping": { + "id": 7, + "name": "eth1/20/1", + "controllingPort": 7, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip20", + "lane": 7 + } + } + ] + } + } + } + }, + "8": { + "mapping": { + "id": 8, + "name": "eth1/21/1", + "controllingPort": 8, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip21", + "lane": 7 + } + } + ] + } + } + } + }, + "9": { + "mapping": { + "id": 9, + "name": "eth1/24/1", + "controllingPort": 9, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip24", + "lane": 7 + } + } + ] + } + } + } + }, + "10": { + "mapping": { + "id": 10, + "name": "rcy1/1/447", + "controllingPort": 10, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core447", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 2, + "attachedCorePortIndex": 6, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core447", + "lane": 0 + } + } + ] + } + } + } + }, + "11": { + "mapping": { + "id": 11, + "name": "eth1/39/1", + "controllingPort": 11, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + } + ], + "portType": 4, + "attachedCoreId": 2, + "attachedCorePortIndex": 8, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "22": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 4, + "pre2": 0, + "main": 31, + "post": 8, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + ] + } + }, + "23": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 3, + "pre2": 0, + "main": 31, + "post": 13, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-QSFP28-slot1/chip39", + "lane": 3 + } + } + ] + } + } + } + }, + "12": { + "mapping": { + "id": 12, + "name": "eth1/27/1", + "controllingPort": 12, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 0, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip27", + "lane": 7 + } + } + ] + } + } + } + }, + "13": { + "mapping": { + "id": 13, + "name": "eth1/26/1", + "controllingPort": 13, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 2, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip26", + "lane": 7 + } + } + ] + } + } + } + }, + "14": { + "mapping": { + "id": 14, + "name": "eth1/23/1", + "controllingPort": 14, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 4, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip23", + "lane": 7 + } + } + ] + } + } + } + }, + "1024": { + "mapping": { + "id": 1024, + "name": "fab1/10/3", + "controllingPort": 1024, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 2 + } + } + ] + } + } + } + }, + "1025": { + "mapping": { + "id": 1025, + "name": "fab1/10/2", + "controllingPort": 1025, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 1 + } + } + ] + } + } + } + }, + "1026": { + "mapping": { + "id": 1026, + "name": "fab1/10/1", + "controllingPort": 1026, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 0 + } + } + ] + } + } + } + }, + "1027": { + "mapping": { + "id": 1027, + "name": "fab1/10/5", + "controllingPort": 1027, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 4 + } + } + ] + } + } + } + }, + "1028": { + "mapping": { + "id": 1028, + "name": "fab1/10/8", + "controllingPort": 1028, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 7 + } + } + ] + } + } + } + }, + "1029": { + "mapping": { + "id": 1029, + "name": "fab1/10/7", + "controllingPort": 1029, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 6 + } + } + ] + } + } + } + }, + "1030": { + "mapping": { + "id": 1030, + "name": "fab1/10/6", + "controllingPort": 1030, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 5 + } + } + ] + } + } + } + }, + "1031": { + "mapping": { + "id": 1031, + "name": "fab1/10/4", + "controllingPort": 1031, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core0", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip10", + "lane": 3 + } + } + ] + } + } + } + }, + "1032": { + "mapping": { + "id": 1032, + "name": "fab1/9/3", + "controllingPort": 1032, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 2 + } + } + ] + } + } + } + }, + "1033": { + "mapping": { + "id": 1033, + "name": "fab1/9/2", + "controllingPort": 1033, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 1 + } + } + ] + } + } + } + }, + "1034": { + "mapping": { + "id": 1034, + "name": "fab1/9/1", + "controllingPort": 1034, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 0 + } + } + ] + } + } + } + }, + "1035": { + "mapping": { + "id": 1035, + "name": "fab1/9/5", + "controllingPort": 1035, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 4 + } + } + ] + } + } + } + }, + "1036": { + "mapping": { + "id": 1036, + "name": "fab1/9/8", + "controllingPort": 1036, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 7 + } + } + ] + } + } + } + }, + "1037": { + "mapping": { + "id": 1037, + "name": "fab1/9/7", + "controllingPort": 1037, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 6 + } + } + ] + } + } + } + }, + "1038": { + "mapping": { + "id": 1038, + "name": "fab1/9/6", + "controllingPort": 1038, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 5 + } + } + ] + } + } + } + }, + "1039": { + "mapping": { + "id": 1039, + "name": "fab1/9/4", + "controllingPort": 1039, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core1", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip9", + "lane": 3 + } + } + ] + } + } + } + }, + "1040": { + "mapping": { + "id": 1040, + "name": "fab1/8/3", + "controllingPort": 1040, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 2 + } + } + ] + } + } + } + }, + "1041": { + "mapping": { + "id": 1041, + "name": "fab1/8/4", + "controllingPort": 1041, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 3 + } + } + ] + } + } + } + }, + "1042": { + "mapping": { + "id": 1042, + "name": "fab1/8/1", + "controllingPort": 1042, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 0 + } + } + ] + } + } + } + }, + "1043": { + "mapping": { + "id": 1043, + "name": "fab1/8/2", + "controllingPort": 1043, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 1 + } + } + ] + } + } + } + }, + "1044": { + "mapping": { + "id": 1044, + "name": "fab1/8/5", + "controllingPort": 1044, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 4 + } + } + ] + } + } + } + }, + "1045": { + "mapping": { + "id": 1045, + "name": "fab1/8/6", + "controllingPort": 1045, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 5 + } + } + ] + } + } + } + }, + "1046": { + "mapping": { + "id": 1046, + "name": "fab1/8/7", + "controllingPort": 1046, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 6 + } + } + ] + } + } + } + }, + "1047": { + "mapping": { + "id": 1047, + "name": "fab1/8/8", + "controllingPort": 1047, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip8", + "lane": 7 + } + } + ] + } + } + } + }, + "1048": { + "mapping": { + "id": 1048, + "name": "fab1/7/1", + "controllingPort": 1048, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 0 + } + } + ] + } + } + } + }, + "1049": { + "mapping": { + "id": 1049, + "name": "fab1/7/2", + "controllingPort": 1049, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 1 + } + } + ] + } + } + } + }, + "1050": { + "mapping": { + "id": 1050, + "name": "fab1/7/3", + "controllingPort": 1050, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 2 + } + } + ] + } + } + } + }, + "1051": { + "mapping": { + "id": 1051, + "name": "fab1/7/4", + "controllingPort": 1051, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 3 + } + } + ] + } + } + } + }, + "1052": { + "mapping": { + "id": 1052, + "name": "fab1/7/5", + "controllingPort": 1052, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 4 + } + } + ] + } + } + } + }, + "1053": { + "mapping": { + "id": 1053, + "name": "fab1/7/6", + "controllingPort": 1053, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 5 + } + } + ] + } + } + } + }, + "1054": { + "mapping": { + "id": 1054, + "name": "fab1/7/7", + "controllingPort": 1054, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 6 + } + } + ] + } + } + } + }, + "1055": { + "mapping": { + "id": 1055, + "name": "fab1/7/8", + "controllingPort": 1055, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core3", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip7", + "lane": 7 + } + } + ] + } + } + } + }, + "1056": { + "mapping": { + "id": 1056, + "name": "fab1/6/7", + "controllingPort": 1056, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 6 + } + } + ] + } + } + } + }, + "1057": { + "mapping": { + "id": 1057, + "name": "fab1/6/4", + "controllingPort": 1057, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 3 + } + } + ] + } + } + } + }, + "1058": { + "mapping": { + "id": 1058, + "name": "fab1/6/6", + "controllingPort": 1058, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 5 + } + } + ] + } + } + } + }, + "1059": { + "mapping": { + "id": 1059, + "name": "fab1/6/8", + "controllingPort": 1059, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 7 + } + } + ] + } + } + } + }, + "1060": { + "mapping": { + "id": 1060, + "name": "fab1/6/5", + "controllingPort": 1060, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 4 + } + } + ] + } + } + } + }, + "1061": { + "mapping": { + "id": 1061, + "name": "fab1/6/1", + "controllingPort": 1061, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 0 + } + } + ] + } + } + } + }, + "1062": { + "mapping": { + "id": 1062, + "name": "fab1/6/3", + "controllingPort": 1062, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 2 + } + } + ] + } + } + } + }, + "1063": { + "mapping": { + "id": 1063, + "name": "fab1/6/2", + "controllingPort": 1063, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core4", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip6", + "lane": 1 + } + } + ] + } + } + } + }, + "1064": { + "mapping": { + "id": 1064, + "name": "fab1/5/7", + "controllingPort": 1064, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 6 + } + } + ] + } + } + } + }, + "1065": { + "mapping": { + "id": 1065, + "name": "fab1/5/4", + "controllingPort": 1065, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 3 + } + } + ] + } + } + } + }, + "1066": { + "mapping": { + "id": 1066, + "name": "fab1/5/6", + "controllingPort": 1066, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 5 + } + } + ] + } + } + } + }, + "1067": { + "mapping": { + "id": 1067, + "name": "fab1/5/8", + "controllingPort": 1067, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 7 + } + } + ] + } + } + } + }, + "1068": { + "mapping": { + "id": 1068, + "name": "fab1/5/5", + "controllingPort": 1068, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 4 + } + } + ] + } + } + } + }, + "1069": { + "mapping": { + "id": 1069, + "name": "fab1/5/3", + "controllingPort": 1069, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 2 + } + } + ] + } + } + } + }, + "1070": { + "mapping": { + "id": 1070, + "name": "fab1/5/1", + "controllingPort": 1070, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 0 + } + } + ] + } + } + } + }, + "1071": { + "mapping": { + "id": 1071, + "name": "fab1/5/2", + "controllingPort": 1071, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core5", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip5", + "lane": 1 + } + } + ] + } + } + } + }, + "1072": { + "mapping": { + "id": 1072, + "name": "fab1/4/3", + "controllingPort": 1072, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 2 + } + } + ] + } + } + } + }, + "1073": { + "mapping": { + "id": 1073, + "name": "fab1/4/4", + "controllingPort": 1073, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 3 + } + } + ] + } + } + } + }, + "1074": { + "mapping": { + "id": 1074, + "name": "fab1/4/1", + "controllingPort": 1074, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 0 + } + } + ] + } + } + } + }, + "1075": { + "mapping": { + "id": 1075, + "name": "fab1/4/2", + "controllingPort": 1075, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 1 + } + } + ] + } + } + } + }, + "1076": { + "mapping": { + "id": 1076, + "name": "fab1/4/5", + "controllingPort": 1076, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 4 + } + } + ] + } + } + } + }, + "1077": { + "mapping": { + "id": 1077, + "name": "fab1/4/6", + "controllingPort": 1077, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 5 + } + } + ] + } + } + } + }, + "1078": { + "mapping": { + "id": 1078, + "name": "fab1/4/7", + "controllingPort": 1078, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 6 + } + } + ] + } + } + } + }, + "1079": { + "mapping": { + "id": 1079, + "name": "fab1/4/8", + "controllingPort": 1079, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip4", + "lane": 7 + } + } + ] + } + } + } + }, + "1080": { + "mapping": { + "id": 1080, + "name": "fab1/3/1", + "controllingPort": 1080, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 0 + } + } + ] + } + } + } + }, + "1081": { + "mapping": { + "id": 1081, + "name": "fab1/3/2", + "controllingPort": 1081, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 1 + } + } + ] + } + } + } + }, + "1082": { + "mapping": { + "id": 1082, + "name": "fab1/3/3", + "controllingPort": 1082, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 2 + } + } + ] + } + } + } + }, + "1083": { + "mapping": { + "id": 1083, + "name": "fab1/3/4", + "controllingPort": 1083, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 3 + } + } + ] + } + } + } + }, + "1084": { + "mapping": { + "id": 1084, + "name": "fab1/3/5", + "controllingPort": 1084, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 4 + } + } + ] + } + } + } + }, + "1085": { + "mapping": { + "id": 1085, + "name": "fab1/3/6", + "controllingPort": 1085, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 5 + } + } + ] + } + } + } + }, + "1086": { + "mapping": { + "id": 1086, + "name": "fab1/3/7", + "controllingPort": 1086, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 6 + } + } + ] + } + } + } + }, + "1087": { + "mapping": { + "id": 1087, + "name": "fab1/3/8", + "controllingPort": 1087, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core7", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip3", + "lane": 7 + } + } + ] + } + } + } + }, + "1088": { + "mapping": { + "id": 1088, + "name": "fab1/1/3", + "controllingPort": 1088, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 2 + } + } + ] + } + } + } + }, + "1089": { + "mapping": { + "id": 1089, + "name": "fab1/1/2", + "controllingPort": 1089, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 1 + } + } + ] + } + } + } + }, + "1090": { + "mapping": { + "id": 1090, + "name": "fab1/1/6", + "controllingPort": 1090, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 5 + } + } + ] + } + } + } + }, + "1091": { + "mapping": { + "id": 1091, + "name": "fab1/1/4", + "controllingPort": 1091, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 3 + } + } + ] + } + } + } + }, + "1092": { + "mapping": { + "id": 1092, + "name": "fab1/1/5", + "controllingPort": 1092, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 4 + } + } + ] + } + } + } + }, + "1093": { + "mapping": { + "id": 1093, + "name": "fab1/1/1", + "controllingPort": 1093, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 0 + } + } + ] + } + } + } + }, + "1094": { + "mapping": { + "id": 1094, + "name": "fab1/1/7", + "controllingPort": 1094, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 6 + } + } + ] + } + } + } + }, + "1095": { + "mapping": { + "id": 1095, + "name": "fab1/1/8", + "controllingPort": 1095, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core8", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip1", + "lane": 7 + } + } + ] + } + } + } + }, + "1096": { + "mapping": { + "id": 1096, + "name": "fab1/2/1", + "controllingPort": 1096, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 0 + } + } + ] + } + } + } + }, + "1097": { + "mapping": { + "id": 1097, + "name": "fab1/2/4", + "controllingPort": 1097, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 3 + } + } + ] + } + } + } + }, + "1098": { + "mapping": { + "id": 1098, + "name": "fab1/2/3", + "controllingPort": 1098, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 2 + } + } + ] + } + } + } + }, + "1099": { + "mapping": { + "id": 1099, + "name": "fab1/2/8", + "controllingPort": 1099, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 7 + } + } + ] + } + } + } + }, + "1100": { + "mapping": { + "id": 1100, + "name": "fab1/2/5", + "controllingPort": 1100, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 4 + } + } + ] + } + } + } + }, + "1101": { + "mapping": { + "id": 1101, + "name": "fab1/2/6", + "controllingPort": 1101, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 5 + } + } + ] + } + } + } + }, + "1102": { + "mapping": { + "id": 1102, + "name": "fab1/2/7", + "controllingPort": 1102, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 6 + } + } + ] + } + } + } + }, + "1103": { + "mapping": { + "id": 1103, + "name": "fab1/2/2", + "controllingPort": 1103, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core9", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip2", + "lane": 1 + } + } + ] + } + } + } + }, + "1104": { + "mapping": { + "id": 1104, + "name": "fab1/30/7", + "controllingPort": 1104, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 6 + } + } + ] + } + } + } + }, + "1105": { + "mapping": { + "id": 1105, + "name": "fab1/30/4", + "controllingPort": 1105, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 3 + } + } + ] + } + } + } + }, + "1106": { + "mapping": { + "id": 1106, + "name": "fab1/30/6", + "controllingPort": 1106, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 5 + } + } + ] + } + } + } + }, + "1107": { + "mapping": { + "id": 1107, + "name": "fab1/30/8", + "controllingPort": 1107, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 7 + } + } + ] + } + } + } + }, + "1108": { + "mapping": { + "id": 1108, + "name": "fab1/30/5", + "controllingPort": 1108, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 4 + } + } + ] + } + } + } + }, + "1109": { + "mapping": { + "id": 1109, + "name": "fab1/30/3", + "controllingPort": 1109, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 2 + } + } + ] + } + } + } + }, + "1110": { + "mapping": { + "id": 1110, + "name": "fab1/30/1", + "controllingPort": 1110, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 0 + } + } + ] + } + } + } + }, + "1111": { + "mapping": { + "id": 1111, + "name": "fab1/30/2", + "controllingPort": 1111, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip30", + "lane": 1 + } + } + ] + } + } + } + }, + "1112": { + "mapping": { + "id": 1112, + "name": "fab1/29/3", + "controllingPort": 1112, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 2 + } + } + ] + } + } + } + }, + "1113": { + "mapping": { + "id": 1113, + "name": "fab1/29/8", + "controllingPort": 1113, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 7 + } + } + ] + } + } + } + }, + "1114": { + "mapping": { + "id": 1114, + "name": "fab1/29/7", + "controllingPort": 1114, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 6 + } + } + ] + } + } + } + }, + "1115": { + "mapping": { + "id": 1115, + "name": "fab1/29/5", + "controllingPort": 1115, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 4 + } + } + ] + } + } + } + }, + "1116": { + "mapping": { + "id": 1116, + "name": "fab1/29/2", + "controllingPort": 1116, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 1 + } + } + ] + } + } + } + }, + "1117": { + "mapping": { + "id": 1117, + "name": "fab1/29/1", + "controllingPort": 1117, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 0 + } + } + ] + } + } + } + }, + "1118": { + "mapping": { + "id": 1118, + "name": "fab1/29/6", + "controllingPort": 1118, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 5 + } + } + ] + } + } + } + }, + "1119": { + "mapping": { + "id": 1119, + "name": "fab1/29/4", + "controllingPort": 1119, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core11", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip29", + "lane": 3 + } + } + ] + } + } + } + }, + "1120": { + "mapping": { + "id": 1120, + "name": "fab1/32/1", + "controllingPort": 1120, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 0 + } + } + ] + } + } + } + }, + "1121": { + "mapping": { + "id": 1121, + "name": "fab1/32/4", + "controllingPort": 1121, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 3 + } + } + ] + } + } + } + }, + "1122": { + "mapping": { + "id": 1122, + "name": "fab1/32/6", + "controllingPort": 1122, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 5 + } + } + ] + } + } + } + }, + "1123": { + "mapping": { + "id": 1123, + "name": "fab1/32/2", + "controllingPort": 1123, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 1 + } + } + ] + } + } + } + }, + "1124": { + "mapping": { + "id": 1124, + "name": "fab1/32/5", + "controllingPort": 1124, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 4 + } + } + ] + } + } + } + }, + "1125": { + "mapping": { + "id": 1125, + "name": "fab1/32/3", + "controllingPort": 1125, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 2 + } + } + ] + } + } + } + }, + "1126": { + "mapping": { + "id": 1126, + "name": "fab1/32/7", + "controllingPort": 1126, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 6 + } + } + ] + } + } + } + }, + "1127": { + "mapping": { + "id": 1127, + "name": "fab1/32/8", + "controllingPort": 1127, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core12", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip32", + "lane": 7 + } + } + ] + } + } + } + }, + "1128": { + "mapping": { + "id": 1128, + "name": "fab1/33/6", + "controllingPort": 1128, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 5 + } + } + ] + } + } + } + }, + "1129": { + "mapping": { + "id": 1129, + "name": "fab1/33/8", + "controllingPort": 1129, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 7 + } + } + ] + } + } + } + }, + "1130": { + "mapping": { + "id": 1130, + "name": "fab1/33/7", + "controllingPort": 1130, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 6 + } + } + ] + } + } + } + }, + "1131": { + "mapping": { + "id": 1131, + "name": "fab1/33/5", + "controllingPort": 1131, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 4 + } + } + ] + } + } + } + }, + "1132": { + "mapping": { + "id": 1132, + "name": "fab1/33/2", + "controllingPort": 1132, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 1 + } + } + ] + } + } + } + }, + "1133": { + "mapping": { + "id": 1133, + "name": "fab1/33/1", + "controllingPort": 1133, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 0 + } + } + ] + } + } + } + }, + "1134": { + "mapping": { + "id": 1134, + "name": "fab1/33/3", + "controllingPort": 1134, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 2 + } + } + ] + } + } + } + }, + "1135": { + "mapping": { + "id": 1135, + "name": "fab1/33/4", + "controllingPort": 1135, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core13", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip33", + "lane": 3 + } + } + ] + } + } + } + }, + "1136": { + "mapping": { + "id": 1136, + "name": "fab1/31/6", + "controllingPort": 1136, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 5 + } + } + ] + } + } + } + }, + "1137": { + "mapping": { + "id": 1137, + "name": "fab1/31/8", + "controllingPort": 1137, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 7 + } + } + ] + } + } + } + }, + "1138": { + "mapping": { + "id": 1138, + "name": "fab1/31/1", + "controllingPort": 1138, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 0 + } + } + ] + } + } + } + }, + "1139": { + "mapping": { + "id": 1139, + "name": "fab1/31/2", + "controllingPort": 1139, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 1 + } + } + ] + } + } + } + }, + "1140": { + "mapping": { + "id": 1140, + "name": "fab1/31/5", + "controllingPort": 1140, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 4 + } + } + ] + } + } + } + }, + "1141": { + "mapping": { + "id": 1141, + "name": "fab1/31/3", + "controllingPort": 1141, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 2 + } + } + ] + } + } + } + }, + "1142": { + "mapping": { + "id": 1142, + "name": "fab1/31/7", + "controllingPort": 1142, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 6 + } + } + ] + } + } + } + }, + "1143": { + "mapping": { + "id": 1143, + "name": "fab1/31/4", + "controllingPort": 1143, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core14", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip31", + "lane": 3 + } + } + ] + } + } + } + }, + "1144": { + "mapping": { + "id": 1144, + "name": "fab1/34/3", + "controllingPort": 1144, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 2 + } + } + ] + } + } + } + }, + "1145": { + "mapping": { + "id": 1145, + "name": "fab1/34/8", + "controllingPort": 1145, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 7 + } + } + ] + } + } + } + }, + "1146": { + "mapping": { + "id": 1146, + "name": "fab1/34/5", + "controllingPort": 1146, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 4 + } + } + ] + } + } + } + }, + "1147": { + "mapping": { + "id": 1147, + "name": "fab1/34/7", + "controllingPort": 1147, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 6 + } + } + ] + } + } + } + }, + "1148": { + "mapping": { + "id": 1148, + "name": "fab1/34/6", + "controllingPort": 1148, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 5 + } + } + ] + } + } + } + }, + "1149": { + "mapping": { + "id": 1149, + "name": "fab1/34/1", + "controllingPort": 1149, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 0 + } + } + ] + } + } + } + }, + "1150": { + "mapping": { + "id": 1150, + "name": "fab1/34/2", + "controllingPort": 1150, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 1 + } + } + ] + } + } + } + }, + "1151": { + "mapping": { + "id": 1151, + "name": "fab1/34/4", + "controllingPort": 1151, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 116, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip34", + "lane": 3 + } + } + ] + } + } + } + }, + "1152": { + "mapping": { + "id": 1152, + "name": "fab1/38/5", + "controllingPort": 1152, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 4 + } + } + ] + } + } + } + }, + "1153": { + "mapping": { + "id": 1153, + "name": "fab1/38/4", + "controllingPort": 1153, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 3 + } + } + ] + } + } + } + }, + "1154": { + "mapping": { + "id": 1154, + "name": "fab1/38/6", + "controllingPort": 1154, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 5 + } + } + ] + } + } + } + }, + "1155": { + "mapping": { + "id": 1155, + "name": "fab1/38/8", + "controllingPort": 1155, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 7 + } + } + ] + } + } + } + }, + "1156": { + "mapping": { + "id": 1156, + "name": "fab1/38/1", + "controllingPort": 1156, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 0 + } + } + ] + } + } + } + }, + "1157": { + "mapping": { + "id": 1157, + "name": "fab1/38/3", + "controllingPort": 1157, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 2 + } + } + ] + } + } + } + }, + "1158": { + "mapping": { + "id": 1158, + "name": "fab1/38/7", + "controllingPort": 1158, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 6 + } + } + ] + } + } + } + }, + "1159": { + "mapping": { + "id": 1159, + "name": "fab1/38/2", + "controllingPort": 1159, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core16", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip38", + "lane": 1 + } + } + ] + } + } + } + }, + "1160": { + "mapping": { + "id": 1160, + "name": "fab1/37/3", + "controllingPort": 1160, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 2 + } + } + ] + } + } + } + }, + "1161": { + "mapping": { + "id": 1161, + "name": "fab1/37/8", + "controllingPort": 1161, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 7 + } + } + ] + } + } + } + }, + "1162": { + "mapping": { + "id": 1162, + "name": "fab1/37/5", + "controllingPort": 1162, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 4 + } + } + ] + } + } + } + }, + "1163": { + "mapping": { + "id": 1163, + "name": "fab1/37/7", + "controllingPort": 1163, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 6 + } + } + ] + } + } + } + }, + "1164": { + "mapping": { + "id": 1164, + "name": "fab1/37/6", + "controllingPort": 1164, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 5 + } + } + ] + } + } + } + }, + "1165": { + "mapping": { + "id": 1165, + "name": "fab1/37/1", + "controllingPort": 1165, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 0 + } + } + ] + } + } + } + }, + "1166": { + "mapping": { + "id": 1166, + "name": "fab1/37/2", + "controllingPort": 1166, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 1 + } + } + ] + } + } + } + }, + "1167": { + "mapping": { + "id": 1167, + "name": "fab1/37/4", + "controllingPort": 1167, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core17", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip37", + "lane": 3 + } + } + ] + } + } + } + }, + "1168": { + "mapping": { + "id": 1168, + "name": "fab1/35/1", + "controllingPort": 1168, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 0 + } + } + ] + } + } + } + }, + "1169": { + "mapping": { + "id": 1169, + "name": "fab1/35/4", + "controllingPort": 1169, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 3 + } + } + ] + } + } + } + }, + "1170": { + "mapping": { + "id": 1170, + "name": "fab1/35/6", + "controllingPort": 1170, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 5 + } + } + ] + } + } + } + }, + "1171": { + "mapping": { + "id": 1171, + "name": "fab1/35/2", + "controllingPort": 1171, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 1 + } + } + ] + } + } + } + }, + "1172": { + "mapping": { + "id": 1172, + "name": "fab1/35/5", + "controllingPort": 1172, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 4 + } + } + ] + } + } + } + }, + "1173": { + "mapping": { + "id": 1173, + "name": "fab1/35/3", + "controllingPort": 1173, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 2 + } + } + ] + } + } + } + }, + "1174": { + "mapping": { + "id": 1174, + "name": "fab1/35/7", + "controllingPort": 1174, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 6 + } + } + ] + } + } + } + }, + "1175": { + "mapping": { + "id": 1175, + "name": "fab1/35/8", + "controllingPort": 1175, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core18", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip35", + "lane": 7 + } + } + ] + } + } + } + }, + "1176": { + "mapping": { + "id": 1176, + "name": "fab1/36/1", + "controllingPort": 1176, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 0 + } + } + ] + } + } + } + }, + "1177": { + "mapping": { + "id": 1177, + "name": "fab1/36/2", + "controllingPort": 1177, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 1 + } + } + ] + } + } + } + }, + "1178": { + "mapping": { + "id": 1178, + "name": "fab1/36/3", + "controllingPort": 1178, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 2 + } + } + ] + } + } + } + }, + "1179": { + "mapping": { + "id": 1179, + "name": "fab1/36/7", + "controllingPort": 1179, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 6 + } + } + ] + } + } + } + }, + "1180": { + "mapping": { + "id": 1180, + "name": "fab1/36/6", + "controllingPort": 1180, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 5 + } + } + ] + } + } + } + }, + "1181": { + "mapping": { + "id": 1181, + "name": "fab1/36/5", + "controllingPort": 1181, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 4 + } + } + ] + } + } + } + }, + "1182": { + "mapping": { + "id": 1182, + "name": "fab1/36/8", + "controllingPort": 1182, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 7 + } + } + ] + } + } + } + }, + "1183": { + "mapping": { + "id": 1183, + "name": "fab1/36/4", + "controllingPort": 1183, + "pins": [ + { + "a": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + } + ], + "portType": 1, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "36": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "37": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "41": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "tx": { + "pre": 0, + "pre2": 0, + "main": 136, + "post": 0, + "post2": 0, + "post3": 0, + "pre3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + }, + "42": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_FE-slot1/chip1/core19", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip36", + "lane": 3 + } + } + ] + } + } + } + }, + "16385": { + "mapping": { + "id": 16385, + "name": "eth1/18/1", + "controllingPort": 16385, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 0, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core2", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip18", + "lane": 7 + } + } + ] + } + } + } + }, + "16388": { + "mapping": { + "id": 16388, + "name": "eth1/11/1", + "controllingPort": 16388, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 1, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core6", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip11", + "lane": 7 + } + } + ] + } + } + } + }, + "16391": { + "mapping": { + "id": 16391, + "name": "eth1/22/1", + "controllingPort": 16391, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 2, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core10", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip22", + "lane": 7 + } + } + ] + } + } + } + }, + "16396": { + "mapping": { + "id": 16396, + "name": "eth1/25/1", + "controllingPort": 16396, + "pins": [ + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + } + }, + { + "a": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "z": { + "end": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + } + ], + "portType": 0, + "attachedCoreId": 3, + "attachedCorePortIndex": 1, + "virtualDeviceId": 0, + "scope": 1 + }, + "supportedProfiles": { + "39": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 0 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 1 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 2 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 3 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 4 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 5 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 6 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + }, + { + "id": { + "chip": "NPU-J3_NIF-slot1/chip1/core15", + "lane": 7 + }, + "tx": { + "pre": -16, + "pre2": 4, + "main": 96, + "post": 0, + "post2": 0, + "post3": 0 + } + } + ], + "transceiver": [ + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 0 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 1 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 2 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 3 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 4 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 5 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 6 + } + }, + { + "id": { + "chip": "TRANSCEIVER-OSFP-slot1/chip25", + "lane": 7 + } + } + ] + } + } + } + }, + "32769": { + "mapping": { + "id": 32769, + "name": "rcy1/1/441", + "controllingPort": 32769, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core441", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 1, + "attachedCorePortIndex": 18, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core441", + "lane": 0 + } + } + ] + } + } + } + }, + "32770": { + "mapping": { + "id": 32770, + "name": "rcy1/1/442", + "controllingPort": 32770, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core442", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 0, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core442", + "lane": 0 + } + } + ] + } + } + } + }, + "32771": { + "mapping": { + "id": 32771, + "name": "rcy1/1/443", + "controllingPort": 32771, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core443", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 2, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core443", + "lane": 0 + } + } + ] + } + } + } + }, + "32772": { + "mapping": { + "id": 32772, + "name": "evt1/1/504", + "controllingPort": 32772, + "pins": [ + { + "a": { + "chip": "NPU-J3_EVT-slot1/chip1/core504", + "lane": 0 + } + } + ], + "portType": 5, + "attachedCoreId": 2, + "attachedCorePortIndex": 18, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_EVT-slot1/chip1/core504", + "lane": 0 + } + } + ] + } + } + } + }, + "32773": { + "mapping": { + "id": 32773, + "name": "rcy1/1/445", + "controllingPort": 32773, + "pins": [ + { + "a": { + "chip": "NPU-J3_RCY-slot1/chip1/core445", + "lane": 0 + } + } + ], + "portType": 3, + "attachedCoreId": 3, + "attachedCorePortIndex": 16, + "virtualDeviceId": 0, + "scope": 0 + }, + "supportedProfiles": { + "49": { + "pins": { + "iphy": [ + { + "id": { + "chip": "NPU-J3_RCY-slot1/chip1/core445", + "lane": 0 + } + } + ] + } + } + } + } + }, + "chips": [ + { + "name": "NPU-J3_FE-slot1/chip1/core0", + "type": 1, + "physicalID": 0 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core0", + "type": 1, + "physicalID": 0 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core1", + "type": 1, + "physicalID": 1 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core1", + "type": 1, + "physicalID": 1 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core2", + "type": 1, + "physicalID": 2 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core2", + "type": 1, + "physicalID": 2 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core3", + "type": 1, + "physicalID": 3 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core3", + "type": 1, + "physicalID": 3 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core4", + "type": 1, + "physicalID": 4 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core4", + "type": 1, + "physicalID": 4 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core5", + "type": 1, + "physicalID": 5 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core5", + "type": 1, + "physicalID": 5 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core6", + "type": 1, + "physicalID": 6 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core6", + "type": 1, + "physicalID": 6 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core7", + "type": 1, + "physicalID": 7 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core7", + "type": 1, + "physicalID": 7 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core8", + "type": 1, + "physicalID": 8 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core8", + "type": 1, + "physicalID": 8 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core9", + "type": 1, + "physicalID": 9 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core9", + "type": 1, + "physicalID": 9 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core10", + "type": 1, + "physicalID": 10 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core10", + "type": 1, + "physicalID": 10 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core11", + "type": 1, + "physicalID": 11 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core11", + "type": 1, + "physicalID": 11 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core12", + "type": 1, + "physicalID": 12 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core12", + "type": 1, + "physicalID": 12 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core13", + "type": 1, + "physicalID": 13 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core13", + "type": 1, + "physicalID": 13 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core14", + "type": 1, + "physicalID": 14 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core14", + "type": 1, + "physicalID": 14 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core15", + "type": 1, + "physicalID": 15 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core15", + "type": 1, + "physicalID": 15 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core16", + "type": 1, + "physicalID": 16 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core16", + "type": 1, + "physicalID": 16 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core17", + "type": 1, + "physicalID": 17 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core17", + "type": 1, + "physicalID": 17 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core18", + "type": 1, + "physicalID": 18 + }, + { + "name": "NPU-J3_NIF-slot1/chip1/core18", + "type": 1, + "physicalID": 18 + }, + { + "name": "NPU-J3_FE-slot1/chip1/core19", + "type": 1, + "physicalID": 19 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core441", + "type": 1, + "physicalID": 441 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core442", + "type": 1, + "physicalID": 442 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core443", + "type": 1, + "physicalID": 443 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core444", + "type": 1, + "physicalID": 444 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core445", + "type": 1, + "physicalID": 445 + }, + { + "name": "NPU-J3_RCY-slot1/chip1/core447", + "type": 1, + "physicalID": 447 + }, + { + "name": "NPU-J3_EVT-slot1/chip1/core504", + "type": 1, + "physicalID": 504 + }, + { + "name": "NPU-J3_EVT-slot1/chip1/core506", + "type": 1, + "physicalID": 506 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip1", + "type": 3, + "physicalID": 0 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip2", + "type": 3, + "physicalID": 1 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip3", + "type": 3, + "physicalID": 2 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip4", + "type": 3, + "physicalID": 3 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip5", + "type": 3, + "physicalID": 4 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip6", + "type": 3, + "physicalID": 5 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip7", + "type": 3, + "physicalID": 6 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip8", + "type": 3, + "physicalID": 7 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip9", + "type": 3, + "physicalID": 8 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip10", + "type": 3, + "physicalID": 9 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip11", + "type": 3, + "physicalID": 10 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip12", + "type": 3, + "physicalID": 11 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip13", + "type": 3, + "physicalID": 12 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip14", + "type": 3, + "physicalID": 13 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip15", + "type": 3, + "physicalID": 14 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip16", + "type": 3, + "physicalID": 15 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip17", + "type": 3, + "physicalID": 16 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip18", + "type": 3, + "physicalID": 17 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip19", + "type": 3, + "physicalID": 18 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip20", + "type": 3, + "physicalID": 19 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip21", + "type": 3, + "physicalID": 20 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip22", + "type": 3, + "physicalID": 21 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip23", + "type": 3, + "physicalID": 22 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip24", + "type": 3, + "physicalID": 23 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip25", + "type": 3, + "physicalID": 24 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip26", + "type": 3, + "physicalID": 25 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip27", + "type": 3, + "physicalID": 26 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip28", + "type": 3, + "physicalID": 27 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip29", + "type": 3, + "physicalID": 28 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip30", + "type": 3, + "physicalID": 29 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip31", + "type": 3, + "physicalID": 30 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip32", + "type": 3, + "physicalID": 31 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip33", + "type": 3, + "physicalID": 32 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip34", + "type": 3, + "physicalID": 33 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip35", + "type": 3, + "physicalID": 34 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip36", + "type": 3, + "physicalID": 35 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip37", + "type": 3, + "physicalID": 36 + }, + { + "name": "TRANSCEIVER-OSFP-slot1/chip38", + "type": 3, + "physicalID": 37 + }, + { + "name": "TRANSCEIVER-QSFP28-slot1/chip39", + "type": 3, + "physicalID": 38 + } + ], + "platformSupportedProfiles": [ + { + "factor": { + "profileID": 36 + }, + "profile": { + "speed": 53125, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 545, + "medium": 1, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 37 + }, + "profile": { + "speed": 53125, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 545, + "medium": 3, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 39 + }, + "profile": { + "speed": 800000, + "iphy": { + "numLanes": 8, + "modulation": 2, + "fec": 11, + "medium": 3, + "interfaceType": 23 + } + } + }, + { + "factor": { + "profileID": 41 + }, + "profile": { + "speed": 106250, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 11, + "medium": 1, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 42 + }, + "profile": { + "speed": 106250, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 11, + "medium": 3, + "interfaceType": 41 + } + } + }, + { + "factor": { + "profileID": 49 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 1, + "modulation": 2, + "fec": 1, + "medium": 1, + "interfaceType": 10 + } + } + }, + { + "factor": { + "profileID": 22 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 4, + "modulation": 1, + "fec": 528, + "medium": 1, + "interfaceType": 12 + } + } + }, + { + "factor": { + "profileID": 23 + }, + "profile": { + "speed": 100000, + "iphy": { + "numLanes": 4, + "modulation": 1, + "fec": 528, + "medium": 3, "interfaceType": 21 } } @@ -97504,7 +165842,11 @@ constexpr auto kJsonEdswPlatformMappingStr = R"( Meru800biaPlatformMapping::Meru800biaPlatformMapping() : PlatformMapping( - FLAGS_dsf_100g_nif_breakout ? kJsonDsfJ3ScaleTestPlatformMappingStr + FLAGS_dual_stage_rdsw_3q_2q ? kJsonDualStageRdsw3q2qPlatformMappingStr + : FLAGS_dual_stage_edsw_3q_2q + ? kJsonDualStageEdsw3q2qPlatformMappingStr + : FLAGS_dsf_100g_nif_breakout + ? kJsonDsfJ3ScaleTestPlatformMappingStr : FLAGS_dsf_edsw_platform_mapping ? kJsonEdswPlatformMappingStr : kJsonPlatformMappingStr) {} diff --git a/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.cpp index 333c20e45e83c..bffe6db7262c5 100644 --- a/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk3Asic.h" #include "fboss/agent/platforms/common/darwin/DarwinPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -29,15 +28,11 @@ SaiBcmDarwinPlatform::SaiBcmDarwinPlatform( localMac) {} void SaiBcmDarwinPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmDarwinPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.h b/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.h index 81bd260b18385..35475405d6112 100644 --- a/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmDarwinPlatform.h @@ -39,12 +39,9 @@ class SaiBcmDarwinPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional fabricNodeRole) override; + const cfg::SwitchInfo& switchInfo, + std::optional fabricRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiBcmElbertPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmElbertPlatform.cpp index 739e37e083f60..1ac414438ecf8 100644 --- a/fboss/agent/platforms/sai/SaiBcmElbertPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmElbertPlatform.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/platforms/sai/SaiBcmElbertPlatform.h" #include "fboss/agent/platforms/common/elbert/ElbertPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -25,15 +24,11 @@ SaiBcmElbertPlatform::SaiBcmElbertPlatform( localMac) {} void SaiBcmElbertPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmElbertPlatform::getAsic() const { return asic_.get(); diff --git a/fboss/agent/platforms/sai/SaiBcmElbertPlatform.h b/fboss/agent/platforms/sai/SaiBcmElbertPlatform.h index 418534e244167..a142fed77bf71 100644 --- a/fboss/agent/platforms/sai/SaiBcmElbertPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmElbertPlatform.h @@ -38,11 +38,8 @@ class SaiBcmElbertPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiBcmFujiPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmFujiPlatform.cpp index 58e521c9b9631..7d8f8f07c901a 100644 --- a/fboss/agent/platforms/sai/SaiBcmFujiPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmFujiPlatform.cpp @@ -11,7 +11,6 @@ #include "fboss/agent/platforms/sai/SaiBcmFujiPlatform.h" #include "fboss/agent/platforms/common/fuji/FujiPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -25,15 +24,11 @@ SaiBcmFujiPlatform::SaiBcmFujiPlatform( localMac) {} void SaiBcmFujiPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmFujiPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiBcmFujiPlatform.h b/fboss/agent/platforms/sai/SaiBcmFujiPlatform.h index 22ffac48eca6f..685064d219e69 100644 --- a/fboss/agent/platforms/sai/SaiBcmFujiPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmFujiPlatform.h @@ -34,11 +34,8 @@ class SaiBcmFujiPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; diff --git a/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.cpp index 19fec84aafa41..b65fcdfcf29c2 100644 --- a/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk3Asic.h" -#include #include namespace facebook::fboss { @@ -21,15 +20,11 @@ HwAsic* SaiBcmMinipackPlatform::getAsic() const { } void SaiBcmMinipackPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } void SaiBcmMinipackPlatform::initLEDs() { diff --git a/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.h b/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.h index 62d8679285d0f..1b50a716d6000 100644 --- a/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmMinipackPlatform.h @@ -35,11 +35,8 @@ class SaiBcmMinipackPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.cpp index 6ed61c7f76721..3fb8395fae9d3 100644 --- a/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk5Asic.h" #include "fboss/agent/platforms/common/montblanc/MontblancPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -29,15 +28,11 @@ SaiBcmMontblancPlatform::SaiBcmMontblancPlatform( localMac) {} void SaiBcmMontblancPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmMontblancPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.h b/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.h index c4af3311ef0b9..94e781efff6c8 100644 --- a/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmMontblancPlatform.h @@ -39,11 +39,8 @@ class SaiBcmMontblancPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiBcmPlatformPort.cpp b/fboss/agent/platforms/sai/SaiBcmPlatformPort.cpp index a13d4960db989..ce94fb46f9fd8 100644 --- a/fboss/agent/platforms/sai/SaiBcmPlatformPort.cpp +++ b/fboss/agent/platforms/sai/SaiBcmPlatformPort.cpp @@ -9,13 +9,11 @@ */ #include "fboss/agent/platforms/sai/SaiBcmPlatformPort.h" #include "fboss/agent/platforms/sai/SaiBcmPlatform.h" -#include "fboss/agent/platforms/sai/SaiPlatform.h" #include "fboss/agent/hw/sai/api/SaiApiTable.h" #include "fboss/agent/hw/sai/api/SwitchApi.h" #include "fboss/agent/hw/sai/switch/SaiSwitch.h" -#include "fboss/agent/platforms/sai/SaiPlatformPort.h" namespace facebook::fboss { diff --git a/fboss/agent/platforms/sai/SaiBcmWedge100Platform.cpp b/fboss/agent/platforms/sai/SaiBcmWedge100Platform.cpp index 9a0b53eba5a25..eb2e827b34aba 100644 --- a/fboss/agent/platforms/sai/SaiBcmWedge100Platform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmWedge100Platform.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/platforms/common/utils/Wedge100LedUtils.h" #include "fboss/agent/platforms/common/wedge100/Wedge100PlatformMapping.h" -#include #include namespace facebook::fboss { @@ -30,16 +29,13 @@ SaiBcmWedge100Platform::SaiBcmWedge100Platform( localMac) {} void SaiBcmWedge100Platform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } + HwAsic* SaiBcmWedge100Platform::getAsic() const { return asic_.get(); } diff --git a/fboss/agent/platforms/sai/SaiBcmWedge100Platform.h b/fboss/agent/platforms/sai/SaiBcmWedge100Platform.h index c9698c6f5b489..3f75c82615275 100644 --- a/fboss/agent/platforms/sai/SaiBcmWedge100Platform.h +++ b/fboss/agent/platforms/sai/SaiBcmWedge100Platform.h @@ -49,11 +49,8 @@ class SaiBcmWedge100Platform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiBcmWedge400Platform.cpp b/fboss/agent/platforms/sai/SaiBcmWedge400Platform.cpp index ddff080911474..bf24e47a6ed3b 100644 --- a/fboss/agent/platforms/sai/SaiBcmWedge400Platform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmWedge400Platform.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/platforms/sai/SaiBcmWedge400Platform.h" -#include #include #include "fboss/agent/hw/switch_asics/Tomahawk3Asic.h" #include "fboss/agent/platforms/common/wedge400/Wedge400GrandTetonPlatformMapping.h" @@ -29,15 +28,11 @@ SaiBcmWedge400Platform::SaiBcmWedge400Platform( localMac) {} void SaiBcmWedge400Platform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmWedge400Platform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiBcmWedge400Platform.h b/fboss/agent/platforms/sai/SaiBcmWedge400Platform.h index 228b6bab025f1..8728c6fa9f4ec 100644 --- a/fboss/agent/platforms/sai/SaiBcmWedge400Platform.h +++ b/fboss/agent/platforms/sai/SaiBcmWedge400Platform.h @@ -53,11 +53,8 @@ class SaiBcmWedge400Platform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; diff --git a/fboss/agent/platforms/sai/SaiBcmYampPlatform.cpp b/fboss/agent/platforms/sai/SaiBcmYampPlatform.cpp index 49c59827eed24..d73bb958ff80f 100644 --- a/fboss/agent/platforms/sai/SaiBcmYampPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiBcmYampPlatform.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk3Asic.h" #include "fboss/agent/platforms/common/yamp/YampPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -27,15 +26,11 @@ SaiBcmYampPlatform::SaiBcmYampPlatform( localMac) {} void SaiBcmYampPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiBcmYampPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiBcmYampPlatform.h b/fboss/agent/platforms/sai/SaiBcmYampPlatform.h index 972f4cdc9be06..d850e020c521a 100644 --- a/fboss/agent/platforms/sai/SaiBcmYampPlatform.h +++ b/fboss/agent/platforms/sai/SaiBcmYampPlatform.h @@ -34,12 +34,10 @@ class SaiBcmYampPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; + std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiCloudRipperPlatform.cpp b/fboss/agent/platforms/sai/SaiCloudRipperPlatform.cpp index 2726973bcface..f9d70794d333b 100644 --- a/fboss/agent/platforms/sai/SaiCloudRipperPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiCloudRipperPlatform.cpp @@ -31,11 +31,8 @@ SaiCloudRipperPlatform::SaiCloudRipperPlatform( localMac) {} void SaiCloudRipperPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); std::optional sdkVersion; @@ -54,8 +51,7 @@ void SaiCloudRipperPlatform::setupAsic( sdkVersion->asicSdk() = "24.4.90"; } #endif - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + asic_ = std::make_unique(switchId, switchInfo, sdkVersion); } HwAsic* SaiCloudRipperPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiCloudRipperPlatform.h b/fboss/agent/platforms/sai/SaiCloudRipperPlatform.h index 39092c87658b8..35dee25c6a3ed 100644 --- a/fboss/agent/platforms/sai/SaiCloudRipperPlatform.h +++ b/fboss/agent/platforms/sai/SaiCloudRipperPlatform.h @@ -30,11 +30,8 @@ class SaiCloudRipperPlatform : public SaiTajoPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiCloudRipperPlatformPort.cpp b/fboss/agent/platforms/sai/SaiCloudRipperPlatformPort.cpp index 9f476456cb2d6..0dfaa96e7dbc1 100644 --- a/fboss/agent/platforms/sai/SaiCloudRipperPlatformPort.cpp +++ b/fboss/agent/platforms/sai/SaiCloudRipperPlatformPort.cpp @@ -8,7 +8,6 @@ * */ #include "fboss/agent/platforms/sai/SaiCloudRipperPlatformPort.h" -#include "fboss/agent/platforms/sai/SaiCloudRipperPlatform.h" namespace facebook::fboss { diff --git a/fboss/agent/platforms/sai/SaiFakePlatform.cpp b/fboss/agent/platforms/sai/SaiFakePlatform.cpp index 93e7e70a3ced4..909638c9a2199 100644 --- a/fboss/agent/platforms/sai/SaiFakePlatform.cpp +++ b/fboss/agent/platforms/sai/SaiFakePlatform.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/hw/test/ConfigFactory.h" -#include #include namespace { std::vector getControllingPortIDs() { @@ -43,14 +42,10 @@ SaiFakePlatform::SaiFakePlatform( } void SaiFakePlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } std::string SaiFakePlatform::getHwConfig() { diff --git a/fboss/agent/platforms/sai/SaiFakePlatform.h b/fboss/agent/platforms/sai/SaiFakePlatform.h index 7f3fe8d9626d1..b23ea9185fd8b 100644 --- a/fboss/agent/platforms/sai/SaiFakePlatform.h +++ b/fboss/agent/platforms/sai/SaiFakePlatform.h @@ -57,11 +57,8 @@ class SaiFakePlatform : public SaiPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; folly::test::TemporaryDirectory tmpDir_; std::unique_ptr asic_; diff --git a/fboss/agent/platforms/sai/SaiFakePlatformPort.cpp b/fboss/agent/platforms/sai/SaiFakePlatformPort.cpp index 79faf964f968f..53012c6eb482b 100644 --- a/fboss/agent/platforms/sai/SaiFakePlatformPort.cpp +++ b/fboss/agent/platforms/sai/SaiFakePlatformPort.cpp @@ -8,7 +8,6 @@ * */ #include "fboss/agent/platforms/sai/SaiFakePlatformPort.h" -#include "fboss/agent/platforms/sai/SaiPlatform.h" namespace facebook::fboss { diff --git a/fboss/agent/platforms/sai/SaiJanga800bicPlatform.cpp b/fboss/agent/platforms/sai/SaiJanga800bicPlatform.cpp index aea2f67544f50..4a1289795b077 100644 --- a/fboss/agent/platforms/sai/SaiJanga800bicPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiJanga800bicPlatform.cpp @@ -30,15 +30,11 @@ SaiJanga800bicPlatform::SaiJanga800bicPlatform( localMac) {} void SaiJanga800bicPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiJanga800bicPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiJanga800bicPlatform.h b/fboss/agent/platforms/sai/SaiJanga800bicPlatform.h index 9951eb60e5771..af13d79c9fa78 100644 --- a/fboss/agent/platforms/sai/SaiJanga800bicPlatform.h +++ b/fboss/agent/platforms/sai/SaiJanga800bicPlatform.h @@ -60,11 +60,8 @@ class SaiJanga800bicPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.cpp b/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.cpp index 750af56ba1304..5bdc41f34c745 100644 --- a/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.cpp @@ -29,21 +29,12 @@ SaiMeru400bfuPlatform::SaiMeru400bfuPlatform( localMac) {} void SaiMeru400bfuPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(fabricNodeRole.has_value()); asic_ = std::make_unique( - switchType, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt, - *fabricNodeRole); + switchId, switchInfo, std::nullopt, *fabricNodeRole); } HwAsic* SaiMeru400bfuPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.h b/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.h index c2189ef3a428c..895c43029400a 100644 --- a/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.h +++ b/fboss/agent/platforms/sai/SaiMeru400bfuPlatform.h @@ -58,11 +58,8 @@ class SaiMeru400bfuPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMeru400biaPlatform.cpp b/fboss/agent/platforms/sai/SaiMeru400biaPlatform.cpp index c2a67086bafb7..4216045d87d2b 100644 --- a/fboss/agent/platforms/sai/SaiMeru400biaPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMeru400biaPlatform.cpp @@ -29,15 +29,11 @@ SaiMeru400biaPlatform::SaiMeru400biaPlatform( localMac) {} void SaiMeru400biaPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiMeru400biaPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiMeru400biaPlatform.h b/fboss/agent/platforms/sai/SaiMeru400biaPlatform.h index 56f92610898f8..852b73c44fb29 100644 --- a/fboss/agent/platforms/sai/SaiMeru400biaPlatform.h +++ b/fboss/agent/platforms/sai/SaiMeru400biaPlatform.h @@ -61,11 +61,8 @@ class SaiMeru400biaPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMeru400biuPlatform.cpp b/fboss/agent/platforms/sai/SaiMeru400biuPlatform.cpp index 18e535b974d75..a12427209f047 100644 --- a/fboss/agent/platforms/sai/SaiMeru400biuPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMeru400biuPlatform.cpp @@ -29,15 +29,11 @@ SaiMeru400biuPlatform::SaiMeru400biuPlatform( localMac) {} void SaiMeru400biuPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiMeru400biuPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiMeru400biuPlatform.h b/fboss/agent/platforms/sai/SaiMeru400biuPlatform.h index 61470a820c52b..31f6b24948c46 100644 --- a/fboss/agent/platforms/sai/SaiMeru400biuPlatform.h +++ b/fboss/agent/platforms/sai/SaiMeru400biuPlatform.h @@ -60,11 +60,8 @@ class SaiMeru400biuPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.cpp b/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.cpp index 705ffc448435d..ae7df6f837875 100644 --- a/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.cpp @@ -36,21 +36,12 @@ SaiMeru800bfaPlatform::SaiMeru800bfaPlatform( : SaiBcmPlatform(std::move(productInfo), std::move(mapping), localMac) {} void SaiMeru800bfaPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(fabricNodeRole.has_value()); asic_ = std::make_unique( - switchType, - switchId, - switchIndex, - systemPortRange, - mac, - std::nullopt, - *fabricNodeRole); + switchId, switchInfo, std::nullopt, *fabricNodeRole); } HwAsic* SaiMeru800bfaPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.h b/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.h index 891eb18f9860d..11f893b302f1e 100644 --- a/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.h +++ b/fboss/agent/platforms/sai/SaiMeru800bfaPlatform.h @@ -65,11 +65,8 @@ class SaiMeru800bfaPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMeru800biaPlatform.cpp b/fboss/agent/platforms/sai/SaiMeru800biaPlatform.cpp index 7ebdf892cc94b..f34e12c881c7e 100644 --- a/fboss/agent/platforms/sai/SaiMeru800biaPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMeru800biaPlatform.cpp @@ -29,15 +29,11 @@ SaiMeru800biaPlatform::SaiMeru800biaPlatform( localMac) {} void SaiMeru800biaPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiMeru800biaPlatform::getAsic() const { @@ -48,6 +44,9 @@ std::vector SaiMeru800biaPlatform::getInternalSystemPortConfig() const { CHECK(asic_) << " Asic must be set before getting sys port info"; CHECK(asic_->getSwitchId()) << " Switch Id must be set before sys port info"; + if (isDualStage3Q2QMode()) { + return {{0, static_cast(*asic_->getSwitchId()), 1, 16, 10000, 3}}; + } return {{0, static_cast(*asic_->getSwitchId()), 0, 0, 10000, 8}}; } SaiMeru800biaPlatform::~SaiMeru800biaPlatform() = default; diff --git a/fboss/agent/platforms/sai/SaiMeru800biaPlatform.h b/fboss/agent/platforms/sai/SaiMeru800biaPlatform.h index bc393ed3c6d14..2508cddcca40d 100644 --- a/fboss/agent/platforms/sai/SaiMeru800biaPlatform.h +++ b/fboss/agent/platforms/sai/SaiMeru800biaPlatform.h @@ -60,12 +60,10 @@ class SaiMeru800biaPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; + std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.cpp b/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.cpp index 92279ffd5f1cd..bc82156688b31 100644 --- a/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.cpp @@ -12,8 +12,6 @@ #include "fboss/agent/hw/switch_asics/YubaAsic.h" #include "fboss/agent/platforms/common/morgan800cc/Morgan800ccPlatformMapping.h" -#include - namespace facebook::fboss { SaiMorgan800ccPlatform::SaiMorgan800ccPlatform( @@ -29,15 +27,11 @@ SaiMorgan800ccPlatform::SaiMorgan800ccPlatform( localMac) {} void SaiMorgan800ccPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); asic_->setDefaultStreamType(cfg::StreamType::UNICAST); } diff --git a/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.h b/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.h index d0dc2bbd50d95..f919cf76cbaab 100644 --- a/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.h +++ b/fboss/agent/platforms/sai/SaiMorgan800ccPlatform.h @@ -30,11 +30,8 @@ class SaiMorgan800ccPlatform : public SaiTajoPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiPlatform.cpp b/fboss/agent/platforms/sai/SaiPlatform.cpp index c0b0f0d52db57..3246829a106b8 100644 --- a/fboss/agent/platforms/sai/SaiPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiPlatform.cpp @@ -123,6 +123,18 @@ SaiSwitchTraits::Attributes::HwInfo getHwInfo(SaiPlatform* platform) { } return connectionHandle; } + +const auto& getFirmwareForSwitch( + const auto& switchIdToSwitchInfo, + int64_t switchId) { + auto iter = switchIdToSwitchInfo.value().find(switchId); + if (iter == switchIdToSwitchInfo.value().end()) { + throw FbossError("SwitchId not found: ", switchId); + } + + return *iter->second.firmwareNameToFirmwareInfo(); +} + } // namespace namespace facebook::fboss { @@ -260,17 +272,6 @@ std::string SaiPlatform::getHwAsicConfig( addNameValue(entry); } -#if defined(BRCM_SAI_SDK_DNX_GTE_11_0) && !defined(BRCM_SAI_SDK_DNX_GTE_12_0) - if (getAsic()->isSupported(HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW)) { - // Interim workaround for 11.7 GA as this SoC property is needed for - // J3AI 11.x but not for 12.x until 12.0.0.3/4. - // TODO: While integrating 12.0.0.3/4, these workarounds need to be removed - // and instead this SoC property would be added in config directly. - nameValStrs.push_back("eventor_sbus_dma_channels.BCM8889X=0,6,0,7"); - nameValStrs.push_back("custom_feature_shel_arm_enable=1"); - } -#endif - /* * Single NPU platfroms will not have any npu entries. In such cases, * we can directly use the common config. @@ -501,12 +502,12 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( uint32_t maxCoreCount = 0; uint32_t maxSystemCoreCount = 0; auto localMac = getLocalMac(); - const EbroAsic ebro( - cfg::SwitchType::VOQ, 0, 0, std::nullopt, localMac, std::nullopt); - const Jericho2Asic j2( - cfg::SwitchType::VOQ, 0, 0, std::nullopt, localMac, std::nullopt); - const Jericho3Asic j3( - cfg::SwitchType::VOQ, 0, 0, std::nullopt, localMac, std::nullopt); + cfg::SwitchInfo swInfo; + swInfo.switchIndex() = 0; + swInfo.switchType() = cfg::SwitchType::VOQ; + swInfo.switchMac() = localMac.toString(); + const Jericho2Asic j2(0, swInfo); + const Jericho3Asic j3(0, swInfo); for (const auto& [id, dsfNode] : *agentCfg->thrift.sw()->dsfNodes()) { if (dsfNode.type() != cfg::DsfNodeType::INTERFACE_NODE) { continue; @@ -526,8 +527,6 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( maxSystemCoreCount = std::max(maxSystemCoreCount, uint32_t(id + j3.getNumCores())); break; - case cfg::AsicType::ASIC_TYPE_EBRO: - break; default: throw FbossError("Unexpected asic type: ", *dsfNode.asicType()); } @@ -555,15 +554,93 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( std::optional firmwarePathName{ std::nullopt}; - if (getAsic()->isSupported(HwAsic::Feature::SAI_FIRMWARE_PATH)) { + + const auto switchSettings = config()->thrift.sw()->switchSettings(); + if (switchSettings->firmwarePath().has_value()) { std::vector firmwarePathNameArray; std::copy( - FLAGS_firmware_path.c_str(), - FLAGS_firmware_path.c_str() + FLAGS_firmware_path.size() + 1, + switchSettings->firmwarePath().value().c_str(), + switchSettings->firmwarePath().value().c_str() + + switchSettings->firmwarePath().value().size() + 1, std::back_inserter(firmwarePathNameArray)); + firmwarePathName = firmwarePathNameArray; + } else { + // TODO + // We plan to migrate all use cases that use firmware path to more + // geentalized config driven approach i.e. if-block. + // After that migration, we will remove this else-block, HwAsic feature + // SAI_FIRWWARE_PATH and FLAGS_firmware_path. + // Fallback in the meanwhile. + if (getAsic()->isSupported(HwAsic::Feature::SAI_FIRMWARE_PATH)) { + std::vector firmwarePathNameArray; + std::copy( + FLAGS_firmware_path.c_str(), + FLAGS_firmware_path.c_str() + FLAGS_firmware_path.size() + 1, + std::back_inserter(firmwarePathNameArray)); + firmwarePathName = firmwarePathNameArray; + } } + std::optional + firmwareCoreToUse{std::nullopt}; + std::optional firmwareLogFile{ + std::nullopt}; + std::optional firmwareLoadType{ + std::nullopt}; + +#if defined(SAI_VERSION_11_7_0_0_DNX_ODP) + if (swId.has_value()) { + const auto& firmwareNameToFirmwareInfo = getFirmwareForSwitch( + switchSettings->switchIdToSwitchInfo(), swId.value()); + + if (firmwareNameToFirmwareInfo.size() != 0) { + if (firmwareNameToFirmwareInfo.size() > 1) { + throw FbossError("Setting only one firmware is supported today"); + } + auto [firmwareName, firmwareInfo] = *firmwareNameToFirmwareInfo.begin(); + XLOG(DBG2) << "FirmwareName: " << firmwareName + << " coreToUse: " << *firmwareInfo.coreToUse() + << " path: " << *firmwareInfo.path() + << " logPath: " << *firmwareInfo.logPath() + << " firmwareLoadType: " + << apache::thrift::util::enumNameSafe( + *firmwareInfo.firmwareLoadType()); + + // Set Core + firmwareCoreToUse = *firmwareInfo.coreToUse(); + + // Set firmware path + std::string firmwarePath = *firmwareInfo.path(); + std::vector firmwarePathNameArray; + std::copy( + firmwarePath.c_str(), + firmwarePath.c_str() + firmwarePath.size() + 1, + std::back_inserter(firmwarePathNameArray)); + firmwarePathName = firmwarePathNameArray; + + // Set firmware log path + std::string firmwareLogPath = *firmwareInfo.logPath(); + std::vector firmwareLogPathArray; + std::copy( + firmwareLogPath.c_str(), + firmwareLogPath.c_str() + firmwareLogPath.size() + 1, + std::back_inserter(firmwareLogPathArray)); + firmwareLogFile = firmwareLogPathArray; + + // Set firmware load type + switch (*firmwareInfo.firmwareLoadType()) { + case cfg::FirmwareLoadType::FIRMWARE_LOAD_TYPE_START: + firmwareLoadType = SAI_SWITCH_FIRMWARE_LOAD_TYPE_AUTO; + break; + case cfg::FirmwareLoadType::FIRMWARE_LOAD_TYPE_STOP: + firmwareLoadType = SAI_SWITCH_FIRMWARE_LOAD_TYPE_STOP; + break; + } + } + } +#endif + std::optional switchIsolate{ std::nullopt}; if (getAsic()->isSupported(HwAsic::Feature::LINK_INACTIVE_BASED_ISOLATE)) { @@ -608,6 +685,10 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( std::optional< SaiSwitchTraits::Attributes::FabricLinkLayerFlowControlThreshold> fabricLLFC; + std::optional maxSystemPortId; + std::optional maxLocalSystemPortId; + std::optional maxSystemPorts; + std::optional maxVoqs; #if defined(BRCM_SAI_SDK_DNX) && defined(BRCM_SAI_SDK_GTE_12_0) if (getAsic()->getSwitchType() == cfg::SwitchType::FABRIC && getAsic()->getFabricNodeRole() == HwAsic::FabricNodeRole::DUAL_STAGE_L1) { @@ -617,6 +698,17 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( constexpr uint32_t kRamon3LlfcThreshold{800}; fabricLLFC = std::vector({kRamon3LlfcThreshold}); } + if (isDualStage3Q2QMode()) { + maxSystemPortId = 32515; + maxLocalSystemPortId = 5; + maxSystemPorts = 21766; + maxVoqs = 64512; + } else { + maxSystemPortId = 6143; + maxLocalSystemPortId = -1; + maxSystemPorts = 6144; + maxVoqs = 6144 * 8; + } #endif if (swType == cfg::SwitchType::FABRIC && bootType == BootType::COLD_BOOT) { // FABRIC switches should always start in isolated state until we configure @@ -648,9 +740,11 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( std::nullopt, // tam object list useEcnThresholds, std::nullopt, // counter refresh interval + firmwareCoreToUse, firmwarePathName, // Firmware path name + firmwareLogFile, // Firmware log file std::nullopt, // Firmware load method - std::nullopt, // Firmware load type + firmwareLoadType, // Firmware load type std::nullopt, // Hardware access bus std::nullopt, // Platform context std::nullopt, // Switch profile id @@ -691,6 +785,17 @@ SaiSwitchTraits::CreateAttributes SaiPlatform::getSwitchAttributes( std::nullopt, // SRAM free percent XOFF threshold std::nullopt, // SRAM free percent XON threshold std::nullopt, // No acls for traps + maxSystemPortId, + maxLocalSystemPortId, + maxSystemPorts, + maxVoqs, + std::nullopt, // Fabric CLLFC TX credit threshold + std::nullopt, // VOQ DRAM bound threshold + std::nullopt, // Conditional Entropy Rehash Period + std::nullopt, // Shel Source IP + std::nullopt, // Shel Destination IP + std::nullopt, // Shel Source MAC + std::nullopt, // Shel Periodic Interval }; } diff --git a/fboss/agent/platforms/sai/SaiTahan800bcPlatform.cpp b/fboss/agent/platforms/sai/SaiTahan800bcPlatform.cpp index 91803adba95ad..1b2eec406dc0f 100644 --- a/fboss/agent/platforms/sai/SaiTahan800bcPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiTahan800bcPlatform.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk5Asic.h" #include "fboss/agent/platforms/common/tahan800bc/Tahan800bcPlatformMapping.h" -#include #include namespace facebook::fboss { @@ -29,15 +28,11 @@ SaiTahan800bcPlatform::SaiTahan800bcPlatform( localMac) {} void SaiTahan800bcPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } HwAsic* SaiTahan800bcPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiTahan800bcPlatform.h b/fboss/agent/platforms/sai/SaiTahan800bcPlatform.h index 3e7ae74393d13..ccfd12b4a1cb1 100644 --- a/fboss/agent/platforms/sai/SaiTahan800bcPlatform.h +++ b/fboss/agent/platforms/sai/SaiTahan800bcPlatform.h @@ -39,11 +39,8 @@ class SaiTahan800bcPlatform : public SaiBcmPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/SaiWedge400CPlatform.cpp b/fboss/agent/platforms/sai/SaiWedge400CPlatform.cpp index e374cca3d554b..a054ec815cc37 100644 --- a/fboss/agent/platforms/sai/SaiWedge400CPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiWedge400CPlatform.cpp @@ -32,11 +32,8 @@ SaiWedge400CPlatform::SaiWedge400CPlatform( localMac) {} void SaiWedge400CPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); std::optional sdkVersion; @@ -55,8 +52,7 @@ void SaiWedge400CPlatform::setupAsic( sdkVersion->asicSdk() = "24.4.90"; } #endif - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac, sdkVersion); + asic_ = std::make_unique(switchId, switchInfo, sdkVersion); } HwAsic* SaiWedge400CPlatform::getAsic() const { diff --git a/fboss/agent/platforms/sai/SaiWedge400CPlatform.h b/fboss/agent/platforms/sai/SaiWedge400CPlatform.h index 1398c8502e191..6d6c3702c4bba 100644 --- a/fboss/agent/platforms/sai/SaiWedge400CPlatform.h +++ b/fboss/agent/platforms/sai/SaiWedge400CPlatform.h @@ -29,11 +29,8 @@ class SaiWedge400CPlatform : public SaiTajoPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr createWedge400CPlatformMapping( diff --git a/fboss/agent/platforms/sai/SaiWedge400CPlatformPort.cpp b/fboss/agent/platforms/sai/SaiWedge400CPlatformPort.cpp index 148c272637a70..bd785cad42b9d 100644 --- a/fboss/agent/platforms/sai/SaiWedge400CPlatformPort.cpp +++ b/fboss/agent/platforms/sai/SaiWedge400CPlatformPort.cpp @@ -10,8 +10,6 @@ #include "fboss/agent/platforms/sai/SaiWedge400CPlatformPort.h" #include "fboss/agent/platforms/common/utils/Wedge400LedUtils.h" -#include - DEFINE_bool(skip_led_programming, false, "Skip programming LED"); namespace facebook::fboss { diff --git a/fboss/agent/platforms/sai/SaiYangraPlatform.cpp b/fboss/agent/platforms/sai/SaiYangraPlatform.cpp index c6f0521a46960..bf3d474fabeca 100644 --- a/fboss/agent/platforms/sai/SaiYangraPlatform.cpp +++ b/fboss/agent/platforms/sai/SaiYangraPlatform.cpp @@ -36,14 +36,11 @@ SaiYangraPlatform::SaiYangraPlatform( localMac) {} void SaiYangraPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional /*role*/) { - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + const cfg::SwitchInfo& switchInfo, + std::optional fabricNodeRole) { + CHECK(!fabricNodeRole.has_value()); + asic_ = std::make_unique(switchId, switchInfo); asic_->setDefaultStreamType(cfg::StreamType::UNICAST); } diff --git a/fboss/agent/platforms/sai/SaiYangraPlatform.h b/fboss/agent/platforms/sai/SaiYangraPlatform.h index 79cdecce82b12..26b796cf192aa 100644 --- a/fboss/agent/platforms/sai/SaiYangraPlatform.h +++ b/fboss/agent/platforms/sai/SaiYangraPlatform.h @@ -51,11 +51,8 @@ class SaiYangraPlatform : public SaiPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional role) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.cpp b/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.cpp index 5ec00a75bf04c..e9986fba59163 100644 --- a/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.cpp +++ b/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.cpp @@ -83,15 +83,11 @@ SaiCloudRipperPhyPlatform::SaiCloudRipperPhyPlatform( folly::to(phyId_))) {} void SaiCloudRipperPhyPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } SaiCloudRipperPhyPlatform::~SaiCloudRipperPhyPlatform() {} diff --git a/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.h b/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.h index 1d0eb673a173d..c988e93aeadfa 100644 --- a/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.h +++ b/fboss/agent/platforms/sai/cloudripper/SaiCloudRipperPhyPlatform.h @@ -59,12 +59,9 @@ class SaiCloudRipperPhyPlatform : public SaiPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional fabricNodeRole) override; + const cfg::SwitchInfo& switchInfo, + std::optional fabricRole) override; int phyId_{0}; std::unique_ptr asic_; std::optional switchCreateAttrs_; diff --git a/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.cpp b/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.cpp index 30d05e67918e2..798c94a6c14a0 100644 --- a/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.cpp +++ b/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.cpp @@ -94,16 +94,13 @@ SaiElbert8DDPhyPlatform::SaiElbert8DDPhyPlatform( folly::to(phyId_))) {} void SaiElbert8DDPhyPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } + SaiElbert8DDPhyPlatform::~SaiElbert8DDPhyPlatform() {} std::string SaiElbert8DDPhyPlatform::getHwConfig() { diff --git a/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.h b/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.h index 78459d8874c56..6d8d095cacee8 100644 --- a/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.h +++ b/fboss/agent/platforms/sai/elbert/SaiElbert8DDPhyPlatform.h @@ -64,12 +64,9 @@ class SaiElbert8DDPhyPlatform : public SaiPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, - std::optional fabricNodeRole) override; + const cfg::SwitchInfo& switchInfo, + std::optional fabricRole) override; uint8_t pimId_{0}; int phyId_{0}; std::unique_ptr asic_; diff --git a/fboss/agent/platforms/sai/oss/SaiBcmMinipackPlatform.cpp b/fboss/agent/platforms/sai/oss/SaiBcmMinipackPlatform.cpp index 13094ec9bc67c..79923ee8acdad 100644 --- a/fboss/agent/platforms/sai/oss/SaiBcmMinipackPlatform.cpp +++ b/fboss/agent/platforms/sai/oss/SaiBcmMinipackPlatform.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/hw/switch_asics/Tomahawk3Asic.h" #include "fboss/agent/platforms/common/minipack/MinipackPlatformMapping.h" -#include #include namespace facebook::fboss { diff --git a/fboss/agent/platforms/tests/utils/BcmTestTomahawk4Platform.h b/fboss/agent/platforms/tests/utils/BcmTestTomahawk4Platform.h index 12176a5ea538b..4b21ab548c3fd 100644 --- a/fboss/agent/platforms/tests/utils/BcmTestTomahawk4Platform.h +++ b/fboss/agent/platforms/tests/utils/BcmTestTomahawk4Platform.h @@ -66,15 +66,11 @@ class BcmTestTomahawk4Platform : public BcmTestWedgePlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } // Forbidden copy constructor and assignment operator BcmTestTomahawk4Platform(BcmTestTomahawk4Platform const&) = delete; diff --git a/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawk3Platform.h b/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawk3Platform.h index c3e75abf7bdd6..ae1c142d8ea45 100644 --- a/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawk3Platform.h +++ b/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawk3Platform.h @@ -64,15 +64,11 @@ class BcmTestWedgeTomahawk3Platform : public BcmTestWedgePlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } // Forbidden copy constructor and assignment operator BcmTestWedgeTomahawk3Platform(BcmTestWedgeTomahawk3Platform const&) = delete; diff --git a/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawkPlatform.h b/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawkPlatform.h index fb44f4974a2cb..f3db047f471a8 100644 --- a/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawkPlatform.h +++ b/fboss/agent/platforms/tests/utils/BcmTestWedgeTomahawkPlatform.h @@ -61,15 +61,11 @@ class BcmTestWedgeTomahawkPlatform : public BcmTestWedgePlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } // Forbidden copy constructor and assignment operator BcmTestWedgeTomahawkPlatform(BcmTestWedgeTomahawkPlatform const&) = delete; diff --git a/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.cpp b/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.cpp index a5ff374552e6a..240d219db12f6 100644 --- a/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.cpp +++ b/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.cpp @@ -42,15 +42,11 @@ FakeBcmTestPlatform::FakeBcmTestPlatform() } void FakeBcmTestPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } FakeBcmTestPlatform::~FakeBcmTestPlatform() {} diff --git a/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.h b/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.h index 0be12598ce065..d2411f96b16e0 100644 --- a/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.h +++ b/fboss/agent/platforms/tests/utils/FakeBcmTestPlatform.h @@ -63,11 +63,8 @@ class FakeBcmTestPlatform : public BcmTestPlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; // Forbidden copy constructor and assignment operator FakeBcmTestPlatform(FakeBcmTestPlatform const&) = delete; diff --git a/fboss/agent/platforms/wedge/BUCK b/fboss/agent/platforms/wedge/BUCK index 37842e189f82f..1cfc9fd5e2fd0 100644 --- a/fboss/agent/platforms/wedge/BUCK +++ b/fboss/agent/platforms/wedge/BUCK @@ -135,7 +135,6 @@ cpp_library( "//fboss/lib/fpga/facebook/yamp:yamp_base_fpga", "//fboss/lib/fpga/facebook/yamp:yamp_fpga", "//fboss/lib/phy:external_phy", - "//fboss/lib/phy:phy-cpp2-types", "//fboss/lib/phy:phy-management", "//fboss/lib/platforms:product-info", "//fboss/lib/usb:usb-api", @@ -147,21 +146,16 @@ cpp_library( "//folly:memory", "//folly:network_address", "//folly:optional", - "//folly:random", "//folly:range", "//folly:synchronized", - "//folly:utility", "//folly/futures:core", "//folly/gen:base", "//folly/io/async:async_base", - "//folly/io/async:event_base_manager", "//folly/logging:logging", "//folly/testing:test_util", - "//neteng/netwhoami/lib/cpp:recover", "//thrift/lib/cpp/util:enum_utils", ], exported_external_deps = [ - "boost", "gflags", ("boost", None, "boost_container"), ("boost", None, "boost_regex"), @@ -218,7 +212,6 @@ cpp_library( "//fboss/lib/fpga/facebook/yamp:yamp_base_fpga", "//fboss/lib/fpga/facebook/yamp:yamp_fpga", "//fboss/lib/phy:external_phy", - "//fboss/lib/phy:phy-cpp2-types", "//fboss/lib/phy:phy-management", "//fboss/lib/platforms:product-info", "//fboss/lib/usb:usb-api", @@ -230,21 +223,16 @@ cpp_library( "//folly:memory", "//folly:network_address", "//folly:optional", - "//folly:random", "//folly:range", "//folly:synchronized", - "//folly:utility", "//folly/futures:core", "//folly/gen:base", "//folly/io/async:async_base", - "//folly/io/async:event_base_manager", "//folly/logging:logging", "//folly/testing:test_util", - "//neteng/netwhoami/lib/cpp:recover", "//thrift/lib/cpp/util:enum_utils", ], exported_external_deps = [ - "boost", "gflags", ("boost", None, "boost_container"), ("boost", None, "boost_regex"), @@ -254,7 +242,6 @@ cpp_library( fbpkg.builder( name = "fboss.emulation.fake_wedge_agent", - buck_opts = fbpkg.buck_opts(version = "v2"), fail_on_redundant_configerator_fbpkg = False, path_actions = { "fake_wedge_agent": ":fake_wedge_agent", @@ -264,11 +251,8 @@ fbpkg.builder( fbpkg.builder( name = "neteng.fboss.fake_wedge_agent", buck_opts = fbpkg.buck_opts( - config = { - "fbcode.dwp": "true", - }, + config = {"fbcode.dwp": "true"}, mode = "opt", - version = "v2", ), expire_days = 5, fail_on_redundant_configerator_fbpkg = False, diff --git a/fboss/agent/platforms/wedge/WedgePlatform.cpp b/fboss/agent/platforms/wedge/WedgePlatform.cpp index 0d4a1f5d0ce0c..aa84997ebf2f8 100644 --- a/fboss/agent/platforms/wedge/WedgePlatform.cpp +++ b/fboss/agent/platforms/wedge/WedgePlatform.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/platforms/wedge/WedgePlatform.h" #include -#include #include "fboss/agent/SysError.h" #include "fboss/agent/hw/bcm/BcmAPI.h" @@ -23,13 +22,10 @@ #include "fboss/agent/platforms/wedge/WedgePort.h" #include "fboss/agent/platforms/wedge/WedgePortMapping.h" #include "fboss/agent/state/Port.h" -#include "fboss/agent/state/SwitchState.h" #include "fboss/lib/platforms/PlatformProductInfo.h" #include "fboss/lib/usb/UsbError.h" #include "fboss/lib/usb/WedgeI2CBus.h" -#include - DEFINE_string( fabric_location, "", diff --git a/fboss/agent/platforms/wedge/WedgePlatformInit.h b/fboss/agent/platforms/wedge/WedgePlatformInit.h index d2b11c1658c90..d60843721ec47 100644 --- a/fboss/agent/platforms/wedge/WedgePlatformInit.h +++ b/fboss/agent/platforms/wedge/WedgePlatformInit.h @@ -14,7 +14,7 @@ namespace facebook::fboss { -class AgentConfig; +struct AgentConfig; class Platform; class WedgePlatform; class PlatformProductInfo; diff --git a/fboss/agent/platforms/wedge/WedgePort.cpp b/fboss/agent/platforms/wedge/WedgePort.cpp index eec2a1ca548a2..da15705b5b154 100644 --- a/fboss/agent/platforms/wedge/WedgePort.cpp +++ b/fboss/agent/platforms/wedge/WedgePort.cpp @@ -10,12 +10,9 @@ #include "fboss/agent/platforms/wedge/WedgePort.h" -#include #include #include -#include -#include "fboss/agent/FbossError.h" #include "fboss/agent/HwSwitch.h" #include "fboss/agent/hw/bcm/BcmPortGroup.h" #include "fboss/agent/platforms/wedge/WedgePlatform.h" diff --git a/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.cpp b/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.cpp index ced4c076d9e70..af885896e2b59 100644 --- a/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.cpp +++ b/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.cpp @@ -24,15 +24,11 @@ WedgeTomahawkPlatform::WedgeTomahawkPlatform( localMac) {} void WedgeTomahawkPlatform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } const PortQueue& WedgeTomahawkPlatform::getDefaultPortQueueSettings( diff --git a/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.h b/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.h index e43b98cbc0df5..8be873acf7c42 100644 --- a/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.h +++ b/fboss/agent/platforms/wedge/WedgeTomahawkPlatform.h @@ -48,11 +48,8 @@ class WedgeTomahawkPlatform : public WedgePlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; std::unique_ptr asic_; }; diff --git a/fboss/agent/platforms/wedge/wedge100/Wedge100Platform.cpp b/fboss/agent/platforms/wedge/wedge100/Wedge100Platform.cpp index c1b8b8cb00cfd..b1c82da2a3615 100644 --- a/fboss/agent/platforms/wedge/wedge100/Wedge100Platform.cpp +++ b/fboss/agent/platforms/wedge/wedge100/Wedge100Platform.cpp @@ -18,14 +18,10 @@ #include "fboss/agent/platforms/wedge/wedge100/Wedge100Port.h" #include "fboss/lib/platforms/PlatformProductInfo.h" #include "fboss/lib/usb/Wedge100I2CBus.h" -#include "fboss/qsfp_service/platforms/wedge/WedgeI2CBusLock.h" -#include #include #include -#include - namespace facebook::fboss { Wedge100Platform::Wedge100Platform( diff --git a/fboss/agent/platforms/wedge/wedge100/Wedge100Port.cpp b/fboss/agent/platforms/wedge/wedge100/Wedge100Port.cpp index 49aafdf72885b..205ab62d1bb6d 100644 --- a/fboss/agent/platforms/wedge/wedge100/Wedge100Port.cpp +++ b/fboss/agent/platforms/wedge/wedge100/Wedge100Port.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/platforms/wedge/wedge100/Wedge100Port.h" #include "fboss/agent/platforms/wedge/wedge100/Wedge100Platform.h" -#include "fboss/lib/phy/gen-cpp2/phy_types.h" namespace facebook::fboss { diff --git a/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.cpp b/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.cpp index db7d509dbd1a9..4482674e270c5 100644 --- a/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.cpp +++ b/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.cpp @@ -30,15 +30,11 @@ Wedge40Platform::Wedge40Platform( localMac) {} void Wedge40Platform::setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) { CHECK(!fabricNodeRole.has_value()); - asic_ = std::make_unique( - switchType, switchId, switchIndex, systemPortRange, mac); + asic_ = std::make_unique(switchId, switchInfo); } std::unique_ptr Wedge40Platform::createPortMapping() { diff --git a/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.h b/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.h index c99695c9e89f6..8b0f0e50d195f 100644 --- a/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.h +++ b/fboss/agent/platforms/wedge/wedge40/Wedge40Platform.h @@ -52,11 +52,8 @@ class Wedge40Platform : public WedgePlatform { private: void setupAsic( - cfg::SwitchType switchType, std::optional switchId, - int16_t switchIndex, - std::optional systemPortRange, - folly::MacAddress& mac, + const cfg::SwitchInfo& switchInfo, std::optional fabricNodeRole) override; Wedge40Platform(Wedge40Platform const&) = delete; Wedge40Platform& operator=(Wedge40Platform const&) = delete; diff --git a/fboss/agent/rib/BUCK b/fboss/agent/rib/BUCK index eb40f1eb64b36..731b1fa1996f9 100644 --- a/fboss/agent/rib/BUCK +++ b/fboss/agent/rib/BUCK @@ -7,8 +7,8 @@ cpp_library( name = "rib_header", headers = glob(["*.h"]), exported_deps = [ - "//fboss/agent:fboss-event-base", "//fboss/agent:fboss-types", + "//fboss/agent:fboss_event_base", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent/if:ctrl-cpp2-services", "//fboss/agent/state:state", @@ -35,8 +35,8 @@ cpp_library( "//fboss/agent:address_utils", "//fboss/agent:constants", "//fboss/agent:fboss-error", - "//fboss/agent:fboss-event-base", "//fboss/agent:fboss-types", + "//fboss/agent:fboss_event_base", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:utils", "//fboss/agent/if:ctrl-cpp2-services", diff --git a/fboss/agent/state/AclEntry.cpp b/fboss/agent/state/AclEntry.cpp index 6d5818af68c56..b7078a57d1f85 100644 --- a/fboss/agent/state/AclEntry.cpp +++ b/fboss/agent/state/AclEntry.cpp @@ -146,6 +146,6 @@ AclEntry::AclEntry(int priority, std::string&& name) { set(std::move(name)); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AclMap.cpp b/fboss/agent/state/AclMap.cpp index 95e59417a930d..15a4db65955f7 100644 --- a/fboss/agent/state/AclMap.cpp +++ b/fboss/agent/state/AclMap.cpp @@ -47,7 +47,7 @@ MultiSwitchAclMap* MultiSwitchAclMap::modify( return ptr; } -template class ThriftMapNode; +template struct ThriftMapNode; FBOSS_INSTANTIATE_NODE_MAP(PrioAclMap, PrioAclMapTraits); template class NodeMapDelta< diff --git a/fboss/agent/state/AclTable.cpp b/fboss/agent/state/AclTable.cpp index 6ae8a0158d3c4..ee606ed87e01b 100644 --- a/fboss/agent/state/AclTable.cpp +++ b/fboss/agent/state/AclTable.cpp @@ -11,6 +11,7 @@ #include #include #include +#include "fboss/agent/gen-cpp2/switch_config_constants.h" #include "fboss/agent/state/AclEntry.h" #include "fboss/agent/state/NodeBase-defs.h" #include "fboss/agent/state/StateUtils.h" @@ -21,7 +22,6 @@ using folly::IPAddress; namespace { // Same Priority and name as the default table created */ constexpr auto kAclTablePriority = 0; -constexpr auto kAclTable1 = "AclTable1"; } // namespace namespace facebook::fboss { @@ -35,11 +35,11 @@ std::shared_ptr AclTable::createDefaultAclTableFromThrift( std::map const& thriftMap) { state::AclTableFields data{}; data.priority() = kAclTablePriority; - data.id() = kAclTable1; + data.id() = cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); data.aclMap() = thriftMap; return std::make_shared(data); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AclTableGroup.cpp b/fboss/agent/state/AclTableGroup.cpp index c8461fc9cb43e..80f0e09f2a739 100644 --- a/fboss/agent/state/AclTableGroup.cpp +++ b/fboss/agent/state/AclTableGroup.cpp @@ -8,20 +8,8 @@ * */ #include "fboss/agent/state/AclTableGroup.h" -#include -#include -#include "fboss/agent/state/AclEntry.h" -#include "fboss/agent/state/AclTable.h" -#include "fboss/agent/state/AclTableMap.h" -#include "fboss/agent/state/NodeBase-defs.h" -#include "fboss/agent/state/StateUtils.h" -using apache::thrift::TEnumTraits; -using folly::IPAddress; - -namespace { -constexpr auto kAclTableGroupName = "ingress-ACL-Table-Group"; -} // namespace +#include "fboss/agent/gen-cpp2/switch_config_constants.h" namespace facebook::fboss { @@ -35,10 +23,10 @@ AclTableGroup::createDefaultAclTableGroupFromThrift( auto aclTableMap = AclTableMap::createDefaultAclTableMapFromThrift(aclMap); state::AclTableGroupFields data{}; data.stage() = cfg::AclStage::INGRESS; - data.name() = kAclTableGroupName; + data.name() = cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE_GROUP(); data.aclTableMap() = aclTableMap->toThrift(); return std::make_shared(data); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AclTableGroupMap.cpp b/fboss/agent/state/AclTableGroupMap.cpp index 8b76a84e20a2f..3f60e8fa3a688 100644 --- a/fboss/agent/state/AclTableGroupMap.cpp +++ b/fboss/agent/state/AclTableGroupMap.cpp @@ -41,6 +41,6 @@ std::shared_ptr AclTableGroupMap::getDefaultAclTableGroupMap( } } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AclTableMap.cpp b/fboss/agent/state/AclTableMap.cpp index 3a07ab98c1dce..178c36a1c4776 100644 --- a/fboss/agent/state/AclTableMap.cpp +++ b/fboss/agent/state/AclTableMap.cpp @@ -14,10 +14,6 @@ #include "fboss/agent/state/SwitchState.h" -namespace { -constexpr auto kAclTable1 = "AclTable1"; -} - namespace facebook::fboss { AclTableMap::AclTableMap() = default; @@ -33,8 +29,11 @@ std::shared_ptr AclTableMap::createDefaultAclTableMapFromThrift( std::shared_ptr AclTableMap::getDefaultAclTableMap( std::map const& thriftMap) { - if (thriftMap.find(kAclTable1) != thriftMap.end()) { - auto aclTable = thriftMap.at(kAclTable1); + if (thriftMap.find( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) != + thriftMap.end()) { + auto aclTable = + thriftMap.at(cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); return AclTable::getDefaultAclTable(aclTable); } else { XLOG(ERR) << "AclTableMap missing from warmboot state file"; @@ -42,6 +41,6 @@ std::shared_ptr AclTableMap::getDefaultAclTableMap( } } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AggregatePort.cpp b/fboss/agent/state/AggregatePort.cpp index 150ad4dbdc72c..7040ad129235c 100644 --- a/fboss/agent/state/AggregatePort.cpp +++ b/fboss/agent/state/AggregatePort.cpp @@ -173,6 +173,6 @@ bool AggregatePort::isUp() const { return forwardingSubportCount() >= getMinimumLinkCount(); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/AggregatePortMap.cpp b/fboss/agent/state/AggregatePortMap.cpp index 3ca7e5d6c96c5..64d8bdddd7f12 100644 --- a/fboss/agent/state/AggregatePortMap.cpp +++ b/fboss/agent/state/AggregatePortMap.cpp @@ -47,6 +47,6 @@ MultiSwitchAggregatePortMap::getAggregatePortForPort(PortID port) const { return nullptr; } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/BUCK b/fboss/agent/state/BUCK index 32ea8d2f8e52d..95ecddd65b965 100644 --- a/fboss/agent/state/BUCK +++ b/fboss/agent/state/BUCK @@ -70,6 +70,8 @@ cpp_library( "MatchAction.cpp", "Mirror.cpp", "MirrorMap.cpp", + "MirrorOnDropReport.cpp", + "MirrorOnDropReportMap.cpp", "NdpEntry.cpp", "NdpResponseEntry.cpp", "NdpResponseTable.cpp", diff --git a/fboss/agent/state/BufferPoolConfig.cpp b/fboss/agent/state/BufferPoolConfig.cpp index e93c2ecd6ec2f..403f5910e034a 100644 --- a/fboss/agent/state/BufferPoolConfig.cpp +++ b/fboss/agent/state/BufferPoolConfig.cpp @@ -12,6 +12,6 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/BufferPoolConfigMap.cpp b/fboss/agent/state/BufferPoolConfigMap.cpp index b8b1aab18b964..73e5fe7901b7d 100644 --- a/fboss/agent/state/BufferPoolConfigMap.cpp +++ b/fboss/agent/state/BufferPoolConfigMap.cpp @@ -20,6 +20,6 @@ MultiSwitchBufferPoolCfgMap* MultiSwitchBufferPoolCfgMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/ControlPlane.cpp b/fboss/agent/state/ControlPlane.cpp index 727befbd1065c..0d187ab643179 100644 --- a/fboss/agent/state/ControlPlane.cpp +++ b/fboss/agent/state/ControlPlane.cpp @@ -51,6 +51,6 @@ MultiControlPlane* MultiControlPlane::modify( return ptr; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/ControlPlane.h b/fboss/agent/state/ControlPlane.h index 678285f5efca0..dbca9fbfa38e9 100644 --- a/fboss/agent/state/ControlPlane.h +++ b/fboss/agent/state/ControlPlane.h @@ -56,6 +56,17 @@ class ControlPlane set(std::move(queuesThrift)); } + const auto& getVoqs() const { + return cref(); + } + void resetVoqs(QueueConfig& voqs) { + std::vector voqsThrift{}; + for (const auto& voq : voqs) { + voqsThrift.push_back(voq->toThrift()); + } + set(std::move(voqsThrift)); + } + const auto& getRxReasonToQueue() const { return cref(); } @@ -80,6 +91,11 @@ class ControlPlane return queues->impl(); } + const QueueConfig& getVoqsConfig() const { + const auto& voqs = getVoqs(); + return voqs->impl(); + } + static cfg::PacketRxReasonToQueue makeRxReasonToQueueEntry( cfg::PacketRxReason reason, uint16_t queueId); diff --git a/fboss/agent/state/DsfNode.cpp b/fboss/agent/state/DsfNode.cpp index f5de3e7c372b6..b2562bbbe2190 100644 --- a/fboss/agent/state/DsfNode.cpp +++ b/fboss/agent/state/DsfNode.cpp @@ -138,5 +138,5 @@ std::optional DsfNode::getGlobalSystemPortOffset() const { } return ret; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/DsfNodeMap.cpp b/fboss/agent/state/DsfNodeMap.cpp index 40ff59967c794..04390aa22dcab 100644 --- a/fboss/agent/state/DsfNodeMap.cpp +++ b/fboss/agent/state/DsfNodeMap.cpp @@ -12,5 +12,5 @@ MultiSwitchDsfNodeMap* MultiSwitchDsfNodeMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/FlowletSwitchingConfig.cpp b/fboss/agent/state/FlowletSwitchingConfig.cpp index d004bb174c3b1..80d526ea127d5 100644 --- a/fboss/agent/state/FlowletSwitchingConfig.cpp +++ b/fboss/agent/state/FlowletSwitchingConfig.cpp @@ -13,7 +13,7 @@ namespace facebook::fboss { -template class ThriftStructNode< +template struct ThriftStructNode< FlowletSwitchingConfig, cfg::FlowletSwitchingConfig>; } // namespace facebook::fboss diff --git a/fboss/agent/state/ForwardingInformationBase.cpp b/fboss/agent/state/ForwardingInformationBase.cpp index 6a720ba2974a0..a096461f90b6f 100644 --- a/fboss/agent/state/ForwardingInformationBase.cpp +++ b/fboss/agent/state/ForwardingInformationBase.cpp @@ -66,10 +66,10 @@ void ForwardingInformationBase::setDisableTTLDecrement( } } -template class ThriftMapNode< +template struct ThriftMapNode< ForwardingInformationBase, ForwardingInformationBaseTraits>; -template class ThriftMapNode< +template struct ThriftMapNode< ForwardingInformationBase, ForwardingInformationBaseTraits>; template class ForwardingInformationBase; diff --git a/fboss/agent/state/ForwardingInformationBaseContainer.cpp b/fboss/agent/state/ForwardingInformationBaseContainer.cpp index 7435b15e98945..2e072db3ac064 100644 --- a/fboss/agent/state/ForwardingInformationBaseContainer.cpp +++ b/fboss/agent/state/ForwardingInformationBaseContainer.cpp @@ -55,7 +55,7 @@ ForwardingInformationBaseContainer* ForwardingInformationBaseContainer::modify( return rtn; } -template class ThriftStructNode< +template struct ThriftStructNode< ForwardingInformationBaseContainer, state::FibContainerFields>; diff --git a/fboss/agent/state/ForwardingInformationBaseMap.cpp b/fboss/agent/state/ForwardingInformationBaseMap.cpp index 6d8918d9dd7ae..627ac3c7ea2de 100644 --- a/fboss/agent/state/ForwardingInformationBaseMap.cpp +++ b/fboss/agent/state/ForwardingInformationBaseMap.cpp @@ -101,7 +101,7 @@ MultiSwitchForwardingInformationBaseMap::getRouteCount() const { return std::make_pair(v4Count, v6Count); } -template class ThriftMapNode< +template struct ThriftMapNode< ForwardingInformationBaseMap, ForwardingInformationBaseMapTraits>; diff --git a/fboss/agent/state/Interface.cpp b/fboss/agent/state/Interface.cpp index 621be5aba998b..4fbdcca3127da 100644 --- a/fboss/agent/state/Interface.cpp +++ b/fboss/agent/state/Interface.cpp @@ -134,7 +134,10 @@ Interface* Interface::modify(std::shared_ptr* state) { ? (*state)->getSwitchSettings()->cbegin()->second : std::make_shared(); - if (getType() == cfg::InterfaceType::SYSTEM_PORT) { + if (getType() == cfg::InterfaceType::SYSTEM_PORT && + getScope() == cfg::Scope::GLOBAL) { + // For global system port RIFs, look whether these fall + // in my sysport ranges. If so, the RIF is local auto id(static_cast(getID())); auto switchId2Info = switchSettings->getSwitchIdToSwitchInfo(); for (const auto& [_, switchInfo] : switchId2Info) { @@ -144,12 +147,13 @@ Interface* Interface::modify(std::shared_ptr* state) { isLocal = true; break; } - if (isLocal) { - break; - } + } + if (isLocal) { + break; } } } else { + // VLAN based rifs, or rifs with local scope are always local isLocal = true; } auto interfaces = isLocal ? (*state)->getInterfaces()->modify(state) @@ -161,6 +165,6 @@ Interface* Interface::modify(std::shared_ptr* state) { return ptr; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/Interface.h b/fboss/agent/state/Interface.h index 75eceb2327523..68580e4c48ee3 100644 --- a/fboss/agent/state/Interface.h +++ b/fboss/agent/state/Interface.h @@ -472,6 +472,22 @@ class Interface : public ThriftStructNode { getRemoteInterfaceType().value() == RemoteInterfaceType::STATIC_ENTRY; } + void setPortID(PortID port) { + set(port); + } + + PortID getPortID() const { + CHECK(getType() == cfg::InterfaceType::PORT); + return PortID(get()->cref()); + } + + std::optional getPortIDf() const { + if (getType() == cfg::InterfaceType::PORT) { + return getPortID(); + } + return std::nullopt; + } + /* * Inherit the constructors required for clone(). * This needs to be public, as std::make_shared requires diff --git a/fboss/agent/state/InterfaceMap.cpp b/fboss/agent/state/InterfaceMap.cpp index d1a3c6807f9b7..8c059002098e6 100644 --- a/fboss/agent/state/InterfaceMap.cpp +++ b/fboss/agent/state/InterfaceMap.cpp @@ -136,6 +136,6 @@ const std::shared_ptr MultiSwitchInterfaceMap::getInterface( } throw FbossError("No interface with ip : ", ip); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/IpTunnel.cpp b/fboss/agent/state/IpTunnel.cpp index 9a92632d63568..751f21b691606 100644 --- a/fboss/agent/state/IpTunnel.cpp +++ b/fboss/agent/state/IpTunnel.cpp @@ -4,6 +4,6 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/IpTunnelMap.cpp b/fboss/agent/state/IpTunnelMap.cpp index e128504c280a7..b112f3025e476 100644 --- a/fboss/agent/state/IpTunnelMap.cpp +++ b/fboss/agent/state/IpTunnelMap.cpp @@ -29,5 +29,5 @@ MultiSwitchIpTunnelMap* MultiSwitchIpTunnelMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/LabelForwardingInformationBase.cpp b/fboss/agent/state/LabelForwardingInformationBase.cpp index 63dd60c6b5282..a1f100a5f3765 100644 --- a/fboss/agent/state/LabelForwardingInformationBase.cpp +++ b/fboss/agent/state/LabelForwardingInformationBase.cpp @@ -45,7 +45,7 @@ MultiLabelForwardingInformationBase::modify( return SwitchState::modify(state); } -template class ThriftMapNode< +template struct ThriftMapNode< LabelForwardingInformationBase, LabelForwardingInformationBaseTraits>; diff --git a/fboss/agent/state/LoadBalancer.cpp b/fboss/agent/state/LoadBalancer.cpp index 69f2ab00ec6f4..6f55395c08506 100644 --- a/fboss/agent/state/LoadBalancer.cpp +++ b/fboss/agent/state/LoadBalancer.cpp @@ -99,6 +99,6 @@ std::shared_ptr LoadBalancer::fromThrift( return std::make_shared(fields); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/LoadBalancerMap.cpp b/fboss/agent/state/LoadBalancerMap.cpp index 42485a472b232..08d7dda816d41 100644 --- a/fboss/agent/state/LoadBalancerMap.cpp +++ b/fboss/agent/state/LoadBalancerMap.cpp @@ -47,6 +47,6 @@ MultiSwitchLoadBalancerMap* MultiSwitchLoadBalancerMap::modify( return ptr; } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/MacEntry.cpp b/fboss/agent/state/MacEntry.cpp index c7d655425de55..78792d151f753 100644 --- a/fboss/agent/state/MacEntry.cpp +++ b/fboss/agent/state/MacEntry.cpp @@ -29,6 +29,6 @@ std::string MacEntry::str() const { return os.str(); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/MacTable.cpp b/fboss/agent/state/MacTable.cpp index 88a26f623ed86..eb727efb0dc09 100644 --- a/fboss/agent/state/MacTable.cpp +++ b/fboss/agent/state/MacTable.cpp @@ -63,5 +63,5 @@ void MacTable::updateEntry( updateNode(entry); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/Mirror.cpp b/fboss/agent/state/Mirror.cpp index f91ae5a58472e..453639fb76b66 100644 --- a/fboss/agent/state/Mirror.cpp +++ b/fboss/agent/state/Mirror.cpp @@ -188,6 +188,6 @@ std::optional Mirror::getSamplingRate() const { return std::nullopt; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/MirrorMap.cpp b/fboss/agent/state/MirrorMap.cpp index f12f21cce6edc..3f365b2dc8902 100644 --- a/fboss/agent/state/MirrorMap.cpp +++ b/fboss/agent/state/MirrorMap.cpp @@ -36,6 +36,6 @@ std::shared_ptr MultiSwitchMirrorMap::fromThrift( return mnpuMap; } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/MirrorOnDropReport.cpp b/fboss/agent/state/MirrorOnDropReport.cpp new file mode 100644 index 0000000000000..f91f2c55ed0bf --- /dev/null +++ b/fboss/agent/state/MirrorOnDropReport.cpp @@ -0,0 +1,103 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include + +#include +#include "fboss/agent/AddressUtil.h" +#include "fboss/agent/gen-cpp2/switch_state_types.h" +#include "fboss/agent/state/MirrorOnDropReport.h" +#include "folly/IPAddress.h" + +namespace facebook::fboss { + +MirrorOnDropReport::MirrorOnDropReport( + const std::string& name, + PortID mirrorPortId, + folly::IPAddress localSrcIp, + int16_t localSrcPort, + folly::IPAddress collectorIp, + int16_t collectorPort, + int16_t mtu, + int16_t truncateSize, + uint8_t dscp, + std::optional agingIntervalUsecs, + std::string switchMac, + std::string firstInterfaceMac) + : ThriftStructNode() { + set(name); + set(mirrorPortId); + set(network::toBinaryAddress(localSrcIp)); + set(localSrcPort); + set(network::toBinaryAddress(collectorIp)); + set(collectorPort); + set(mtu); + set(truncateSize); + set(dscp); + if (agingIntervalUsecs.has_value()) { + set(agingIntervalUsecs.value()); + } + set(switchMac); + set(firstInterfaceMac); +} + +std::string MirrorOnDropReport::getID() const { + return get()->cref(); +} + +PortID MirrorOnDropReport::getMirrorPortId() const { + return PortID(get()->cref()); +} + +void MirrorOnDropReport::setMirrorPortId(PortID portId) { + set(portId); +} + +folly::IPAddress MirrorOnDropReport::getLocalSrcIp() const { + return network::toIPAddress(get()->toThrift()); +} + +int16_t MirrorOnDropReport::getLocalSrcPort() const { + return get()->cref(); +} + +folly::IPAddress MirrorOnDropReport::getCollectorIp() const { + return network::toIPAddress( + get()->toThrift()); +} + +int16_t MirrorOnDropReport::getCollectorPort() const { + return get()->cref(); +} + +int16_t MirrorOnDropReport::getMtu() const { + return get()->cref(); +} + +int16_t MirrorOnDropReport::getTruncateSize() const { + return get()->cref(); +} + +uint8_t MirrorOnDropReport::getDscp() const { + return get()->cref(); +} + +std::optional MirrorOnDropReport::getAgingIntervalUsecs() const { + if (auto agingIntervalUsecs = get()) { + return agingIntervalUsecs->cref(); + } + return std::nullopt; +} + +std::string MirrorOnDropReport::getSwitchMac() const { + return get()->cref(); +} + +std::string MirrorOnDropReport::getFirstInterfaceMac() const { + return get()->cref(); +} + +template struct ThriftStructNode< + MirrorOnDropReport, + state::MirrorOnDropReportFields>; + +} // namespace facebook::fboss diff --git a/fboss/agent/state/MirrorOnDropReport.h b/fboss/agent/state/MirrorOnDropReport.h new file mode 100644 index 0000000000000..b6b4005eed910 --- /dev/null +++ b/fboss/agent/state/MirrorOnDropReport.h @@ -0,0 +1,58 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include + +#include + +#include +#include "fboss/agent/gen-cpp2/switch_state_types.h" +#include "fboss/agent/state/NodeBase.h" + +namespace facebook::fboss { + +USE_THRIFT_COW(MirrorOnDropReport); + +class MirrorOnDropReport : public ThriftStructNode< + MirrorOnDropReport, + state::MirrorOnDropReportFields> { + public: + using BaseT = + ThriftStructNode; + + MirrorOnDropReport( + const std::string& name, + PortID mirrorPortId, + folly::IPAddress localSrcIp, + int16_t localSrcPort, + folly::IPAddress collectorIp, + int16_t collectorPort, + int16_t mtu, + int16_t truncateSize, + uint8_t dscp, + std::optional agingIntervalUsecs, + std::string switchMac, + std::string firstInterfaceMac); + + std::string getID() const; + PortID getMirrorPortId() const; + void setMirrorPortId(PortID portId); + folly::IPAddress getLocalSrcIp() const; + int16_t getLocalSrcPort() const; + folly::IPAddress getCollectorIp() const; + int16_t getCollectorPort() const; + int16_t getMtu() const; + int16_t getTruncateSize() const; + uint8_t getDscp() const; + std::optional getAgingIntervalUsecs() const; + std::string getSwitchMac() const; + std::string getFirstInterfaceMac() const; + + private: + // Inherit the constructors required for clone() + using BaseT::BaseT; + friend class CloneAllocator; +}; + +} // namespace facebook::fboss diff --git a/fboss/agent/state/MirrorOnDropReportMap.cpp b/fboss/agent/state/MirrorOnDropReportMap.cpp new file mode 100644 index 0000000000000..087e265d80e47 --- /dev/null +++ b/fboss/agent/state/MirrorOnDropReportMap.cpp @@ -0,0 +1,46 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include + +#include "fboss/agent/state/MirrorOnDropReport.h" +#include "fboss/agent/state/MirrorOnDropReportMap.h" +#include "fboss/agent/state/SwitchState.h" + +namespace facebook::fboss { + +std::shared_ptr MirrorOnDropReportMap::fromThrift( + const std::map& + mirrorOnDropReports) { + auto map = std::make_shared(); + for (auto report : mirrorOnDropReports) { + auto node = std::make_shared(); + node->fromThrift(report.second); + map->insert(*report.second.name(), std::move(node)); + } + return map; +} + +MultiSwitchMirrorOnDropReportMap* MultiSwitchMirrorOnDropReportMap::modify( + std::shared_ptr* state) { + return SwitchState::modify(state); +} + +std::shared_ptr +MultiSwitchMirrorOnDropReportMap::fromThrift( + const std::map< + std::string, + std::map>& + mnpuMirrorOnDropReports) { + auto mnpuMap = std::make_shared(); + for (const auto& reports : mnpuMirrorOnDropReports) { + auto map = MirrorOnDropReportMap::fromThrift(reports.second); + mnpuMap->insert(reports.first, std::move(map)); + } + return mnpuMap; +} + +template struct ThriftMapNode< + MirrorOnDropReportMap, + MirrorOnDropReportMapTraits>; + +} // namespace facebook::fboss diff --git a/fboss/agent/state/MirrorOnDropReportMap.h b/fboss/agent/state/MirrorOnDropReportMap.h new file mode 100644 index 0000000000000..1f07e61b77285 --- /dev/null +++ b/fboss/agent/state/MirrorOnDropReportMap.h @@ -0,0 +1,82 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include "fboss/agent/gen-cpp2/switch_state_types.h" +#include "fboss/agent/state/MirrorOnDropReport.h" +#include "fboss/agent/state/Thrifty.h" + +namespace facebook::fboss { + +using MirrorOnDropReportMapTypeClass = apache::thrift::type_class::map< + apache::thrift::type_class::string, + apache::thrift::type_class::structure>; +using MirrorOnDropReportMapThriftType = + std::map; + +class MirrorOnDropReportMap; +using MirrorOnDropReportMapTraits = ThriftMapNodeTraits< + MirrorOnDropReportMap, + MirrorOnDropReportMapTypeClass, + MirrorOnDropReportMapThriftType, + MirrorOnDropReport>; + +class MirrorOnDropReportMap + : public ThriftMapNode { + public: + using Traits = MirrorOnDropReportMapTraits; + using BaseT = + ThriftMapNode; + MirrorOnDropReportMap() = default; + virtual ~MirrorOnDropReportMap() = default; + + static std::shared_ptr fromThrift( + const std::map& + mirrorOnDropReports); + + private: + // Inherit the constructors required for clone() + using BaseT::BaseT; + friend class CloneAllocator; +}; + +using MultiSwitchMirrorOnDropReportMapTypeClass = apache::thrift::type_class:: + map; +using MultiSwitchMirrorOnDropReportMapThriftType = + std::map; + +class MultiSwitchMirrorOnDropReportMap; + +using MultiSwitchMirrorOnDropReportMapTraits = ThriftMultiSwitchMapNodeTraits< + MultiSwitchMirrorOnDropReportMap, + MultiSwitchMirrorOnDropReportMapTypeClass, + MultiSwitchMirrorOnDropReportMapThriftType, + MirrorOnDropReportMap>; + +class HwSwitchMatcher; + +class MultiSwitchMirrorOnDropReportMap + : public ThriftMultiSwitchMapNode< + MultiSwitchMirrorOnDropReportMap, + MultiSwitchMirrorOnDropReportMapTraits> { + public: + using Traits = MultiSwitchMirrorOnDropReportMapTraits; + using BaseT = ThriftMultiSwitchMapNode< + MultiSwitchMirrorOnDropReportMap, + MultiSwitchMirrorOnDropReportMapTraits>; + using BaseT::modify; + + MultiSwitchMirrorOnDropReportMap* modify(std::shared_ptr* state); + static std::shared_ptr fromThrift( + const std::map< + std::string, + std::map>& + mnpuMirrorOnDropReports); + + private: + // Inherit the constructors required for clone() + using BaseT::BaseT; + friend class CloneAllocator; +}; + +} // namespace facebook::fboss diff --git a/fboss/agent/state/Port.cpp b/fboss/agent/state/Port.cpp index b2361e080bb1a..efe6512bc29ac 100644 --- a/fboss/agent/state/Port.cpp +++ b/fboss/agent/state/Port.cpp @@ -101,6 +101,6 @@ void Port::removeError(PortError error) { set(errors); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/Port.h b/fboss/agent/state/Port.h index 83f0e490985f8..fc2a6cd4a318e 100644 --- a/fboss/agent/state/Port.h +++ b/fboss/agent/state/Port.h @@ -745,6 +745,13 @@ class Port : public ThriftStructNode { set(conditionalEntropyRehash); } + bool getSelfHealingECMPLagEnable() const { + return cref()->cref(); + } + void setSelfHealingECMPLagEnable(bool selfHealingECMPLagEnable) { + set(selfHealingECMPLagEnable); + } + private: auto getRxSaks() const { return safe_cref(); diff --git a/fboss/agent/state/PortMap.cpp b/fboss/agent/state/PortMap.cpp index 553ce3ec881c7..5d82e7308d911 100644 --- a/fboss/agent/state/PortMap.cpp +++ b/fboss/agent/state/PortMap.cpp @@ -45,6 +45,6 @@ MultiSwitchPortMap* MultiSwitchPortMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/PortPgConfig.cpp b/fboss/agent/state/PortPgConfig.cpp index e5e2c65b5d2f9..509d3b11ee25f 100644 --- a/fboss/agent/state/PortPgConfig.cpp +++ b/fboss/agent/state/PortPgConfig.cpp @@ -16,6 +16,6 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/QcmConfig.cpp b/fboss/agent/state/QcmConfig.cpp index 484df93825104..1d28d73e71bb4 100644 --- a/fboss/agent/state/QcmConfig.cpp +++ b/fboss/agent/state/QcmConfig.cpp @@ -16,6 +16,6 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/QosPolicy.cpp b/fboss/agent/state/QosPolicy.cpp index 8a0f285844945..673523d26d0d2 100644 --- a/fboss/agent/state/QosPolicy.cpp +++ b/fboss/agent/state/QosPolicy.cpp @@ -46,6 +46,6 @@ ExpMap::ExpMap(std::vector cfg) { } } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/QosPolicyMap.cpp b/fboss/agent/state/QosPolicyMap.cpp index 22aa0394141b1..9db2e122f92cd 100644 --- a/fboss/agent/state/QosPolicyMap.cpp +++ b/fboss/agent/state/QosPolicyMap.cpp @@ -24,6 +24,6 @@ MultiSwitchQosPolicyMap* MultiSwitchQosPolicyMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/SflowCollector.cpp b/fboss/agent/state/SflowCollector.cpp index 8904a0f094587..ade265415112f 100644 --- a/fboss/agent/state/SflowCollector.cpp +++ b/fboss/agent/state/SflowCollector.cpp @@ -23,5 +23,5 @@ SflowCollector::SflowCollector(std::string ip, uint16_t port) { ref()->ref() = port; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/SflowCollectorMap.cpp b/fboss/agent/state/SflowCollectorMap.cpp index 3a1005c1be669..0565be15b6d5c 100644 --- a/fboss/agent/state/SflowCollectorMap.cpp +++ b/fboss/agent/state/SflowCollectorMap.cpp @@ -15,7 +15,7 @@ namespace facebook::fboss { -template class ThriftMapNode; +template struct ThriftMapNode; MultiSwitchSflowCollectorMap* MultiSwitchSflowCollectorMap::modify( std::shared_ptr* state) { diff --git a/fboss/agent/state/StateDelta.cpp b/fboss/agent/state/StateDelta.cpp index 9f894ea9ef776..7f6c47d525fea 100644 --- a/fboss/agent/state/StateDelta.cpp +++ b/fboss/agent/state/StateDelta.cpp @@ -234,6 +234,13 @@ MultiSwitchMapDelta StateDelta::getMirrorsDelta() const { old_->getMirrors().get(), new_->getMirrors().get()); } +MultiSwitchMapDelta +StateDelta::getMirrorOnDropReportsDelta() const { + return MultiSwitchMapDelta( + old_->getMirrorOnDropReports().get(), + new_->getMirrorOnDropReports().get()); +} + MultiSwitchMapDelta StateDelta::getTransceiversDelta() const { return MultiSwitchMapDelta( @@ -340,23 +347,25 @@ bool isStateDeltaEmpty(const StateDelta& stateDelta) { [&empty, &stateDelta](auto* child, auto name) { using ChildType = std::decay_t>; using Name = std::decay_t; - bool isEmpty = true; - if constexpr ( - std::is_same_v || - std::is_same_v) { - isEmpty = (DeltaFunctions::isEmpty(ThriftMapDelta( - stateDelta.oldState()->get().get(), - stateDelta.newState()->get().get()))); - } else { - isEmpty = (DeltaFunctions::isEmpty(MultiSwitchMapDelta( - stateDelta.oldState()->get().get(), - stateDelta.newState()->get().get()))); - } - if (!isEmpty) { - XLOG(INFO) << "Delta for " << utility::TagName::value() - << " is not empty"; + if constexpr (thrift_cow::ResolveMemberType::value) { + bool isEmpty = true; + if constexpr ( + std::is_same_v || + std::is_same_v) { + isEmpty = (DeltaFunctions::isEmpty(ThriftMapDelta( + stateDelta.oldState()->get().get(), + stateDelta.newState()->get().get()))); + } else { + isEmpty = (DeltaFunctions::isEmpty(MultiSwitchMapDelta( + stateDelta.oldState()->get().get(), + stateDelta.newState()->get().get()))); + } + if (!isEmpty) { + XLOG(INFO) << "Delta for " << utility::TagName::value() + << " is not empty"; + } + empty &= isEmpty; } - empty &= isEmpty; }); return empty; } diff --git a/fboss/agent/state/StateDelta.h b/fboss/agent/state/StateDelta.h index f63aa47617ff4..3f16c9b3ee0fb 100644 --- a/fboss/agent/state/StateDelta.h +++ b/fboss/agent/state/StateDelta.h @@ -30,6 +30,7 @@ #include "fboss/agent/state/LoadBalancerMap.h" #include "fboss/agent/state/Mirror.h" #include "fboss/agent/state/MirrorMap.h" +#include "fboss/agent/state/MirrorOnDropReportMap.h" #include "fboss/agent/state/NodeMapDelta.h" #include "fboss/agent/state/PortMap.h" #include "fboss/agent/state/QosPolicyMap.h" @@ -94,6 +95,8 @@ class StateDelta { ThriftMapDelta getUdfGroupDelta() const; MultiSwitchMapDelta getMirrorsDelta() const; + MultiSwitchMapDelta + getMirrorOnDropReportsDelta() const; MultiSwitchMapDelta getTransceiversDelta() const; MultiSwitchForwardingInformationBaseMapDelta getFibsDelta() const; diff --git a/fboss/agent/state/SwitchSettings.cpp b/fboss/agent/state/SwitchSettings.cpp index 68737c27a62ba..8efc02844c9bb 100644 --- a/fboss/agent/state/SwitchSettings.cpp +++ b/fboss/agent/state/SwitchSettings.cpp @@ -87,6 +87,6 @@ bool SwitchSettings::vlansSupported() const { return !getSwitchIdsOfType(cfg::SwitchType::NPU).empty(); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/SwitchSettings.h b/fboss/agent/state/SwitchSettings.h index 0fe60d19eb6d6..78c58d07fd45c 100644 --- a/fboss/agent/state/SwitchSettings.h +++ b/fboss/agent/state/SwitchSettings.h @@ -192,7 +192,15 @@ class SwitchSettings bool vlansSupported() const; bool isSwitchDrained() const { - return getActualSwitchDrainState() == cfg::SwitchDrainState::DRAINED; + /* + * DRAINED vs. DRAINED_DUE_TO_ASIC_ERROR is a distinction exposed by + * SwSwitch to Thrift/CLI to provide additional info about reason for + * DRAIN. From the device standpoint, both mean that the device is + * DRAINED. + */ + return getActualSwitchDrainState() == cfg::SwitchDrainState::DRAINED || + getActualSwitchDrainState() == + cfg::SwitchDrainState::DRAINED_DUE_TO_ASIC_ERROR; } cfg::SwitchDrainState getSwitchDrainState() const { @@ -557,24 +565,6 @@ class SwitchSettings } } - std::optional getReachabilityGroupListSize() const { - if (auto reachabilityGroupListSize = - cref()) { - return reachabilityGroupListSize->toThrift(); - } - return std::nullopt; - } - - void setReachabilityGroupListSize( - std::optional reachabilityGroupListSize) { - if (!reachabilityGroupListSize) { - ref().reset(); - } else { - set( - *reachabilityGroupListSize); - } - } - std::optional getSramGlobalFreePercentXoffThreshold() const { if (auto sramGlobalFreePercentXoffTh = cref()) { @@ -611,6 +601,105 @@ class SwitchSettings } } + std::optional getLinkFlowControlCreditThreshold() const { + if (auto linkFlowControlCreditTh = + cref()) { + return linkFlowControlCreditTh->toThrift(); + } + return std::nullopt; + } + + void setLinkFlowControlCreditThreshold( + std::optional linkFlowControlCreditTh) { + if (!linkFlowControlCreditTh) { + ref().reset(); + } else { + set( + *linkFlowControlCreditTh); + } + } + + std::optional getVoqDramBoundThreshold() const { + if (auto voqDramBoundTh = + cref()) { + return voqDramBoundTh->toThrift(); + } + return std::nullopt; + } + + void setVoqDramBoundThreshold(std::optional voqDramBoundTh) { + if (!voqDramBoundTh) { + ref().reset(); + } else { + set(*voqDramBoundTh); + } + } + + std::optional getConditionalEntropyRehashPeriodUS() const { + if (auto conditionalEntropyRehashPeriodUS = + cref()) { + return conditionalEntropyRehashPeriodUS->toThrift(); + } + return std::nullopt; + } + + void setConditionalEntropyRehashPeriodUS( + std::optional conditionalEntropyRehashPeriodUS) { + if (!conditionalEntropyRehashPeriodUS) { + ref().reset(); + } else { + set( + *conditionalEntropyRehashPeriodUS); + } + } + + std::optional getFirmwarePath() const { + if (auto firmwarePathToRet = cref()) { + return firmwarePathToRet->toThrift(); + } + return std::nullopt; + } + + void setFirmwarePath(const std::optional& newFirmwarePath) { + if (!newFirmwarePath) { + ref().reset(); + } else { + set(*newFirmwarePath); + } + } + + std::vector getReachabilityGroups() const { + if (auto reachabilityGroups = + cref()) { + return reachabilityGroups->toThrift(); + } + return std::vector(); + } + + void setReachabilityGroups(const std::vector& reachabilityGroups) { + set(reachabilityGroups); + } + + std::optional getSelfHealingEcmpLagConfig() + const { + if (auto selfHealingEcmpLagConfig = + cref()) { + return selfHealingEcmpLagConfig->toThrift(); + } + return std::nullopt; + } + + void setSelfHealingEcmpLagConfig( + const std::optional& + selfHealingEcmpLagConfig) { + if (!selfHealingEcmpLagConfig) { + ref().reset(); + } else { + set( + selfHealingEcmpLagConfig.value()); + } + } + SwitchSettings* modify(std::shared_ptr* state); private: diff --git a/fboss/agent/state/SwitchState.cpp b/fboss/agent/state/SwitchState.cpp index 9fec05ad643ec..15f54e4e21bc5 100644 --- a/fboss/agent/state/SwitchState.cpp +++ b/fboss/agent/state/SwitchState.cpp @@ -26,6 +26,7 @@ #include "fboss/agent/state/IpTunnel.h" #include "fboss/agent/state/IpTunnelMap.h" #include "fboss/agent/state/LabelForwardingInformationBase.h" +#include "fboss/agent/state/MirrorOnDropReportMap.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortMap.h" #include "fboss/agent/state/QosPolicyMap.h" @@ -295,6 +296,11 @@ void SwitchState::resetMirrors( ref() = mirrors; } +void SwitchState::resetMirrorOnDropReports( + const std::shared_ptr& reports) { + ref() = reports; +} + const std::shared_ptr& SwitchState::getSflowCollectors() const { return safe_cref(); @@ -304,6 +310,11 @@ const std::shared_ptr& SwitchState::getMirrors() const { return safe_cref(); } +const std::shared_ptr& +SwitchState::getMirrorOnDropReports() const { + return safe_cref(); +} + const std::shared_ptr& SwitchState::getQosPolicies() const { return safe_cref(); @@ -819,6 +830,8 @@ template MultiSwitchInterfaceMap* SwitchState::modify< switch_state_tags::remoteInterfaceMaps>(std::shared_ptr*); template MultiSwitchMirrorMap* SwitchState::modify< switch_state_tags::mirrorMaps>(std::shared_ptr*); +template MultiSwitchMirrorOnDropReportMap* SwitchState::modify< + switch_state_tags::mirrorOnDropReportMaps>(std::shared_ptr*); template MultiSwitchIpTunnelMap* SwitchState::modify< switch_state_tags::ipTunnelMaps>(std::shared_ptr*); template MultiSwitchSystemPortMap* SwitchState::modify< @@ -846,6 +859,6 @@ template MultiSwitchPortFlowletCfgMap* SwitchState::modify< template MultiSwitchDsfNodeMap* SwitchState::modify< switch_state_tags::dsfNodesMap>(std::shared_ptr*); -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/SwitchState.h b/fboss/agent/state/SwitchState.h index d8d23d2712dab..1afc97b7a1ad3 100644 --- a/fboss/agent/state/SwitchState.h +++ b/fboss/agent/state/SwitchState.h @@ -35,6 +35,7 @@ #include "fboss/agent/state/LabelForwardingInformationBase.h" #include "fboss/agent/state/LoadBalancerMap.h" #include "fboss/agent/state/MirrorMap.h" +#include "fboss/agent/state/MirrorOnDropReportMap.h" #include "fboss/agent/state/NodeBase.h" #include "fboss/agent/state/PortFlowletConfig.h" #include "fboss/agent/state/PortFlowletConfigMap.h" @@ -81,6 +82,10 @@ RESOLVE_STRUCT_MEMBER( SwitchState, switch_state_tags::mirrorMaps, MultiSwitchMirrorMap); +RESOLVE_STRUCT_MEMBER( + SwitchState, + switch_state_tags::mirrorOnDropReportMaps, + MultiSwitchMirrorOnDropReportMap); RESOLVE_STRUCT_MEMBER( SwitchState, switch_state_tags::sflowCollectorMaps, @@ -435,6 +440,8 @@ class SwitchState : public ThriftStructNode { const std::shared_ptr& getLoadBalancers() const; const std::shared_ptr getTeFlowTable() const; const std::shared_ptr& getMirrors() const; + const std::shared_ptr& + getMirrorOnDropReports() const; const std::shared_ptr& getFibs() const; const std::shared_ptr& @@ -485,6 +492,8 @@ class SwitchState : public ThriftStructNode { */ void resetMirrors(const std::shared_ptr& mirrors); + void resetMirrorOnDropReports( + const std::shared_ptr& reports); void resetPorts(std::shared_ptr ports); void resetAggregatePorts( std::shared_ptr aggPorts); diff --git a/fboss/agent/state/SystemPort.cpp b/fboss/agent/state/SystemPort.cpp index 1068083c3e34e..e6e0d0130696f 100644 --- a/fboss/agent/state/SystemPort.cpp +++ b/fboss/agent/state/SystemPort.cpp @@ -11,6 +11,6 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/SystemPort.h b/fboss/agent/state/SystemPort.h index 7f8ed7fbb83e5..fe1c14921d7fd 100644 --- a/fboss/agent/state/SystemPort.h +++ b/fboss/agent/state/SystemPort.h @@ -149,6 +149,13 @@ class SystemPort getRemoteSystemPortType().value() == RemoteSystemPortType::STATIC_ENTRY; } + bool getShelDestinationEnabled() const { + return cref()->cref(); + } + void setShelDestinationEnabled(bool shelDestinationEnabled) { + set(shelDestinationEnabled); + } + private: // Inherit the constructors required for clone() using Base::Base; diff --git a/fboss/agent/state/SystemPortMap.cpp b/fboss/agent/state/SystemPortMap.cpp index 52e588620e5ca..69823fe34001e 100644 --- a/fboss/agent/state/SystemPortMap.cpp +++ b/fboss/agent/state/SystemPortMap.cpp @@ -72,5 +72,5 @@ MultiSwitchSystemPortMap* MultiSwitchSystemPortMap::modify( } } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/TeFlowTable.cpp b/fboss/agent/state/TeFlowTable.cpp index 5083ea92b28a7..a6282b1a01f3d 100644 --- a/fboss/agent/state/TeFlowTable.cpp +++ b/fboss/agent/state/TeFlowTable.cpp @@ -205,6 +205,6 @@ MultiTeFlowTable* MultiTeFlowTable::modify( return ptr; } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/Thrifty.h b/fboss/agent/state/Thrifty.h index 8196137e71a75..766ab72bf900a 100644 --- a/fboss/agent/state/Thrifty.h +++ b/fboss/agent/state/Thrifty.h @@ -298,6 +298,7 @@ struct ThriftMultiSwitchMapNodeTraits { template struct ValueTraits { using default_type = thrift_cow::ThriftMapNode>; using map_type = MAP; diff --git a/fboss/agent/state/Transceiver.cpp b/fboss/agent/state/Transceiver.cpp index a10c936c43e43..9830fc0cf3771 100644 --- a/fboss/agent/state/Transceiver.cpp +++ b/fboss/agent/state/Transceiver.cpp @@ -62,5 +62,5 @@ TransceiverSpec::toPlatformPortConfigOverrideFactor() const { return factor; } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/TransceiverMap.cpp b/fboss/agent/state/TransceiverMap.cpp index 948e047f349de..a2143e129c417 100644 --- a/fboss/agent/state/TransceiverMap.cpp +++ b/fboss/agent/state/TransceiverMap.cpp @@ -24,6 +24,6 @@ MultiSwitchTransceiverMap* MultiSwitchTransceiverMap::modify( return SwitchState::modify(state); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/UdfConfig.cpp b/fboss/agent/state/UdfConfig.cpp index 97a355574260e..e63b7bd4c353c 100644 --- a/fboss/agent/state/UdfConfig.cpp +++ b/fboss/agent/state/UdfConfig.cpp @@ -13,5 +13,5 @@ namespace facebook::fboss { -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/UdfGroup.cpp b/fboss/agent/state/UdfGroup.cpp index c54c70cdb10b4..5d49e148072ac 100644 --- a/fboss/agent/state/UdfGroup.cpp +++ b/fboss/agent/state/UdfGroup.cpp @@ -67,5 +67,5 @@ void UdfGroup::setUdfPacketMatcherIds( set(matcherIds); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/UdfGroupMap.cpp b/fboss/agent/state/UdfGroupMap.cpp index ef7791feee9b3..500c3f6dc177e 100644 --- a/fboss/agent/state/UdfGroupMap.cpp +++ b/fboss/agent/state/UdfGroupMap.cpp @@ -14,6 +14,6 @@ void UdfGroupMap::addUdfGroup(const std::shared_ptr& udfGroup) { return addNode(udfGroup); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/UdfPacketMatcher.cpp b/fboss/agent/state/UdfPacketMatcher.cpp index 0843693c5ad9c..88f823744788a 100644 --- a/fboss/agent/state/UdfPacketMatcher.cpp +++ b/fboss/agent/state/UdfPacketMatcher.cpp @@ -62,5 +62,5 @@ void UdfPacketMatcher::setUdfL4DstPort(std::optional port) { } } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/UdfPacketMatcherMap.cpp b/fboss/agent/state/UdfPacketMatcherMap.cpp index 5b45bc261175b..6bf012a4d2354 100644 --- a/fboss/agent/state/UdfPacketMatcherMap.cpp +++ b/fboss/agent/state/UdfPacketMatcherMap.cpp @@ -15,6 +15,6 @@ void UdfPacketMatcherMap::addUdfPacketMatcher( return addNode(udfPacketMatcher); } -template class ThriftMapNode; +template struct ThriftMapNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/Vlan.cpp b/fboss/agent/state/Vlan.cpp index c0a5293bc88c9..7185271ba31d0 100644 --- a/fboss/agent/state/Vlan.cpp +++ b/fboss/agent/state/Vlan.cpp @@ -81,6 +81,6 @@ void Vlan::addPort(PortID id, bool tagged) { ref()->emplace(id, tagged); } -template class ThriftStructNode; +template struct ThriftStructNode; } // namespace facebook::fboss diff --git a/fboss/agent/state/tests/AclGroupTests.cpp b/fboss/agent/state/tests/AclGroupTests.cpp index 6912786ecda51..13866428452da 100644 --- a/fboss/agent/state/tests/AclGroupTests.cpp +++ b/fboss/agent/state/tests/AclGroupTests.cpp @@ -19,6 +19,8 @@ #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TestUtils.h" +#include "fboss/agent/gen-cpp2/switch_config_constants.h" + #include using namespace facebook::fboss; @@ -40,14 +42,12 @@ const uint8_t kDscpVal4 = 4; const std::string kTable1 = "table1"; const std::string kTable2 = "table2"; const std::string kTable3 = "table3"; -const std::string kAclTable1 = "AclTable1"; const cfg::AclStage kAclStage1 = cfg::AclStage::INGRESS; const cfg::AclStage kAclStage2 = cfg::AclStage::INGRESS_MACSEC; const std::string kGroup1 = "group1"; const std::string kGroup2 = "group2"; -const std::string kAclTableGroupName = "ingress-ACL-Table-Group"; const std::string kAcl1a = "acl1a"; const std::string kAcl1b = "acl1b"; @@ -81,7 +81,8 @@ namespace { std::shared_ptr getAclMapFromState( std::shared_ptr state) { - auto aclMap = state->getAclsForTable(kAclStage1, kAclTable1); + auto aclMap = state->getAclsForTable( + kAclStage1, cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); EXPECT_NE(nullptr, aclMap); return aclMap; } @@ -443,7 +444,9 @@ TEST(AclGroup, SerializeMultiSwitchAclTableGroupMap) { map1->addEntry(entry2); map1->addEntry(entry3); - auto table1 = std::make_shared(0, kAclTable1); + const std::string table1Name = + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); + auto table1 = std::make_shared(0, table1Name); table1->setAclMap(map1); auto tableMap = std::make_shared(); @@ -451,7 +454,8 @@ TEST(AclGroup, SerializeMultiSwitchAclTableGroupMap) { auto tableGroup = std::make_shared(kAclStage1); tableGroup->setAclTableMap(tableMap); - tableGroup->setName(kAclTableGroupName); + tableGroup->setName( + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE_GROUP()); auto tableGroups = std::make_shared(); tableGroups->addNode(tableGroup, scope()); diff --git a/fboss/agent/state/tests/BUCK b/fboss/agent/state/tests/BUCK index 43d2332754a66..16c5cd5335859 100644 --- a/fboss/agent/state/tests/BUCK +++ b/fboss/agent/state/tests/BUCK @@ -23,6 +23,7 @@ cpp_unittest( "MacEntryTests.cpp", "MacTableTests.cpp", "MapDeltaTests.cpp", + "MirrorOnDropReportTests.cpp", "MirrorTests.cpp", "MultiSwitchMapDeltaTests.cpp", "NeighborTests.cpp", diff --git a/fboss/agent/state/tests/ControlPlaneTests.cpp b/fboss/agent/state/tests/ControlPlaneTests.cpp index e24af14befb3b..75474e52140f0 100644 --- a/fboss/agent/state/tests/ControlPlaneTests.cpp +++ b/fboss/agent/state/tests/ControlPlaneTests.cpp @@ -23,6 +23,7 @@ using std::shared_ptr; namespace { constexpr auto kNumCPUQueues = MockAsic::kDefaultNumPortQueues; +constexpr auto kNumCPUVoqs = 8; HwSwitchMatcher scope() { return HwSwitchMatcher{std::unordered_set{SwitchID(0)}}; @@ -87,6 +88,60 @@ std::vector getConfigCPUQueues() { return cpuQueues; } +QueueConfig gen2Stage3q2qCPUVoqs() { + QueueConfig voqs; + shared_ptr high = make_shared(static_cast(2)); + high->setName("cpuVoq-high"); + high->setStreamType(cfg::StreamType::MULTICAST); + high->setScheduling(cfg::QueueScheduling::INTERNAL); + voqs.push_back(high); + + shared_ptr mid = make_shared(static_cast(1)); + mid->setName("cpuVoq-mid"); + mid->setStreamType(cfg::StreamType::MULTICAST); + mid->setScheduling(cfg::QueueScheduling::INTERNAL); + mid->setMaxDynamicSharedBytes(20 * 1024 * 1024); + voqs.push_back(mid); + + shared_ptr low = make_shared(static_cast(0)); + low->setName("cpuVoq-low"); + low->setStreamType(cfg::StreamType::MULTICAST); + low->setScheduling(cfg::QueueScheduling::INTERNAL); + low->setMaxDynamicSharedBytes(20 * 1024 * 1024); + voqs.push_back(low); + + return voqs; +} + +std::vector get2Stage3q2qCPUVoqs() { + std::vector cpuVoqs; + + cfg::PortQueue high; + *high.id() = 2; + high.name() = "cpuVoq-high"; + *high.streamType() = cfg::StreamType::MULTICAST; + *high.scheduling() = cfg::QueueScheduling::INTERNAL; + cpuVoqs.push_back(high); + + cfg::PortQueue mid; + *mid.id() = 1; + mid.name() = "cpuVoq-mid"; + *mid.streamType() = cfg::StreamType::MULTICAST; + *mid.scheduling() = cfg::QueueScheduling::INTERNAL; + mid.maxDynamicSharedBytes() = 20 * 1024 * 1024; + cpuVoqs.push_back(mid); + + cfg::PortQueue low; + *low.id() = 0; + low.name() = "cpuVoq-low"; + *low.streamType() = cfg::StreamType::MULTICAST; + *low.scheduling() = cfg::QueueScheduling::INTERNAL; + low.maxDynamicSharedBytes() = 20 * 1024 * 1024; + cpuVoqs.push_back(low); + + return cpuVoqs; +} + QueueConfig genCPUQueues() { QueueConfig queues; shared_ptr high = make_shared(static_cast(9)); @@ -136,6 +191,16 @@ boost::container::flat_map> getCPUQueuesMap() { return queueMap; } +boost::container::flat_map> +get2Stage3q2qCPUVoqsMap() { + QueueConfig voqs = gen2Stage3q2qCPUVoqs(); + boost::container::flat_map> voqMap; + for (const auto& voq : voqs) { + voqMap.emplace(voq->getID(), voq); + } + return voqMap; +} + shared_ptr generateControlPlane() { shared_ptr controlPlane = make_shared(); @@ -219,8 +284,10 @@ TEST(ControlPlane, applyDefaultConfig) { // apply default cpu 4 queues settings auto cfgCpuQueues = getConfigCPUQueues(); + auto cfgCpuVoqs = get2Stage3q2qCPUVoqs(); cfg::SwitchConfig config; *config.cpuQueues() = cfgCpuQueues; + config.cpuVoqs() = cfgCpuVoqs; auto stateV1 = publishAndApplyConfig(stateV0, &config, platform.get()); EXPECT_NE(nullptr, stateV1); @@ -240,6 +307,21 @@ TEST(ControlPlane, applyDefaultConfig) { EXPECT_TRUE(*cpuQueue == *queue); } } + auto newVoqs = entry.second->getVoqs(); + // it should always generate all queues + EXPECT_EQ(newVoqs->size(), kNumCPUVoqs); + auto cpu4VoqsMap = get2Stage3q2qCPUVoqsMap(); + for (const auto& voq : std::as_const(*newVoqs)) { + if (cpu4VoqsMap.find(voq->getID()) == cpu4VoqsMap.end()) { + // if it's not one of those 3 voqs, it should have default value + auto unconfiguredVoq = std::make_shared(voq->getID()); + unconfiguredVoq->setStreamType(cfg::StreamType::MULTICAST); + EXPECT_TRUE(*unconfiguredVoq == *voq); + } else { + auto& cpuVoq = cpu4VoqsMap.find(voq->getID())->second; + EXPECT_TRUE(*cpuVoq == *voq); + } + } } validateThriftMapMapSerialization(*stateV1->getControlPlane()); } diff --git a/fboss/agent/state/tests/InterfaceTests.cpp b/fboss/agent/state/tests/InterfaceTests.cpp index 612c5acd9a0aa..10818f95d0d7f 100644 --- a/fboss/agent/state/tests/InterfaceTests.cpp +++ b/fboss/agent/state/tests/InterfaceTests.cpp @@ -264,6 +264,7 @@ TEST(Interface, RemoteInterfaceModify) { HwSwitchMatcher scope(std::unordered_set({SwitchID{1}})); auto sysPort1 = makeSysPort("olympic", 1001, 100); + sysPort1->setScope(cfg::Scope::GLOBAL); remoteSysPorts->addNode(sysPort1, scope); auto remoteInterfaces = stateV1->getRemoteInterfaces()->modify(&stateV1); InterfaceID kIntf(1001); @@ -277,6 +278,7 @@ TEST(Interface, RemoteInterfaceModify) { false, false, cfg::InterfaceType::SYSTEM_PORT); + rif->setScope(cfg::Scope::GLOBAL); remoteInterfaces->addNode(rif, scope); stateV1->publish(); diff --git a/fboss/agent/state/tests/MirrorOnDropReportTests.cpp b/fboss/agent/state/tests/MirrorOnDropReportTests.cpp new file mode 100644 index 0000000000000..0f75ecbf64ac7 --- /dev/null +++ b/fboss/agent/state/tests/MirrorOnDropReportTests.cpp @@ -0,0 +1,67 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include + +#include "fboss/agent/state/SwitchState.h" +#include "fboss/agent/test/TestUtils.h" + +using namespace ::testing; + +namespace facebook::fboss { + +class MirrorOnDropReportTest : public ::testing::Test { + protected: + void SetUp() override { + platform_ = createMockPlatform(cfg::SwitchType::VOQ, kVoqSwitchIdBegin); + state_ = std::make_shared(); + addSwitchInfo( + state_, cfg::SwitchType::VOQ, kVoqSwitchIdBegin /* switchId */); + config_ = testConfigA(cfg::SwitchType::VOQ); + } + + std::shared_ptr state_; + std::shared_ptr platform_; + cfg::SwitchConfig config_; +}; + +cfg::MirrorOnDropReport makeReportCfg(const std::string& ip) { + cfg::MirrorOnDropReport report; + report.name() = "mod-1"; + report.mirrorPortId() = 5; + report.localSrcPort() = 10000; + report.collectorIp() = ip; + report.collectorPort() = 20000; + report.mtu() = 1500; + report.truncateSize() = 128; + report.dscp() = 0; + report.agingIntervalUsecs() = 100; + return report; +} + +TEST_F(MirrorOnDropReportTest, CreateReportV4) { + config_.mirrorOnDropReports()->push_back(makeReportCfg("1.2.3.4")); + + state_ = publishAndApplyConfig(state_, &config_, platform_.get()); + + auto report = state_->getMirrorOnDropReports()->getNodeIf("mod-1"); + EXPECT_NE(report, nullptr); + EXPECT_EQ(report->getID(), "mod-1"); + EXPECT_TRUE(report->getLocalSrcIp().isV4()); + EXPECT_FALSE(report->getSwitchMac().empty()); + EXPECT_FALSE(report->getFirstInterfaceMac().empty()); +} + +TEST_F(MirrorOnDropReportTest, CreateReportV6) { + config_.mirrorOnDropReports()->push_back(makeReportCfg("2401::1")); + + state_ = publishAndApplyConfig(state_, &config_, platform_.get()); + + auto report = state_->getMirrorOnDropReports()->getNodeIf("mod-1"); + EXPECT_NE(report, nullptr); + EXPECT_EQ(report->getID(), "mod-1"); + EXPECT_TRUE(report->getLocalSrcIp().isV6()); + EXPECT_FALSE(report->getSwitchMac().empty()); + EXPECT_FALSE(report->getFirstInterfaceMac().empty()); +} + +} // namespace facebook::fboss diff --git a/fboss/agent/switch_config.thrift b/fboss/agent/switch_config.thrift index 62f3cecc36dfc..c1583604baea2 100644 --- a/fboss/agent/switch_config.thrift +++ b/fboss/agent/switch_config.thrift @@ -369,6 +369,27 @@ struct Mirror { 5: optional i32 samplingRate; } +struct MirrorOnDropReport { + 1: string name; + /* + * Possible options as below: + * 1. Recycle port: MOD packets will be injected back into the pipeline via recycle port. + * 2. Eventor port: MOD packets will be injected back into the pipeline via eventor port. Provides the option to pack multiple MOD packets. + * 3. Front panel Ethernet port: MOD packets will be forwarded out of the specified port. + */ + 2: i32 mirrorPortId; + // Source IP will be populated based on switch IP at runtime, so not configurable. + 3: i16 localSrcPort; + 4: string collectorIp; + 5: i16 collectorPort; + 6: i16 mtu; + // Contents of the dropped packet will be truncated when mirroring. + 7: i16 truncateSize = 128; + 8: byte dscp = 0; + // At most one mirrored packet will be sent per port/PG/VOQ within an interval. Granularity is not configurable as of now. + 9: optional i32 agingIntervalUsecs; +} + /** * The action for an access control entry */ @@ -560,6 +581,7 @@ enum AclTableActionType { MIRROR_INGRESS = 4, MIRROR_EGRESS = 5, SET_USER_DEFINED_TRAP = 6, + DISABLE_ARS_FORWARDING = 7, } enum AclTableQualifier { @@ -605,6 +627,7 @@ enum AclStage { INGRESS = 0, INGRESS_MACSEC = 1, EGRESS_MACSEC = 2, + EGRESS = 3, } // startdocs_AclTableGroup_struct @@ -970,8 +993,14 @@ typedef string BufferPoolConfigName typedef string PortFlowletConfigName +typedef string FirmwareName + const i32 DEFAULT_PORT_MTU = 9412; +const string DEFAULT_INGRESS_ACL_TABLE_GROUP = "ingress-ACL-Table-Group"; + +const string DEFAULT_INGRESS_ACL_TABLE = "AclTable1"; + enum PortType { INTERFACE_PORT = 0, FABRIC_PORT = 1, @@ -1156,7 +1185,16 @@ struct Port { 31: Scope scope = Scope.LOCAL; 32: optional PortQueueConfigName portVoqConfigName; + + /* + * DSF Interface node to enable conditional entropy, rotating hash seed periodically to increase entropy. + */ 33: bool conditionalEntropyRehash = false; + + /* + * DSF Interface node to enable SHEL messages - port UP/DOWN notification to other interface nodes. + */ + 34: optional bool selfHealingECMPLagEnable; } enum LacpPortRate { @@ -1329,6 +1367,7 @@ struct NdpConfig { enum InterfaceType { VLAN = 1, SYSTEM_PORT = 2, + PORT = 3, } enum AsicType { @@ -1409,6 +1448,9 @@ struct Interface { 14: optional map dhcpRelayOverridesV4; 15: optional map dhcpRelayOverridesV6; 16: Scope scope = Scope.LOCAL; + + /* valid only for port type of interface */ + 17: optional i32 portID; } struct StaticRouteWithNextHops { @@ -1528,6 +1570,7 @@ enum L2LearningMode { enum SwitchDrainState { UNDRAINED = 0, DRAINED = 1, + DRAINED_DUE_TO_ASIC_ERROR = 2, } /* @@ -1617,18 +1660,38 @@ struct ExactMatchTableConfig { const i16 DEFAULT_FLOWLET_TABLE_SIZE = 4096; const i64 DEFAULT_PORT_ID_RANGE_MIN = 0; const i64 DEFAULT_PORT_ID_RANGE_MAX = 2047; +const i64 DEFAULT_DUAL_STAGE_3Q_2Q_PORT_ID_RANGE_MIN = 0; +const i64 DEFAULT_DUAL_STAGE_3Q_2Q_PORT_ID_RANGE_MAX = 65536; struct SystemPortRanges { 1: list systemPortRanges; } +enum FirmwareLoadType { + FIRMWARE_LOAD_TYPE_START = 0, + FIRMWARE_LOAD_TYPE_STOP = 1, +} + +struct FirmwareInfo { + 1: i32 coreToUse; + 2: string path; + 3: string logPath; + 4: FirmwareLoadType firmwareLoadType; +} + +struct SelfHealingEcmpLagConfig { + 1: string shelSrcIp; + 2: string shelDstIp; + 3: i32 shelPeriodicIntervalMS; +} + struct SwitchInfo { 1: SwitchType switchType; 2: AsicType asicType; // local switch identifier 3: i16 switchIndex; 4: Range64 portIdRange; - 5: optional Range64 systemPortRange; + 5: optional Range64 systemPortRange_DEPRECATED; 6: optional string switchMac; 7: optional string connectionHandle; 8: SystemPortRanges systemPortRanges; @@ -1643,6 +1706,7 @@ struct SwitchInfo { // as part of config for other nodes to bootstrap // communication to this node 11: optional i32 inbandPortId; + 12: map firmwareNameToFirmwareInfo; } /* @@ -1710,6 +1774,17 @@ struct SwitchSettings { // Once the SRAM free buffers goes above this threshold, // specified as a percent of total SRAM buffers, send XON. 20: optional byte sramGlobalFreePercentXonThreshold; + // Fabric side threshold tracking the minimum needed + // fifo free space on the peer device fifo. + 21: optional i16 linkFlowControlCreditThreshold; + // SRAM2DRAM threshold on VOQ. Single parameter as of now + // controlling both bounds and recovery thresholds. + 22: optional i32 voqDramBoundThreshold; + // Conditional Entropy Rehash Period for VOQ devices + 23: optional i32 conditionalEntropyRehashPeriodUS; + 24: optional string firmwarePath; + // SHEL attributes to configure 1. SHEL message SrcIP, 2. DstIp, and 3. Interval for SHEL periodic messages + 25: optional SelfHealingEcmpLagConfig selfHealingEcmpLagConfig; } // Global buffer pool @@ -1805,7 +1880,7 @@ struct DsfNode { 2: i64 switchId; 3: DsfNodeType type; 4: list loopbackIps; - 5: optional Range64 systemPortRange; + 5: optional Range64 systemPortRange_DEPRECATED; 6: optional string nodeMac; 7: AsicType asicType; 8: fboss_common.PlatformType platformType; @@ -2074,9 +2149,6 @@ struct SwitchConfig { 42: optional QcmConfig qcmConfig; 43: optional map> portPgConfigs; 44: optional map bufferPoolConfigs; - // aclTableGroup does not need to be a list at this point, as we only expect to - // support a single group for the foreseeable future. This could be changed to - // list later if the need arises to support multiple groups. 45: optional AclTableGroup aclTableGroup; // agent sdk versions 46: optional SdkVersion sdkVersion; @@ -2092,4 +2164,8 @@ struct SwitchConfig { 53: optional string icmpV4UnavailableSrcAddress; // Overrides the system hostname, useful in ICMP responses 54: optional string hostname; + 55: optional list cpuVoqs; + // list of ACL table groups, prefer this over aclTableGroup, aclTableGroup will be deprecated + 56: optional list aclTableGroups; + 57: list mirrorOnDropReports = []; } diff --git a/fboss/agent/switch_state.thrift b/fboss/agent/switch_state.thrift index 7c288670dbcbb..ffda051953fc1 100644 --- a/fboss/agent/switch_state.thrift +++ b/fboss/agent/switch_state.thrift @@ -134,7 +134,9 @@ struct PortFields { 52: list activeErrors; 53: switch_config.Scope scope = switch_config.Scope.LOCAL; 54: optional i32 reachabilityGroupId; + // DSF Interface node to enable conditional entropy, rotating hash seed periodically to increase entropy. 55: bool conditionalEntropyRehash = false; + 56: bool selfHealingECMPLagEnable = false; } typedef ctrl.SystemPortThrift SystemPortFields @@ -316,10 +318,26 @@ struct MirrorFields { 15: optional i32 samplingRate; } +struct MirrorOnDropReportFields { + 1: string name; + 2: i32 mirrorPortId; + 3: Address.BinaryAddress localSrcIp; // Populated at runtime + 4: i16 localSrcPort; + 5: Address.BinaryAddress collectorIp; + 6: i16 collectorPort; + 7: i16 mtu; + 8: i16 truncateSize; + 9: byte dscp; + 10: optional i32 agingIntervalUsecs; + 11: string switchMac; // Populated at runtime + 12: string firstInterfaceMac; // Populated at runtime +} + struct ControlPlaneFields { 1: list queues; 2: list rxReasonToQueue; 3: optional string defaultQosPolicy; + 4: list voqs; } struct PortFlowletFields { @@ -389,10 +407,17 @@ struct SwitchSettingsFields { // When there's no IPv4 addresses configured, what address to use to source IPv4 ICMP packets from. 42: Address.BinaryAddress icmpV4UnavailableSrcAddress; // Switch property of reachability group size, for the use of input balanced mode. - 43: optional i32 reachabilityGroupListSize; + 43: optional i32 reachabilityGroupListSize_DEPRECATED; // SRAM global thresholds to send PFC XOFF/XON 44: optional byte sramGlobalFreePercentXoffThreshold; 45: optional byte sramGlobalFreePercentXonThreshold; + 46: optional i16 linkFlowControlCreditThreshold; + 47: optional i32 voqDramBoundThreshold; + // Conditional Entropy Rehash Period for VOQ devices + 48: optional i32 conditionalEntropyRehashPeriodUS; + 49: optional string firmwarePath; + 50: list reachabilityGroups = []; + 51: optional switch_config.SelfHealingEcmpLagConfig selfHealingEcmpLagConfig; } struct RoutePrefix { @@ -520,6 +545,9 @@ struct InterfaceFields { */ 21: optional common.LivenessStatus remoteIntfLivenessStatus; 22: switch_config.Scope scope = switch_config.Scope.LOCAL; + + /* applicable only for port type of interface */ + 23: optional i32 portId; } enum LacpState { @@ -647,6 +675,10 @@ struct SwitchState { 118: map> interfaceMaps; 119: map> dsfNodesMap; 120: map> portFlowletCfgMaps; + 121: map< + SwitchIdList, + map + > mirrorOnDropReportMaps; // Remote object maps 600: map> remoteSystemPortMaps; 601: map> remoteInterfaceMaps; diff --git a/fboss/agent/test/AgentEnsemble.cpp b/fboss/agent/test/AgentEnsemble.cpp index 8dc3793fe84d0..f1be02e07e582 100644 --- a/fboss/agent/test/AgentEnsemble.cpp +++ b/fboss/agent/test/AgentEnsemble.cpp @@ -3,7 +3,6 @@ #include "fboss/agent/test/AgentEnsemble.h" #include "fboss/agent/AgentConfig.h" -#include "fboss/agent/SwitchStats.h" #include "fboss/agent/Utils.h" #include "fboss/agent/CommonInit.h" @@ -118,7 +117,7 @@ void AgentEnsemble::setupEnsemble( } startAgent(failHwCallsOnWarmboot); - for (const auto& switchId : getSw()->getSwitchInfoTable().getSwitchIDs()) { + for (const auto& switchId : getSw()->getSwitchInfoTable().getL3SwitchIDs()) { ensureHwSwitchConnected(switchId); } } diff --git a/fboss/agent/test/AgentEnsemble.h b/fboss/agent/test/AgentEnsemble.h index 57dc7ce59ae76..4691909d1ec77 100644 --- a/fboss/agent/test/AgentEnsemble.h +++ b/fboss/agent/test/AgentEnsemble.h @@ -138,17 +138,26 @@ class AgentEnsemble : public TestEnsembleIf { cfg::PortType portType, std::optional iPhyFaultStatus = std::nullopt) override { - if (getSw()->getSwitchRunState() >= SwitchRunState::CONFIGURED) { - if (linkToggler_) { - linkToggler_->linkStateChanged(port, up); - } + if (linkToggler_ && + getSw()->getSwitchRunState() >= SwitchRunState::CONFIGURED) { + linkToggler_->linkStateChanged(port, up); getSw()->linkStateChanged(port, up, portType); + } else if ( + !linkToggler_ && + getSw()->getSwitchRunState() >= SwitchRunState::INITIALIZED) { + getSw()->linkStateChanged(port, up, portType); + } else { + XLOG(DBG2) << "Agent Ensemble dropping link state change for port " + << port << " UP:" << up; } } - void linkActiveStateChanged( - const std::map& port2IsActive) override { - getSw()->linkActiveStateChanged(port2IsActive); + void linkActiveStateChangedOrFwIsolated( + const std::map& port2IsActive, + bool fwIsolated, + const std::optional& numActiveFabricPortsAtFwIsolate) override { + getSw()->linkActiveStateChangedOrFwIsolated( + port2IsActive, fwIsolated, numActiveFabricPortsAtFwIsolate); } void linkConnectivityChanged( const std::map& diff --git a/fboss/agent/test/AgentHwTest.cpp b/fboss/agent/test/AgentHwTest.cpp index f2ab6b7ab004f..7fb585b1a8993 100644 --- a/fboss/agent/test/AgentHwTest.cpp +++ b/fboss/agent/test/AgentHwTest.cpp @@ -194,12 +194,6 @@ cfg::SwitchConfig AgentHwTest::initialConfig( ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - - if (FLAGS_enable_acl_table_group) { - utility::addAclTableGroup( - &config, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); - utility::addDefaultAclTable(config); - } return config; } diff --git a/fboss/agent/test/AgentIntegrationTestBase.cpp b/fboss/agent/test/AgentIntegrationTestBase.cpp index 5e04ce6f4165e..1d4aadccdcdfd 100644 --- a/fboss/agent/test/AgentIntegrationTestBase.cpp +++ b/fboss/agent/test/AgentIntegrationTestBase.cpp @@ -2,7 +2,6 @@ #include "fboss/agent/test/AgentIntegrationTestBase.h" #include "fboss/agent/AgentConfig.h" -#include "fboss/agent/SwitchIdScopeResolver.h" #include "fboss/agent/gen-cpp2/agent_config_types.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/hw/test/ConfigFactory.h" diff --git a/fboss/agent/test/AgentWrapperTest.h b/fboss/agent/test/AgentWrapperTest.h index ce7e3608fa83f..cecca70f95552 100644 --- a/fboss/agent/test/AgentWrapperTest.h +++ b/fboss/agent/test/AgentWrapperTest.h @@ -9,7 +9,7 @@ namespace facebook::fboss { class AgentNetWhoAmI; -class AgentConfig; +struct AgentConfig; template class AgentWrapperTest : public ::testing::Test { diff --git a/fboss/agent/test/AlpmUtilsTests.cpp b/fboss/agent/test/AlpmUtilsTests.cpp index 282637fda44b2..40f12b2b7bb39 100644 --- a/fboss/agent/test/AlpmUtilsTests.cpp +++ b/fboss/agent/test/AlpmUtilsTests.cpp @@ -11,7 +11,6 @@ #include #include "fboss/agent/AlpmUtils.h" -#include "fboss/agent/GtestDefs.h" #include "fboss/agent/state/Route.h" #include "fboss/agent/state/RouteTypes.h" diff --git a/fboss/agent/test/BUCK b/fboss/agent/test/BUCK index 94b7e58bbf35a..5c0c85f09f2ff 100644 --- a/fboss/agent/test/BUCK +++ b/fboss/agent/test/BUCK @@ -87,7 +87,6 @@ cpp_unittest( "//fboss/agent:core", "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", - "//fboss/agent:fsdb_helper", "//fboss/agent:gtest_defs", "//fboss/agent:handler", "//fboss/agent:hw_asic_table", @@ -129,14 +128,12 @@ cpp_unittest( "//folly/io:iobuf", "//folly/logging:logging", "//folly/portability:gtest", - "//thrift/lib/cpp/util:enum_utils", "//thrift/lib/cpp2/async:pooled_request_channel", "//thrift/lib/cpp2/async:server_stream", "//thrift/lib/cpp2/protocol:protocol", "//thrift/lib/cpp2/util:util", ], external_deps = [ - "boost", "gflags", ("boost", None, "boost_range"), ], @@ -212,12 +209,8 @@ cpp_library( "//folly:network_address", "//folly:range", "//folly/container:enumerate", - "//folly/json:dynamic", - "//folly/logging:init", "//folly/synchronization:baton", - "//thrift/lib/cpp2/protocol:protocol", ], - exported_external_deps = ["boost"], ) cpp_library( @@ -295,7 +288,6 @@ cpp_library( ":ecmp_helper", ":resourcelibutil", "//fboss/agent:core", - "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", "//fboss/agent:utils", "//fboss/agent/if:ctrl-cpp2-types", @@ -321,9 +313,6 @@ cpp_unittest( "//fboss/agent:apply_thrift_config", "//fboss/agent/hw/mock:mock", ], - external_deps = [ - "gflags", - ], ) cpp_library( @@ -367,9 +356,6 @@ cpp_unittest( ":utils", "//fboss/agent/hw/mock:mock", ], - external_deps = [ - "gflags", - ], ) cpp_library( @@ -495,7 +481,6 @@ cpp_library( "//fboss/agent:agent_config-cpp2-types", "//fboss/agent:load_agent_config", "//fboss/agent:switch_config-cpp2-types", - "//fboss/agent:switchid_scope_resolver", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/hw/test:config_factory", "//fboss/agent/state:state", @@ -611,11 +596,9 @@ cpp_library( undefined_symbols = True, exported_deps = [ ":multinode_tests_base", - ":resourcelibutil", "//fboss/agent/hw/test:config_factory", "//fboss/agent/hw/test:load_balancer_utils", "//fboss/agent/test/link_tests:macsec_test_utils", - "//fboss/facebook/mka_service/mka_module:mka_structs", "//fboss/lib:common_utils", "//fboss/mka_service/if/facebook:mka_config-cpp2-types", "//fboss/mka_service/if/facebook:mka_service_thrift-cpp2-services", @@ -648,7 +631,6 @@ cpp_library( "//fboss/agent:main-common", "//fboss/agent:packet", "//fboss/agent:platform_config-cpp2-types", - "//fboss/agent:stats", "//fboss/agent:sw_agent_initializer", "//fboss/agent:sw_switch_warmboot_helper", "//fboss/agent:switch_config-cpp2-types", @@ -724,7 +706,6 @@ cpp_library( exported_deps = [ "//fboss/agent:hw_asic_table", "//fboss/agent:hw_switch", - "//fboss/agent:platform_base", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:utils", "//fboss/agent/state:state", @@ -929,3 +910,13 @@ cpp_library( ("boost", None, "boost_container"), ], ) + +cpp_unittest( + name = "fboss_event_base_test", + srcs = [ + "FbossEventBaseTests.cpp", + ], + deps = [ + "//fboss/agent:fboss_event_base", + ], +) diff --git a/fboss/agent/test/DHCPv4HandlerTest.cpp b/fboss/agent/test/DHCPv4HandlerTest.cpp index 04df4f8f71c41..be1a656e2b424 100644 --- a/fboss/agent/test/DHCPv4HandlerTest.cpp +++ b/fboss/agent/test/DHCPv4HandlerTest.cpp @@ -20,16 +20,13 @@ #include "fboss/agent/TxPacket.h" #include "fboss/agent/hw/mock/MockHwSwitch.h" #include "fboss/agent/hw/mock/MockPlatform.h" -#include "fboss/agent/hw/mock/MockRxPacket.h" #include "fboss/agent/packet/DHCPv4Packet.h" #include "fboss/agent/packet/EthHdr.h" #include "fboss/agent/packet/Ethertype.h" #include "fboss/agent/packet/IPv4Hdr.h" #include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/packet/UDPHeader.h" -#include "fboss/agent/state/ArpEntry.h" #include "fboss/agent/state/ArpResponseTable.h" -#include "fboss/agent/state/ArpTable.h" #include "fboss/agent/state/Interface.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" @@ -38,7 +35,6 @@ #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include #include using namespace facebook::fboss; diff --git a/fboss/agent/test/DsfSubscriberTests.cpp b/fboss/agent/test/DsfSubscriberTests.cpp index 5c6d26021ee3a..10f1a9a29f388 100644 --- a/fboss/agent/test/DsfSubscriberTests.cpp +++ b/fboss/agent/test/DsfSubscriberTests.cpp @@ -16,11 +16,9 @@ #include "fboss/agent/test/TestUtils.h" #include "fboss/fsdb/if/FsdbModel.h" // @manual -#include #include #include -#include #include "fboss/agent/HwSwitchMatcher.h" using namespace facebook::fboss; diff --git a/fboss/agent/test/DsfSubscriptionTests.cpp b/fboss/agent/test/DsfSubscriptionTests.cpp index 7684daccf30c5..2303edd5cc8a8 100644 --- a/fboss/agent/test/DsfSubscriptionTests.cpp +++ b/fboss/agent/test/DsfSubscriptionTests.cpp @@ -125,6 +125,7 @@ class DsfSubscriptionTest : public ::testing::Test { handle_ = createTestHandle(&config); sw_ = handle_->getSw(); fsdbTestServer_ = std::make_unique(); + FLAGS_fsdbPort_high_priority = fsdbTestServer_->getFsdbPort(); FLAGS_fsdbPort = fsdbTestServer_->getFsdbPort(); pubSub_ = std::make_unique("test-client"); streamConnectPool_ = std::make_unique( diff --git a/fboss/agent/test/EcmpSetupHelper.cpp b/fboss/agent/test/EcmpSetupHelper.cpp index e1d3a347c501e..57c124c9c3c7d 100644 --- a/fboss/agent/test/EcmpSetupHelper.cpp +++ b/fboss/agent/test/EcmpSetupHelper.cpp @@ -334,6 +334,9 @@ BaseEcmpSetupHelper::resolveNextHop( case cfg::InterfaceType::SYSTEM_PORT: return resolvePortRifNextHop( inputState, nhop, intf, useLinkLocal, encapIdx); + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + break; } CHECK(false) << " Unhandled interface type: "; return nullptr; @@ -352,6 +355,9 @@ BaseEcmpSetupHelper::unresolveNextHop( return unresolveVlanRifNextHop(inputState, nhop, intf, useLinkLocal); case cfg::InterfaceType::SYSTEM_PORT: return unresolvePortRifNextHop(inputState, nhop, intf, useLinkLocal); + case cfg::InterfaceType::PORT: + // TODO(Chenab): Support port router interface + break; } CHECK(false) << " Unhandled interface type: "; return nullptr; @@ -485,8 +491,8 @@ void EcmpSetupTargetedPorts::computeNextHops( // of subnet. lastOctet = (lastOctet + offset) % 255; } - // Fail if we go to 255 at the last octet - CHECK_GT(255, lastOctet); + // Fail if we go >255 at the last octet + CHECK_GE(255, lastOctet); bytes[bytes.size() - 1] = static_cast(lastOctet); BaseEcmpSetupHelperT::nhops_.push_back(EcmpNextHopT( IPAddrT(bytes), diff --git a/fboss/agent/test/EncapIndexAllocatorTest.cpp b/fboss/agent/test/EncapIndexAllocatorTest.cpp index ca72712e067ee..67b4da5e9bd8d 100644 --- a/fboss/agent/test/EncapIndexAllocatorTest.cpp +++ b/fboss/agent/test/EncapIndexAllocatorTest.cpp @@ -68,9 +68,11 @@ class EncapIndexAllocatorTest : public ::testing::Test { }; TEST_F(EncapIndexAllocatorTest, unsupportedAsic) { - folly::MacAddress mac; - auto asic = std::make_unique( - cfg::SwitchType::NPU, std::nullopt, 0, std::nullopt, mac); + cfg::SwitchInfo swInfo; + swInfo.switchType() = cfg::SwitchType::NPU; + swInfo.switchIndex() = 0; + swInfo.switchMac() = folly::MacAddress().toString(); + auto asic = std::make_unique(0, swInfo); EXPECT_THROW(allocator.getNextAvailableEncapIdx(nullptr, *asic), FbossError); } diff --git a/fboss/agent/test/FbossEventBaseTests.cpp b/fboss/agent/test/FbossEventBaseTests.cpp new file mode 100644 index 0000000000000..5123c86d59a7d --- /dev/null +++ b/fboss/agent/test/FbossEventBaseTests.cpp @@ -0,0 +1,17 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include + +#include "fboss/agent/FbossEventBase.h" + +namespace facebook::fboss { + +TEST(FbossEventBaseTest, VerifyOperDelta) { + FbossEventBase fevb{"test"}; + for (int i = 0; i < 2 * FLAGS_fboss_event_base_queue_limit; i++) { + fevb.runInFbossEventBaseThread([&]() {}); + } + EXPECT_EQ( + fevb.getNotificationQueueSize(), FLAGS_fboss_event_base_queue_limit); +} +} // namespace facebook::fboss diff --git a/fboss/agent/test/FibHelperTests.cpp b/fboss/agent/test/FibHelperTests.cpp index 48e6cf62beb0c..4a4b5cb3517b5 100644 --- a/fboss/agent/test/FibHelperTests.cpp +++ b/fboss/agent/test/FibHelperTests.cpp @@ -14,9 +14,7 @@ #include "fboss/agent/LookupClassRouteUpdater.h" #include "fboss/agent/NeighborUpdater.h" #include "fboss/agent/SwSwitchRouteUpdateWrapper.h" -#include "fboss/agent/state/Port.h" -#include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/ICMPTest.cpp b/fboss/agent/test/ICMPTest.cpp index 770ceacfdd496..40016d30e4c8d 100644 --- a/fboss/agent/test/ICMPTest.cpp +++ b/fboss/agent/test/ICMPTest.cpp @@ -25,10 +25,7 @@ #include "fboss/agent/packet/IPv4Hdr.h" #include "fboss/agent/packet/IPv6Hdr.h" #include "fboss/agent/packet/PktUtil.h" -#include "fboss/agent/state/ArpEntry.h" #include "fboss/agent/state/ArpResponseTable.h" -#include "fboss/agent/state/ArpTable.h" -#include "fboss/agent/state/Interface.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/state/VlanMap.h" @@ -36,7 +33,6 @@ #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include #include #include #include diff --git a/fboss/agent/test/IPv4Test.cpp b/fboss/agent/test/IPv4Test.cpp index 6818ed15012bb..3cc664f881d4a 100644 --- a/fboss/agent/test/IPv4Test.cpp +++ b/fboss/agent/test/IPv4Test.cpp @@ -20,7 +20,6 @@ #include "fboss/agent/hw/mock/MockRxPacket.h" #include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/state/ArpResponseTable.h" -#include "fboss/agent/state/Interface.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/state/VlanMap.h" @@ -28,7 +27,6 @@ #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include #include using namespace facebook::fboss; diff --git a/fboss/agent/test/LldpManagerTest.cpp b/fboss/agent/test/LldpManagerTest.cpp index 819a2e79af602..eaa08deea6bc4 100644 --- a/fboss/agent/test/LldpManagerTest.cpp +++ b/fboss/agent/test/LldpManagerTest.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include "fboss/agent/ArpHandler.h" #include "fboss/agent/FbossError.h" #include "fboss/agent/SwSwitch.h" @@ -21,13 +20,11 @@ #include "fboss/agent/TxPacket.h" #include "fboss/agent/hw/mock/MockHwSwitch.h" #include "fboss/agent/hw/mock/MockPlatform.h" -#include "fboss/agent/hw/mock/MockRxPacket.h" #include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/test/CounterCache.h" #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include #include #include "gmock/gmock.h" diff --git a/fboss/agent/test/MacTableManagerTests.cpp b/fboss/agent/test/MacTableManagerTests.cpp index f204169e7f1ed..848a88e25ff12 100644 --- a/fboss/agent/test/MacTableManagerTests.cpp +++ b/fboss/agent/test/MacTableManagerTests.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/L2Entry.h" #include "fboss/agent/ResourceAccountant.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/HwTestHandle.h" diff --git a/fboss/agent/test/MacTableUtilsTests.cpp b/fboss/agent/test/MacTableUtilsTests.cpp index 69f539df6d806..d4237dcd5984d 100644 --- a/fboss/agent/test/MacTableUtilsTests.cpp +++ b/fboss/agent/test/MacTableUtilsTests.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/L2Entry.h" #include "fboss/agent/MacTableUtils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/MirrorManagerTest.cpp b/fboss/agent/test/MirrorManagerTest.cpp index d7e4f309fbe2a..74d89be05b45b 100644 --- a/fboss/agent/test/MirrorManagerTest.cpp +++ b/fboss/agent/test/MirrorManagerTest.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/SwSwitchRouteUpdateWrapper.h" #include "fboss/agent/SwitchIdScopeResolver.h" #include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/Route.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/MultiNodeLacpTests.cpp b/fboss/agent/test/MultiNodeLacpTests.cpp index b50f3f2b57985..10810e9586889 100644 --- a/fboss/agent/test/MultiNodeLacpTests.cpp +++ b/fboss/agent/test/MultiNodeLacpTests.cpp @@ -21,7 +21,6 @@ #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/hw/test/HwTestTrunkUtils.h" #include "fboss/agent/hw/test/LoadBalancerUtils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/PortDescriptor.h" #include "fboss/agent/state/StateUtils.h" #include "fboss/agent/state/SwitchState.h" diff --git a/fboss/agent/test/MultiNodeMacsecTests.cpp b/fboss/agent/test/MultiNodeMacsecTests.cpp index 9844add31bb37..65e39acfb782a 100644 --- a/fboss/agent/test/MultiNodeMacsecTests.cpp +++ b/fboss/agent/test/MultiNodeMacsecTests.cpp @@ -13,9 +13,7 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/LoadBalancerUtils.h" #include "fboss/agent/test/MultiNodeTest.h" -#include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/link_tests/facebook/MacsecTestUtils.h" -#include "fboss/facebook/mka_service/mka_module/MKAStructs.h" #include "fboss/lib/CommonUtils.h" #include "fboss/mka_service/if/facebook/gen-cpp2/mka_config_constants.h" #include "fboss/mka_service/if/facebook/gen-cpp2/mka_config_types.h" diff --git a/fboss/agent/test/MultiNodeOpenrTests.cpp b/fboss/agent/test/MultiNodeOpenrTests.cpp index 98a5201a5a2ff..417f57355eabc 100644 --- a/fboss/agent/test/MultiNodeOpenrTests.cpp +++ b/fboss/agent/test/MultiNodeOpenrTests.cpp @@ -10,10 +10,7 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestCoppUtils.h" -#include "fboss/agent/state/Interface.h" -#include "fboss/agent/state/StateUtils.h" #include "fboss/agent/state/SwitchState.h" -#include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/MultiNodeTest.h" #include "fboss/agent/test/TestUtils.h" #include "fboss/lib/CommonUtils.h" diff --git a/fboss/agent/test/OperDeltaFilterTests.cpp b/fboss/agent/test/OperDeltaFilterTests.cpp index c6f6462307b47..49ebd7a92066d 100644 --- a/fboss/agent/test/OperDeltaFilterTests.cpp +++ b/fboss/agent/test/OperDeltaFilterTests.cpp @@ -6,7 +6,6 @@ using namespace ::testing; #include "fboss/agent/Utils.h" -#include "fboss/agent/FsdbHelper.h" #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/RouteScaleGenerators.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/ReachabilityGroupTests.cpp b/fboss/agent/test/ReachabilityGroupTests.cpp index 14813a551a960..29a6a789385e9 100644 --- a/fboss/agent/test/ReachabilityGroupTests.cpp +++ b/fboss/agent/test/ReachabilityGroupTests.cpp @@ -32,15 +32,7 @@ class ReachabilityGroupTest : public ::testing::Test { const auto& state = sw_->getState(); for (const auto& [_, switchSettings] : std::as_const(*state->getSwitchSettings())) { - if (expectedSize > 0) { - EXPECT_TRUE(switchSettings->getReachabilityGroupListSize().has_value()); - EXPECT_EQ( - switchSettings->getReachabilityGroupListSize().value(), - expectedSize); - } else { - EXPECT_FALSE( - switchSettings->getReachabilityGroupListSize().has_value()); - } + EXPECT_EQ(switchSettings->getReachabilityGroups().size(), expectedSize); } } @@ -161,8 +153,11 @@ TEST_F(ReachabilityGroupSingleStageFdswNoParallelIntfLinkTest, test) { TEST_F(ReachabilityGroupDualStageFdswNoParallelIntfLinkTest, test) { // Dual stage FDSW with no parallel links to interface node. // One group for uplinks to SDSW (1) and one group for downlink to RDSW (2). - verifyReachabilityGroupListSize(2); + // However, SDK requires one group per RDSW downlink, hence we have 1 group + // for uplinks to SDSW and 18 groups to RDSW. + verifyReachabilityGroupListSize(19); + int expectedInterfaceNodeReachabilityGroup = 129; for (const auto& [_, portMap] : std::as_const(*sw_->getState()->getPorts())) { for (const auto& [_, port] : std::as_const(*portMap)) { auto neighborDsfNodeType = @@ -171,7 +166,9 @@ TEST_F(ReachabilityGroupDualStageFdswNoParallelIntfLinkTest, test) { EXPECT_TRUE(port->getReachabilityGroupId().has_value()); EXPECT_EQ( port->getReachabilityGroupId().value(), - neighborDsfNodeType == cfg::DsfNodeType::FABRIC_NODE ? 1 : 2); + neighborDsfNodeType == cfg::DsfNodeType::FABRIC_NODE + ? 1 + : expectedInterfaceNodeReachabilityGroup++); } } } @@ -229,7 +226,9 @@ TEST_F( configUpdateToParallelIntfLinks) { // Dual stage FDSW with no parallel links to interface node. // One group for uplinks to SDSW (1) and one group for downlink to RDSW (2). - verifyReachabilityGroupListSize(2); + // However, SDK requires one group per RDSW downlink, hence we have 1 group + // for uplinks to SDSW and 18 groups to RDSW. + verifyReachabilityGroupListSize(19); const auto newConfig = testConfigFabricSwitch( true /* dualStage*/, diff --git a/fboss/agent/test/ResolvedNexthopMonitorTest.cpp b/fboss/agent/test/ResolvedNexthopMonitorTest.cpp index 92264b6c084f0..561bacb3eaae7 100644 --- a/fboss/agent/test/ResolvedNexthopMonitorTest.cpp +++ b/fboss/agent/test/ResolvedNexthopMonitorTest.cpp @@ -10,7 +10,6 @@ #include "fboss/agent/packet/ICMPHdr.h" #include "fboss/agent/packet/IPv6Hdr.h" #include "fboss/agent/packet/PktUtil.h" -#include "fboss/agent/state/Route.h" #include "fboss/agent/state/SwitchState.h" diff --git a/fboss/agent/test/RouteDistributionGenerator.cpp b/fboss/agent/test/RouteDistributionGenerator.cpp index 3fd876f8d80e6..f1465dd392c9b 100644 --- a/fboss/agent/test/RouteDistributionGenerator.cpp +++ b/fboss/agent/test/RouteDistributionGenerator.cpp @@ -9,7 +9,6 @@ */ #include "fboss/agent/test/RouteDistributionGenerator.h" -#include "fboss/agent/FbossError.h" #include "fboss/agent/Utils.h" #include "fboss/agent/test/EcmpSetupHelper.h" diff --git a/fboss/agent/test/RouteDistributionGeneratorTest.cpp b/fboss/agent/test/RouteDistributionGeneratorTest.cpp index c7011b01d7da2..872ec5d932b61 100644 --- a/fboss/agent/test/RouteDistributionGeneratorTest.cpp +++ b/fboss/agent/test/RouteDistributionGeneratorTest.cpp @@ -16,8 +16,6 @@ #include "fboss/agent/test/RouteGeneratorTestUtils.h" #include "fboss/agent/test/TestUtils.h" -#include - namespace facebook::fboss { TEST(RouteDistributionGeneratorsTest, v4AndV6DistributionSingleChunk) { diff --git a/fboss/agent/test/RouteScaleGeneratorsTest.cpp b/fboss/agent/test/RouteScaleGeneratorsTest.cpp index 9ef396d12b176..e3efe96eddb3d 100644 --- a/fboss/agent/test/RouteScaleGeneratorsTest.cpp +++ b/fboss/agent/test/RouteScaleGeneratorsTest.cpp @@ -14,8 +14,6 @@ #include "fboss/agent/test/RouteGeneratorTestUtils.h" #include "fboss/agent/test/TestUtils.h" -#include - namespace { auto constexpr kChunkSize = 4000; } // namespace diff --git a/fboss/agent/test/RouteTests.cpp b/fboss/agent/test/RouteTests.cpp index 1973bbc5593ca..eb6c5fb7c03b2 100644 --- a/fboss/agent/test/RouteTests.cpp +++ b/fboss/agent/test/RouteTests.cpp @@ -21,7 +21,6 @@ #include "fboss/agent/AddressUtil.h" #include "fboss/agent/if/gen-cpp2/common_types.h" -#include #include #include diff --git a/fboss/agent/test/RouteUpdateLoggerTest.cpp b/fboss/agent/test/RouteUpdateLoggerTest.cpp index 9357c8a60048f..b89df5cb69063 100644 --- a/fboss/agent/test/RouteUpdateLoggerTest.cpp +++ b/fboss/agent/test/RouteUpdateLoggerTest.cpp @@ -16,7 +16,6 @@ #include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/HwTestHandle.h" -#include "fboss/agent/test/TestUtils.h" #include #include diff --git a/fboss/agent/test/RoutingTest.cpp b/fboss/agent/test/RoutingTest.cpp index 1ae99589db7c3..623a319dd92c3 100644 --- a/fboss/agent/test/RoutingTest.cpp +++ b/fboss/agent/test/RoutingTest.cpp @@ -29,10 +29,7 @@ #include "fboss/agent/TunManager.h" #include "fboss/agent/TxPacket.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" -#include "fboss/agent/hw/mock/MockRxPacket.h" -#include "fboss/agent/hw/mock/MockTxPacket.h" #include "fboss/agent/packet/EthHdr.h" -#include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/CounterCache.h" #include "fboss/agent/test/HwTestHandle.h" diff --git a/fboss/agent/test/StaticL2ForNeighborObserverTests.cpp b/fboss/agent/test/StaticL2ForNeighborObserverTests.cpp index c3f8e1aa676ef..9d06d2ffdee16 100644 --- a/fboss/agent/test/StaticL2ForNeighborObserverTests.cpp +++ b/fboss/agent/test/StaticL2ForNeighborObserverTests.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/L2Entry.h" #include "fboss/agent/NeighborUpdater.h" #include "fboss/agent/StaticL2ForNeighborObserver.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/Vlan.h" #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/SwSwitchUpdateProcessingTests.cpp b/fboss/agent/test/SwSwitchUpdateProcessingTests.cpp index 0d89c27846099..0a5394108a455 100644 --- a/fboss/agent/test/SwSwitchUpdateProcessingTests.cpp +++ b/fboss/agent/test/SwSwitchUpdateProcessingTests.cpp @@ -17,10 +17,6 @@ #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include -#include -#include - #include using namespace facebook::fboss; diff --git a/fboss/agent/test/SwitchIdScopeResolverTests.cpp b/fboss/agent/test/SwitchIdScopeResolverTests.cpp index 05f39fe02bf7c..dabff65bde184 100644 --- a/fboss/agent/test/SwitchIdScopeResolverTests.cpp +++ b/fboss/agent/test/SwitchIdScopeResolverTests.cpp @@ -116,6 +116,20 @@ TYPED_TEST(SwitchIdScopeResolverTest, mirrorScope) { } } +TYPED_TEST(SwitchIdScopeResolverTest, mirrorOnDropReportScope) { + cfg::MirrorOnDropReport report; + report.mirrorPortId() = 6; + auto shared = std::make_shared(); + shared->setMirrorPortId(PortID(6)); + + if (this->isFabric()) { + return; + } else { + this->expectSwitchId(report); + this->expectSwitchId(shared); + } +} + TYPED_TEST(SwitchIdScopeResolverTest, dsfNodeScope) { this->expectAll(cfg::DsfNode{}); this->expectAll(std::shared_ptr()); @@ -291,3 +305,26 @@ TYPED_TEST(SwitchIdScopeResolverTest, SwitchTypeScope) { EXPECT_EQ(switchTypeMatcher.size(), 4); EXPECT_THROW(resolver.scope(cfg::SwitchType::PHY), FbossError); } + +TYPED_TEST(SwitchIdScopeResolverTest, portIntfScope) { + cfg::Port port; + port.logicalID() = 1; + cfg::Interface intf; + intf.type() = cfg::InterfaceType::PORT; + intf.intfID() = 6001; + intf.portID() = 1; + + cfg::SwitchConfig cfg{}; + cfg.ports()->resize(1); + cfg.ports()[0] = port; + + cfg.interfaces()->resize(1); + cfg.interfaces()[0] = intf; + + const auto& resolver = this->scopeResolver(); + auto matcher1 = resolver.scope(PortID(1)); + auto matcher2 = + resolver.scope(cfg::InterfaceType::PORT, InterfaceID(6001), cfg); + + EXPECT_EQ(matcher1, matcher2); +} diff --git a/fboss/agent/test/SwitchStatsObserverTests.cpp b/fboss/agent/test/SwitchStatsObserverTests.cpp index 8e693a9cb7817..925be8c60a2f2 100644 --- a/fboss/agent/test/SwitchStatsObserverTests.cpp +++ b/fboss/agent/test/SwitchStatsObserverTests.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/DsfSubscriber.h" #include "fboss/agent/SwSwitch.h" #include "fboss/agent/SwitchStats.h" -#include "fboss/agent/SwitchStatsObserver.h" #include "fboss/agent/state/Interface.h" #include "fboss/agent/test/CounterCache.h" #include "fboss/agent/test/HwTestHandle.h" diff --git a/fboss/agent/test/TestEnsembleIf.cpp b/fboss/agent/test/TestEnsembleIf.cpp index f6becffb6f89d..5d2064bd82d36 100644 --- a/fboss/agent/test/TestEnsembleIf.cpp +++ b/fboss/agent/test/TestEnsembleIf.cpp @@ -2,9 +2,7 @@ #include "fboss/agent/test/TestEnsembleIf.h" -#include "fboss/agent/Platform.h" #include "fboss/agent/Utils.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include diff --git a/fboss/agent/test/TestEnsembleIf.h b/fboss/agent/test/TestEnsembleIf.h index f8cd96920ce76..947b37636a017 100644 --- a/fboss/agent/test/TestEnsembleIf.h +++ b/fboss/agent/test/TestEnsembleIf.h @@ -62,7 +62,7 @@ class TestEnsembleIf : public HwSwitchCallback { size_t getMinPktsForLineRate(const PortID& port) { auto portSpeed = getProgrammedState()->getPorts()->getNodeIf(port)->getSpeed(); - return (portSpeed > cfg::PortSpeed::HUNDREDG ? 1000 : 100); + return (portSpeed > cfg::PortSpeed::HUNDREDG ? 10000 : 100); } virtual void applyNewState( diff --git a/fboss/agent/test/TestPacketFactory.cpp b/fboss/agent/test/TestPacketFactory.cpp index f810917413747..6fcae683eac8c 100644 --- a/fboss/agent/test/TestPacketFactory.cpp +++ b/fboss/agent/test/TestPacketFactory.cpp @@ -9,11 +9,9 @@ */ #include "fboss/agent/test/TestPacketFactory.h" -#include #include #include #include -#include #include #include #include "fboss/agent/IPv4Handler.h" diff --git a/fboss/agent/test/TestUtils.cpp b/fboss/agent/test/TestUtils.cpp index c65d6a1e6516f..91f88515f9afc 100644 --- a/fboss/agent/test/TestUtils.cpp +++ b/fboss/agent/test/TestUtils.cpp @@ -9,9 +9,6 @@ */ #include "fboss/agent/test/TestUtils.h" -#include -#include - #include "fboss/agent/AgentConfig.h" #include "fboss/agent/ApplyThriftConfig.h" #include "fboss/agent/RxPacket.h" @@ -41,8 +38,6 @@ #include #include -#include -#include #include #include #include @@ -271,7 +266,10 @@ cfg::SwitchConfig testConfigAImpl(bool isMhnic, cfg::SwitchType switchType) { cfg::DsfNode myNode = makeDsfNodeCfg(kVoqSwitchIdBegin); cfg.dsfNodes()->insert({*myNode.switchId(), myNode}); cfg.interfaces()->resize(kPortCount); - CHECK(myNode.systemPortRange().has_value()); + CHECK(!myNode.systemPortRanges()->systemPortRanges()->empty()); + CHECK_EQ(myNode.systemPortRanges()->systemPortRanges()->size(), 1); + auto sysPortRange = + *myNode.systemPortRanges()->systemPortRanges()->begin(); cfg.switchSettings()->switchIdToSwitchInfo() = {std::make_pair( kVoqSwitchIdBegin, createSwitchInfo( @@ -282,13 +280,12 @@ cfg::SwitchConfig testConfigAImpl(bool isMhnic, cfg::SwitchType switchType) { cfg::switch_config_constants:: DEFAULT_PORT_ID_RANGE_MAX(), /* port id range max */ 0, /* switchIndex */ - *myNode.systemPortRange()->minimum(), - *myNode.systemPortRange()->maximum(), + *sysPortRange.minimum(), + *sysPortRange.maximum(), "02:00:00:00:0F:0B", /* switchMac */ "68:00" /* connection handle */))}; for (auto i = 0; i < kPortCount; ++i) { - auto intfId = - *cfg.ports()[i].logicalID() + *myNode.systemPortRange()->minimum(); + auto intfId = *cfg.ports()[i].logicalID() + *sysPortRange.minimum(); cfg.interfaces()[i].intfID() = intfId; cfg.interfaces()[i].routerID() = 0; cfg.interfaces()[i].type() = cfg::InterfaceType::SYSTEM_PORT; @@ -359,9 +356,10 @@ cfg::SwitchConfig testConfigBImpl() { auto switchId = switchIndex + 1; cfg::DsfNode myNode = makeDsfNodeCfg(switchId); cfg.dsfNodes()->insert({*myNode.switchId(), myNode}); - CHECK(myNode.systemPortRange().has_value()); auto minPort = (switchIndex == 0) ? 0 : 16; auto maxPort = (switchIndex == 0) ? 12 : 28; + CHECK(!myNode.systemPortRanges()->systemPortRanges()->empty()); + auto sysPortRange = *myNode.systemPortRanges()->systemPortRanges()->begin(); cfg.switchSettings()->switchIdToSwitchInfo()->emplace(std::make_pair( switchId, createSwitchInfo( @@ -370,8 +368,8 @@ cfg::SwitchConfig testConfigBImpl() { minPort, /* port id range min */ maxPort, /* port id range max */ switchIndex, /* switchIndex */ - *myNode.systemPortRange()->minimum(), - *myNode.systemPortRange()->maximum(), + *sysPortRange.minimum(), + *sysPortRange.maximum(), "02:00:00:00:0F:0B", /* switchMac */ "68:00" /* connection handle */))); } @@ -496,7 +494,6 @@ cfg::DsfNode makeDsfNodeCfg( cfg::Range64 sysPortRange; sysPortRange.minimum() = switchId * kBlockSize; sysPortRange.maximum() = switchId * kBlockSize + kBlockSize; - dsfNodeCfg.systemPortRange() = sysPortRange; dsfNodeCfg.loopbackIps() = getLoopbackIps(switchId); dsfNodeCfg.nodeMac() = "02:00:00:00:0F:0B"; dsfNodeCfg.localSystemPortOffset() = *sysPortRange.minimum(); @@ -568,8 +565,12 @@ cfg::SwitchConfig testConfigFabricSwitch( cfg::PortProfileID::PROFILE_25G_1_NRZ_CL74_COPPER; cfg.ports()[p].portType() = cfg::PortType::FABRIC_PORT; } - auto myNode = - makeDsfNodeCfg(kFabricSwitchIdBegin, cfg::DsfNodeType::FABRIC_NODE); + auto myNode = makeDsfNodeCfg( + kFabricSwitchIdBegin, + cfg::DsfNodeType::FABRIC_NODE, + std::nullopt, + cfg::AsicType::ASIC_TYPE_RAMON3, + fabricLevel); cfg.dsfNodes()->insert({*myNode.switchId(), myNode}); auto nextFabricSwitchId = kFabricSwitchIdBegin + switchIdGap; @@ -586,9 +587,14 @@ cfg::SwitchConfig testConfigFabricSwitch( if (fabricLevel == 2) { clusterId = i + 1; remoteFabricLevel = 1; - } else if (i >= dualStageNeighborLevel2FabricNodes.value()) { - clusterId = 1; - remoteFabricLevel = 2; + } else { + if (i < dualStageNeighborLevel2FabricNodes.value()) { + // Fabric nodes + remoteFabricLevel = 2; + } else { + // Interface nodes + clusterId = 1; + } } } @@ -1475,7 +1481,6 @@ cfg::SwitchInfo createSwitchInfo( cfg::Range64 systemPortRange; systemPortRange.minimum() = *sysPortMin; systemPortRange.maximum() = *sysPortMax; - switchInfo.systemPortRange() = systemPortRange; switchInfo.systemPortRanges()->systemPortRanges()->push_back( systemPortRange); switchInfo.localSystemPortOffset() = *sysPortMin; diff --git a/fboss/agent/test/ThriftServerTest.cpp b/fboss/agent/test/ThriftServerTest.cpp index 7a952bd29c094..febd23475a3f2 100644 --- a/fboss/agent/test/ThriftServerTest.cpp +++ b/fboss/agent/test/ThriftServerTest.cpp @@ -25,7 +25,6 @@ #include #include -#include #include "fboss/agent/test/MultiSwitchTestServer.h" #include diff --git a/fboss/agent/test/ThriftTest.cpp b/fboss/agent/test/ThriftTest.cpp index f3a642270593b..ffbf6993fa588 100644 --- a/fboss/agent/test/ThriftTest.cpp +++ b/fboss/agent/test/ThriftTest.cpp @@ -29,7 +29,6 @@ #include #include -#include using namespace facebook::fboss; using namespace facebook::stats; @@ -638,7 +637,7 @@ TYPED_TEST(ThriftTestAllSwitchTypes, getAclTableGroup) { tableGroup.aclTables()->push_back(createAclTable(1)); tableGroup.aclTables()->push_back(createAclTable(2)); - config.aclTableGroup() = tableGroup; + config.aclTableGroups() = {tableGroup}; this->sw_->applyConfig("New config with acl table group", config); auto state = this->sw_->getState(); handler.getAclTableGroup(aclTables); diff --git a/fboss/agent/test/TunInterfaceTest.cpp b/fboss/agent/test/TunInterfaceTest.cpp index 7e3391adc29c0..734c4d900f985 100644 --- a/fboss/agent/test/TunInterfaceTest.cpp +++ b/fboss/agent/test/TunInterfaceTest.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/SwSwitch.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/hw/mock/MockPlatform.h" -#include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/MockTunManager.h" #include "fboss/agent/test/TestUtils.h" diff --git a/fboss/agent/test/UDPTest.cpp b/fboss/agent/test/UDPTest.cpp index 45c8476985d68..db175e19b77c9 100644 --- a/fboss/agent/test/UDPTest.cpp +++ b/fboss/agent/test/UDPTest.cpp @@ -22,7 +22,6 @@ #include "fboss/agent/test/HwTestHandle.h" #include "fboss/agent/test/TestUtils.h" -#include #include using namespace facebook::fboss; diff --git a/fboss/agent/test/agent_hw_tests/AgentAclCounterTests.cpp b/fboss/agent/test/agent_hw_tests/AgentAclCounterTests.cpp index cafd78d58d1a3..235aa2a9a0b75 100644 --- a/fboss/agent/test/agent_hw_tests/AgentAclCounterTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentAclCounterTests.cpp @@ -14,7 +14,6 @@ #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/utils/AclTestUtils.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/LoadBalancerTestUtils.h" #include "fboss/lib/CommonUtils.h" @@ -68,16 +67,10 @@ class AgentAclCounterTest : public AgentHwTest { } cfg::SwitchConfig initialConfig( const AgentEnsemble& ensemble) const override { - auto cfg = utility::onePortPerInterfaceConfig( + return utility::onePortPerInterfaceConfig( ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - if (FLAGS_enable_acl_table_group) { - utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); - utility::addDefaultAclTable(cfg); - } - return cfg; } std::string getAclName(AclType aclType) const { @@ -744,7 +737,8 @@ class AgentFlowletAclCounterTest : public AgentAclCounterTest { true /*interfaceHasSubnet*/); cfg.udfConfig() = utility::addUdfAclConfig( utility::kUdfOffsetBthOpcode | utility::kUdfOffsetBthReserved); - utility::addFlowletConfigs(cfg, ensemble.masterLogicalPortIds()); + utility::addFlowletConfigs( + cfg, ensemble.masterLogicalPortIds(), ensemble.isSai()); return cfg; } diff --git a/fboss/agent/test/agent_hw_tests/AgentAclInDiscardCounterTests.cpp b/fboss/agent/test/agent_hw_tests/AgentAclInDiscardCounterTests.cpp index 1bb0c2c7ea1c3..f016270a4f875 100644 --- a/fboss/agent/test/agent_hw_tests/AgentAclInDiscardCounterTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentAclInDiscardCounterTests.cpp @@ -24,10 +24,6 @@ class AgentAclInDiscardsCounterTest : public AgentHwTest { cfg::SwitchConfig initialConfig( const AgentEnsemble& ensemble) const override { auto cfg = AgentHwTest::initialConfig(ensemble); - // Add ACL Table group before adding any ACLs - utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); - utility::addDefaultAclTable(cfg); auto* acl = utility::addAcl(&cfg, "block all", cfg::AclActionType::DENY); acl->dstIp() = "::/0"; return cfg; diff --git a/fboss/agent/test/agent_hw_tests/AgentAclPriorityTests.cpp b/fboss/agent/test/agent_hw_tests/AgentAclPriorityTests.cpp index 01a6d01579e11..a75a5af9a4f97 100644 --- a/fboss/agent/test/agent_hw_tests/AgentAclPriorityTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentAclPriorityTests.cpp @@ -25,10 +25,11 @@ using namespace facebook::fboss::utility; void addAclEntry(cfg::SwitchConfig& cfg, cfg::AclEntry* acl) { if (FLAGS_enable_acl_table_group) { - int tableNumber = getAclTableIndex(&cfg, utility::kDefaultAclTable()); - if (cfg.aclTableGroup()) { - cfg.aclTableGroup()->aclTables()[tableNumber].aclEntries()->push_back( - *acl); + auto aclTableGroup = utility::getAclTableGroup(cfg); + int tableNumber = getAclTableIndex( + &cfg, utility::kDefaultAclTable(), *aclTableGroup->name()); + if (aclTableGroup) { + aclTableGroup->aclTables()[tableNumber].aclEntries()->push_back(*acl); } } else { cfg.acls()->push_back(*acl); @@ -61,11 +62,6 @@ class AgentAclPriorityTest : public AgentHwTest { ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - if (FLAGS_enable_acl_table_group) { - utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); - utility::addDefaultAclTable(cfg); - } return cfg; } @@ -173,9 +169,10 @@ TEST_F(AgentAclPriorityTest, AclNameChange) { this->addDenyPortAcl(newCfg, "A"); this->applyNewConfig(newCfg); if (FLAGS_enable_acl_table_group) { - *newCfg.aclTableGroup() + auto* aclTableGroup = utility::getAclTableGroup(newCfg); + *aclTableGroup ->aclTables()[utility::getAclTableIndex( - &newCfg, utility::kDefaultAclTable())] + &newCfg, utility::kDefaultAclTable(), *aclTableGroup->name())] .aclEntries() ->back() .name() = "AA"; diff --git a/fboss/agent/test/agent_hw_tests/AgentAclScaleTests.cpp b/fboss/agent/test/agent_hw_tests/AgentAclScaleTests.cpp index 799e0a42639d1..21cad329c83a5 100644 --- a/fboss/agent/test/agent_hw_tests/AgentAclScaleTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentAclScaleTests.cpp @@ -43,7 +43,7 @@ class AgentAclScaleTest : public AgentHwTest { ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); utility::addAclTableGroup( - &cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &cfg, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); return cfg; } diff --git a/fboss/agent/test/agent_hw_tests/AgentCoppTests.cpp b/fboss/agent/test/agent_hw_tests/AgentCoppTests.cpp index 14ab506784427..e28ab5328a86c 100644 --- a/fboss/agent/test/agent_hw_tests/AgentCoppTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentCoppTests.cpp @@ -1827,7 +1827,7 @@ TEST_F(AgentCoppQosTest, HighVsLowerPriorityCpuQueueTrafficPrioritization) { kHigherPriorityPacketCount, midPriorityCoppQueueStatsAfter - midPriorityCoppQueueStatsBefore); - if (asic->isSupported(HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { + if (asic->isSupported(HwAsic::Feature::VOQ)) { // check watermark of low priority voq should reach max shared buffer size const double kVariance = 0.01; auto watermarkBytesLow = utility::getDnxCoppMaxDynamicSharedBytes( diff --git a/fboss/agent/test/agent_hw_tests/AgentDeepPacketInspectionTests.cpp b/fboss/agent/test/agent_hw_tests/AgentDeepPacketInspectionTests.cpp index f48245c77325d..576a3fe28f366 100644 --- a/fboss/agent/test/agent_hw_tests/AgentDeepPacketInspectionTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentDeepPacketInspectionTests.cpp @@ -4,7 +4,6 @@ #include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/OlympicTestUtils.h" #include "fboss/agent/test/utils/PacketSnooper.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentEcmpScaleTests.cpp b/fboss/agent/test/agent_hw_tests/AgentEcmpScaleTests.cpp index 6e19773b0937f..3a44e3e063850 100644 --- a/fboss/agent/test/agent_hw_tests/AgentEcmpScaleTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentEcmpScaleTests.cpp @@ -13,9 +13,7 @@ #include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ScaleTestUtils.h" -#include "fboss/lib/CommonUtils.h" #include "fboss/agent/test/gen-cpp2/production_features_types.h" diff --git a/fboss/agent/hw/test/HwEcmpTests.cpp b/fboss/agent/test/agent_hw_tests/AgentEcmpTests.cpp similarity index 56% rename from fboss/agent/hw/test/HwEcmpTests.cpp rename to fboss/agent/test/agent_hw_tests/AgentEcmpTests.cpp index 9e3ec57ca4e5c..e416dc753f473 100644 --- a/fboss/agent/hw/test/HwEcmpTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentEcmpTests.cpp @@ -11,9 +11,10 @@ #include #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/hw/test/HwLinkStateDependentTest.h" -#include "fboss/agent/hw/test/HwTestEcmpUtils.h" +#include "fboss/agent/test/AgentHwTest.h" +#include "fboss/agent/test/utils/AsicUtils.h" +#include "fboss/agent/test/utils/ConfigUtils.h" +#include "fboss/lib/CommonUtils.h" DECLARE_bool(intf_nbr_tables); @@ -25,10 +26,11 @@ facebook::fboss::RoutePrefixV6 kRoute2{ folly::IPAddressV6{"2803:6080:d038:3063::"}, 64}; folly::CIDRNetwork kRoute2Prefix{folly::IPAddress("2803:6080:d038:3063::"), 64}; +const auto numNeighborEntries = 2; } // namespace namespace facebook::fboss { -class HwEcmpTest : public HwLinkStateDependentTest { +class AgentEcmpTest : public AgentHwTest { protected: std::vector swSwitchWeights_ = { ECMP_WEIGHT, @@ -50,48 +52,55 @@ class HwEcmpTest : public HwLinkStateDependentTest { UCMP_DEFAULT_WEIGHT}; const RouterID kRid{0}; static constexpr auto kNumNextHops{8}; - std::unique_ptr> ecmpHelper_; - void SetUp() override { - HwLinkStateDependentTest::SetUp(); - ecmpHelper_ = std::make_unique( - getProgrammedState(), kRid); - } - cfg::SwitchConfig initialConfig() const override { + cfg::SwitchConfig initialConfig( + const AgentEnsemble& ensemble) const override { return utility::onePortPerInterfaceConfig( - getHwSwitch(), - masterLogicalPortIds(), - getAsic()->desiredLoopbackModes()); + ensemble.getSw(), + ensemble.masterLogicalPortIds(), + true /*interfaceHasSubnet*/); + } + + std::vector + getProductionFeaturesVerified() const override { + return {production_features::ProductionFeature::L3_FORWARDING}; } void resolveNhops(int numNhops) { - applyNewState(ecmpHelper_->resolveNextHops(getProgrammedState(), numNhops)); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + applyNewState([&](const std::shared_ptr& in) { + return ecmpHelper.resolveNextHops(in, numNhops); + }); } void resolveNhops(const std::vector& portDescs) { - applyNewState(ecmpHelper_->resolveNextHops( - getProgrammedState(), - flat_set(portDescs.begin(), portDescs.end()))); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + applyNewState([&](const std::shared_ptr& in) { + return ecmpHelper.resolveNextHops( + in, flat_set(portDescs.begin(), portDescs.end())); + }); } void unresolveNhops(int numNhops) { - applyNewState( - ecmpHelper_->unresolveNextHops(getProgrammedState(), numNhops)); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + applyNewState([&](const std::shared_ptr& in) { + return ecmpHelper.unresolveNextHops(in, numNhops); + }); } void unresolveNhops(const std::vector& portDescs) { - applyNewState(ecmpHelper_->unresolveNextHops( - getProgrammedState(), - flat_set(portDescs.begin(), portDescs.end()))); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + applyNewState([&](const std::shared_ptr& in) { + return ecmpHelper.unresolveNextHops( + in, flat_set(portDescs.begin(), portDescs.end())); + }); } void programRouteWithUnresolvedNhops(int numNhops = kNumNextHops) { - ecmpHelper_->programRoutes( - getRouteUpdater(), + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + auto wrapper = getSw()->getRouteUpdater(); + ecmpHelper.programRoutes( + &wrapper, numNhops, {kDefaultRoute}, std::vector( swSwitchWeights_.begin(), swSwitchWeights_.begin() + numNhops)); } - int getEcmpSizeInHw(int sizeInSw = kNumNextHops) const { - return utility::getEcmpSizeInHw( - getHwSwitch(), kDefaultRoutePrefix, kRid, sizeInSw); - } void runSimpleUcmpTest( const std::vector& swWs, const std::vector& hwWs); @@ -101,9 +110,33 @@ class HwEcmpTest : public HwLinkStateDependentTest { void verifyResolvedUcmp( const folly::CIDRNetwork& routePrefix, const std::vector& hwWs); + + protected: + std::map getEcmpWeightsInHw() const { + auto switchId = getSw() + ->getScopeResolver() + ->scope(masterLogicalPortIds()[0]) + .switchId(); + auto client = getAgentEnsemble()->getHwAgentTestClient(switchId); + facebook::fboss::utility::CIDRNetwork cidr; + cidr.IPAddress() = "::"; + cidr.mask() = 0; + std::map ecmpWeights; + client->sync_getEcmpWeights(ecmpWeights, cidr, 0); + return ecmpWeights; + } + + int getEcmpSizeInHw(int sizeInSw = kNumNextHops) const { + auto ecmpWeights = getEcmpWeightsInHw(); + int ecmpSize = 0; + for (auto& [_, weight] : ecmpWeights) { + ecmpSize += weight; + } + return ecmpSize; + } }; -void HwEcmpTest::programResolvedUcmp( +void AgentEcmpTest::programResolvedUcmp( const std::vector& swWs, const std::vector& hwWs) { EXPECT_EQ(swWs.size(), hwWs.size()); @@ -116,33 +149,41 @@ void HwEcmpTest::programResolvedUcmp( resolveNhops(swWs.size()); } -void HwEcmpTest::verifyResolvedUcmp( +void AgentEcmpTest::verifyResolvedUcmp( const folly::CIDRNetwork& routePrefix, const std::vector& hwWs) { - auto pathsInHw = utility::getEcmpMembersInHw( - getHwSwitch(), routePrefix, kRid, FLAGS_ecmp_width); - auto pathsInHwCount = pathsInHw.size(); - EXPECT_LE(pathsInHwCount, FLAGS_ecmp_width); - - std::set uniquePaths(pathsInHw.begin(), pathsInHw.end()); - // This check assumes that egress ids grow as you add more egresses - // That assumption could prove incorrect, in which case we would - // need to map ips to egresses, somehow. - auto expectedCountIter = hwWs.begin(); - for (const auto& path : uniquePaths) { - auto pathWeight = - utility::getEcmpMemberWeight(getHwSwitch(), pathsInHw, path); - EXPECT_EQ(pathWeight, *expectedCountIter); - expectedCountIter++; - } - auto totalHwWeight = - std::accumulate(hwWs.begin(), hwWs.end(), NextHopWeight(0)); - auto totalWeightInHw = - utility::getTotalEcmpMemberWeight(getHwSwitch(), pathsInHw); - EXPECT_EQ(totalHwWeight, totalWeightInHw); + auto switchId = + getSw()->getScopeResolver()->scope(masterLogicalPortIds()[0]).switchId(); + auto client = getAgentEnsemble()->getHwAgentTestClient(switchId); + facebook::fboss::utility::CIDRNetwork cidr; + cidr.IPAddress() = routePrefix.first.str(); + cidr.mask() = routePrefix.second; + WITH_RETRIES({ + std::map pathsInHw; + client->sync_getEcmpWeights(pathsInHw, cidr, kRid); + auto pathsInHwCount = pathsInHw.size(); + EXPECT_EVENTUALLY_LE(pathsInHwCount, FLAGS_ecmp_width); + + // This check assumes that egress ids grow as you add more egresses + // That assumption could prove incorrect, in which case we would + // need to map ips to egresses, somehow. + auto expectedCountIter = hwWs.begin(); + for (const auto& [member, pathWeight] : pathsInHw) { + XLOG(DBG2) << "member: " << member << " pathWeight: " << pathWeight; + EXPECT_EVENTUALLY_EQ(pathWeight, *expectedCountIter); + expectedCountIter++; + } + auto totalHwWeight = + std::accumulate(hwWs.begin(), hwWs.end(), NextHopWeight(0)); + auto totalWeightInHw = 0; + for (auto& [_, weight] : pathsInHw) { + totalWeightInHw += weight; + } + EXPECT_EVENTUALLY_EQ(totalHwWeight, totalWeightInHw); + }); } -void HwEcmpTest::runSimpleUcmpTest( +void AgentEcmpTest::runSimpleUcmpTest( const std::vector& swWs, const std::vector& hwWs) { EXPECT_EQ(swWs.size(), hwWs.size()); @@ -154,14 +195,7 @@ void HwEcmpTest::runSimpleUcmpTest( verifyAcrossWarmBoots(setup, verify); } -class HwWideEcmpTest : public HwEcmpTest { - void SetUp() override { - FLAGS_ecmp_width = 512; - HwEcmpTest::SetUp(); - } -}; - -class HwEcmpTestWithWBWrites : public HwEcmpTest { +class AgentEcmpTestWithWBWrites : public AgentEcmpTest { public: bool failHwCallsOnWarmboot() const override { return false; @@ -169,31 +203,35 @@ class HwEcmpTestWithWBWrites : public HwEcmpTest { }; // WB is expected to create next hop/group corresponding to port brought down -TEST_F(HwEcmpTestWithWBWrites, L2ResolveOneNhopThenLinkDownThenUp) { +TEST_F(AgentEcmpTestWithWBWrites, L2ResolveOneNhopThenLinkDownThenUp) { auto setup = [=, this]() { programRouteWithUnresolvedNhops(); resolveNhops(1); - EXPECT_EQ(1, getEcmpSizeInHw()); - - auto nhop = ecmpHelper_->nhop(0); - bringDownPort(nhop.portDesc.phyPortID()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(1, getEcmpSizeInHw()); }); }; auto verify = [=, this]() { // ECMP shrunk on port down - EXPECT_EQ(0, getEcmpSizeInHw()); + WITH_RETRIES({ + utility::EcmpSetupAnyNPorts6 ecmpHelper(this->getProgrammedState()); + auto nhop = ecmpHelper.nhop(0); + bringDownPort(nhop.portDesc.phyPortID()); + EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); + }); }; auto setupPostWarmboot = [=, this]() { - auto nhop = ecmpHelper_->nhop(0); + utility::EcmpSetupAnyNPorts6 ecmpHelper(this->getProgrammedState()); + auto nhop = ecmpHelper.nhop(0); bringUpPort(nhop.portDesc.phyPortID()); }; auto verifyPostWarmboot = [=, this]() { - auto nhop = ecmpHelper_->nhop(0); + utility::EcmpSetupAnyNPorts6 ecmpHelper(this->getProgrammedState()); + auto nhop = ecmpHelper.nhop(0); // ECMP stays shrunk on port up - EXPECT_EQ(0, getEcmpSizeInHw()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); }); // Bring port back down so we can warmboot more than once. This is // necessary because verify() and verifyPostWarmboot() assume that the @@ -205,46 +243,48 @@ TEST_F(HwEcmpTestWithWBWrites, L2ResolveOneNhopThenLinkDownThenUp) { verifyAcrossWarmBoots(setup, verify, setupPostWarmboot, verifyPostWarmboot); } -TEST_F(HwEcmpTest, ecmpToDropToEcmp) { +TEST_F(AgentEcmpTest, ecmpToDropToEcmp) { /* * Mimic a scenario where all links flap and the routes (including * default route) get withdrawn and then peerings comeback one by one * and expand the ECMP group */ auto constexpr kEcmpWidthForTest = 4; + utility::EcmpSetupAnyNPorts6 ecmpHelper(this->getProgrammedState()); // Program ECMP route - resolveNeigborAndProgramRoutes(*ecmpHelper_, kEcmpWidthForTest); - EXPECT_EQ(kEcmpWidthForTest, getEcmpSizeInHw()); + resolveNeigborAndProgramRoutes(ecmpHelper, kEcmpWidthForTest); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(kEcmpWidthForTest, getEcmpSizeInHw()); }); + // Mimic neighbor entries going away and route getting removed. Since // this is the default route, it actually does not go away but transitions // to drop. - applyNewState( - ecmpHelper_->unresolveNextHops(getProgrammedState(), kEcmpWidthForTest)); - EXPECT_EQ(0, getEcmpSizeInHw()); - ecmpHelper_->unprogramRoutes(getRouteUpdater()); + unresolveNhops(kEcmpWidthForTest); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); }); + auto wrapper = getSw()->getRouteUpdater(); + ecmpHelper.unprogramRoutes(&wrapper); // Bring the route back, but mimic learning it from peers one by one first - applyNewState( - ecmpHelper_->resolveNextHops(getProgrammedState(), kEcmpWidthForTest)); + resolveNhops(kEcmpWidthForTest); for (auto i = 0; i < kEcmpWidthForTest; ++i) { - ecmpHelper_->programRoutes(getRouteUpdater(), i + 1); + ecmpHelper.programRoutes(&wrapper, i + 1); if (i) { - EXPECT_EQ(i + 1, getEcmpSizeInHw()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(i + 1, getEcmpSizeInHw()); }); } } } -TEST_F(HwEcmpTest, L2ResolveOneNhopThenLinkDownThenUpThenL2ResolveNhop) { +TEST_F(AgentEcmpTest, L2ResolveOneNhopThenLinkDownThenUpThenL2ResolveNhop) { auto setup = [=, this]() { programRouteWithUnresolvedNhops(); - auto nhop = ecmpHelper_->nhop(0); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + auto nhop = ecmpHelper.nhop(0); resolveNhops(1); - EXPECT_EQ(1, getEcmpSizeInHw()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(1, getEcmpSizeInHw()); }); bringDownPort(nhop.portDesc.phyPortID()); // ECMP shrunk on port down - EXPECT_EQ(0, getEcmpSizeInHw()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); }); bringUpPort(nhop.portDesc.phyPortID()); // ECMP stays shrunk on port up - EXPECT_EQ(0, getEcmpSizeInHw()); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); }); // Re resolve nhop1 unresolveNhops(1); resolveNhops(1); @@ -258,13 +298,15 @@ TEST_F(HwEcmpTest, L2ResolveOneNhopThenLinkDownThenUpThenL2ResolveNhop) { verifyAcrossWarmBoots(setup, verify); } -TEST_F(HwEcmpTest, L2UnresolvedNhopsECMPInHWEmpty) { +TEST_F(AgentEcmpTest, L2UnresolvedNhopsECMPInHWEmpty) { auto setup = [=, this]() { programRouteWithUnresolvedNhops(); }; - auto verify = [=, this]() { EXPECT_EQ(0, getEcmpSizeInHw()); }; + auto verify = [=, this]() { + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(0, getEcmpSizeInHw()); }); + }; verifyAcrossWarmBoots(setup, verify); } -TEST_F(HwEcmpTest, UcmpOverflowZero) { +TEST_F(AgentEcmpTest, UcmpOverflowZero) { std::vector swWs, hwWs; if (FLAGS_ecmp_width == 64) { // default ecmp_width for td2 and tomahawk @@ -280,7 +322,7 @@ TEST_F(HwEcmpTest, UcmpOverflowZero) { } runSimpleUcmpTest(swWs, hwWs); } -TEST_F(HwEcmpTest, UcmpOverflowZeroNotEnoughToRoundUp) { +TEST_F(AgentEcmpTest, UcmpOverflowZeroNotEnoughToRoundUp) { std::vector swWs, hwWs; if (FLAGS_ecmp_width == 64) { // default ecmp_width for td2 and tomahawk @@ -297,7 +339,7 @@ TEST_F(HwEcmpTest, UcmpOverflowZeroNotEnoughToRoundUp) { runSimpleUcmpTest(swWs, hwWs); } -TEST_F(HwEcmpTest, UcmpRoutesWithSameNextHopsDifferentWeights) { +TEST_F(AgentEcmpTest, UcmpRoutesWithSameNextHopsDifferentWeights) { std::vector swWs, hwWs; if (FLAGS_ecmp_width == 64) { @@ -319,16 +361,18 @@ TEST_F(HwEcmpTest, UcmpRoutesWithSameNextHopsDifferentWeights) { EXPECT_EQ(swWs.size(), hwWs.size()); EXPECT_LE(swWs.size(), kNumNextHops); auto setup = [this, &swWs, &swWs2]() { + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); auto nHops = swWs.size(); - ecmpHelper_->programRoutes( - getRouteUpdater(), + auto wrapper = getSw()->getRouteUpdater(); + ecmpHelper.programRoutes( + &wrapper, nHops, {kDefaultRoute}, std::vector(swWs.begin(), swWs.begin() + nHops)); auto nHops2 = swWs2.size(); - ecmpHelper_->programRoutes( - getRouteUpdater(), + ecmpHelper.programRoutes( + &wrapper, nHops2, {kRoute2}, std::vector(swWs2.begin(), swWs2.begin() + nHops2)); @@ -343,23 +387,27 @@ TEST_F(HwEcmpTest, UcmpRoutesWithSameNextHopsDifferentWeights) { verifyAcrossWarmBoots(setup, verify); } +class AgentWideEcmpTest : public AgentEcmpTest { + void setCmdLineFlagOverrides() const override { + FLAGS_ecmp_width = 512; + AgentHwTest::setCmdLineFlagOverrides(); + } + std::vector + getProductionFeaturesVerified() const override { + return { + production_features::ProductionFeature::L3_FORWARDING, + production_features::ProductionFeature::WIDE_ECMP}; + } +}; + // Wide UCMP underflow test for when total UCMP weight of the group is less // than FLAGS_ecmp_width -TEST_F(HwWideEcmpTest, WideUcmpUnderflow) { +TEST_F(AgentWideEcmpTest, WideUcmpUnderflow) { const int numSpineNhops = 5; const int numMeshNhops = 3; std::vector nhops(numSpineNhops + numMeshNhops); std::vector normalizedNhops(numSpineNhops + numMeshNhops); - // skip unsupported platforms - if (!getHwSwitch()->getPlatform()->getAsic()->isSupported( - HwAsic::Feature::WIDE_ECMP)) { -#if defined(GTEST_SKIP) - GTEST_SKIP(); -#endif - return; - } - auto fillNhops = [](auto& nhops, auto& countAndWeights) { auto idx = 0; for (const auto& nhopAndWeight : countAndWeights) { @@ -381,22 +429,19 @@ TEST_F(HwWideEcmpTest, WideUcmpUnderflow) { runSimpleUcmpTest(nhops, normalizedNhops); } -TEST_F(HwWideEcmpTest, WideUcmp256WidthUnderflow) { +class Agent256WideEcmpTest : public AgentWideEcmpTest { + void setCmdLineFlagOverrides() const override { + FLAGS_ecmp_width = 256; + AgentHwTest::setCmdLineFlagOverrides(); + } +}; + +TEST_F(Agent256WideEcmpTest, WideUcmp256WidthUnderflow) { const int numSpineNhops = 5; const int numMeshNhops = 3; std::vector nhops(numSpineNhops + numMeshNhops); std::vector normalizedNhops(numSpineNhops + numMeshNhops); - // skip unsupported platforms - if (!getHwSwitch()->getPlatform()->getAsic()->isSupported( - HwAsic::Feature::WIDE_ECMP)) { -#if defined(GTEST_SKIP) - GTEST_SKIP(); -#endif - return; - } - - FLAGS_ecmp_width = 256; auto fillNhops = [](auto& nhops, auto& countAndWeights) { auto idx = 0; for (const auto& nhopAndWeight : countAndWeights) { @@ -417,21 +462,12 @@ TEST_F(HwWideEcmpTest, WideUcmp256WidthUnderflow) { fillNhops(normalizedNhops, nhopsAndWeightsNormalized); runSimpleUcmpTest(nhops, normalizedNhops); } -TEST_F(HwWideEcmpTest, WideUcmpCheckMultipleSlotUnderflow) { +TEST_F(AgentWideEcmpTest, WideUcmpCheckMultipleSlotUnderflow) { const int numSpineNhops = 4; const int numMeshNhops = 4; std::vector nhops(numSpineNhops + numMeshNhops); std::vector normalizedNhops(numSpineNhops + numMeshNhops); - // skip unsupported platforms - if (!getHwSwitch()->getPlatform()->getAsic()->isSupported( - HwAsic::Feature::WIDE_ECMP)) { -#if defined(GTEST_SKIP) - GTEST_SKIP(); -#endif - return; - } - auto fillNhops = [](auto& nhops, auto& countAndWeights) { auto idx = 0; for (const auto& nhopAndWeight : countAndWeights) { @@ -454,40 +490,31 @@ TEST_F(HwWideEcmpTest, WideUcmpCheckMultipleSlotUnderflow) { } // Test link down in UCMP scenario -TEST_F(HwEcmpTest, UcmpL2ResolveAllNhopsInThenLinkDown) { +TEST_F(AgentEcmpTest, UcmpL2ResolveAllNhopsInThenLinkDown) { + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); programResolvedUcmp({3, 1, 1, 1, 1, 1, 1, 1}, {3, 1, 1, 1, 1, 1, 1, 1}); - bringDownPort(ecmpHelper_->nhop(0).portDesc.phyPortID()); - auto pathsInHwCount = utility::getEcmpSizeInHw( - getHwSwitch(), kDefaultRoutePrefix, kRid, FLAGS_ecmp_width); - EXPECT_EQ(7, pathsInHwCount); + bringDownPort(ecmpHelper.nhop(0).portDesc.phyPortID()); + WITH_RETRIES({ + auto pathsInHwCount = getEcmpSizeInHw(); + EXPECT_EVENTUALLY_EQ(7, pathsInHwCount); + }); } // Test link flap in UCMP scenario -TEST_F(HwEcmpTest, UcmpL2ResolveBothNhopsInThenLinkFlap) { +TEST_F(AgentEcmpTest, UcmpL2ResolveBothNhopsInThenLinkFlap) { + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); programResolvedUcmp({3, 1, 1, 1, 1, 1, 1, 1}, {3, 1, 1, 1, 1, 1, 1, 1}); - auto nhop = ecmpHelper_->nhop(0); + auto nhop = ecmpHelper.nhop(0); bringDownPort(nhop.portDesc.phyPortID()); - auto pathsInHw0 = utility::getEcmpMembersInHw( - getHwSwitch(), kDefaultRoutePrefix, kRid, FLAGS_ecmp_width); - auto totalWeightInHw0 = - utility::getTotalEcmpMemberWeight(getHwSwitch(), pathsInHw0); - EXPECT_EQ(7, totalWeightInHw0); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(7, getEcmpSizeInHw()); }); bringUpPort(nhop.portDesc.phyPortID()); - auto pathsInHw1 = utility::getEcmpMembersInHw( - getHwSwitch(), kDefaultRoutePrefix, kRid, FLAGS_ecmp_width); - auto totalWeightInHw1 = - utility::getTotalEcmpMemberWeight(getHwSwitch(), pathsInHw1); - EXPECT_EQ(7, totalWeightInHw1); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(7, getEcmpSizeInHw()); }); unresolveNhops(1); resolveNhops(1); - auto pathsInHw2 = utility::getEcmpMembersInHw( - getHwSwitch(), kDefaultRoutePrefix, kRid, FLAGS_ecmp_width); - auto totalWeightInHw2 = - utility::getTotalEcmpMemberWeight(getHwSwitch(), pathsInHw2); - EXPECT_EQ(10, totalWeightInHw2); + WITH_RETRIES({ EXPECT_EVENTUALLY_EQ(10, getEcmpSizeInHw()); }); } template @@ -499,12 +526,23 @@ using NeighborTableTypes = ::testing::Types, EnableIntfNbrTable>; template -class HwEcmpNeighborTest : public HwEcmpTest { +class AgentEcmpNeighborTest : public AgentEcmpTest { static auto constexpr intfNbrTable = EnableIntfNbrTableT::intfNbrTable; void SetUp() override { FLAGS_intf_nbr_tables = isIntfNbrTable(); - HwEcmpTest::SetUp(); + AgentEcmpTest::SetUp(); + } + + std::vector + getProductionFeaturesVerified() const override { + if (intfNbrTable) { + return { + production_features::ProductionFeature::L3_FORWARDING, + production_features::ProductionFeature::INTERFACE_NEIGHBOR_TABLE}; + } else { + return {production_features::ProductionFeature::L3_FORWARDING}; + } } public: @@ -513,7 +551,9 @@ class HwEcmpNeighborTest : public HwEcmpTest { } auto getNdpTable(PortDescriptor port, std::shared_ptr& state) { - auto switchType = getSwitchType(); + const auto switchType = + utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) + ->getSwitchType(); if (isIntfNbrTable() || switchType == cfg::SwitchType::VOQ) { auto portId = port.phyPortID(); @@ -522,7 +562,8 @@ class HwEcmpNeighborTest : public HwEcmpTest { return state->getInterfaces()->getNode(intfId)->getNdpTable()->modify( intfId, &state); } else if (switchType == cfg::SwitchType::NPU) { - auto vlanId = ecmpHelper_->getVlan(port, getProgrammedState()); + utility::EcmpSetupAnyNPorts6 ecmpHelper(getProgrammedState()); + auto vlanId = ecmpHelper.getVlan(port, getProgrammedState()); return state->getVlans()->getNode(*vlanId)->getNdpTable()->modify( *vlanId, &state); } @@ -531,46 +572,51 @@ class HwEcmpNeighborTest : public HwEcmpTest { } }; -TYPED_TEST_SUITE(HwEcmpNeighborTest, NeighborTableTypes); +TYPED_TEST_SUITE(AgentEcmpNeighborTest, NeighborTableTypes); -TYPED_TEST(HwEcmpNeighborTest, ResolvePendingResolveNexthop) { +TYPED_TEST(AgentEcmpNeighborTest, ResolvePendingResolveNexthop) { auto setup = [=, this]() { - this->resolveNhops(2); + this->resolveNhops(numNeighborEntries); std::map> entries; + utility::EcmpSetupAnyNPorts6 ecmpHelper(this->getProgrammedState()); // mark neighbors connected over ports pending - auto state0 = this->getProgrammedState(); - for (auto i = 0; i < 2; i++) { - const auto& ecmpNextHop = this->ecmpHelper_->nhop(i); - auto port = ecmpNextHop.portDesc; - auto ntable = this->getNdpTable(port, state0); - auto entry = ntable->getEntry(ecmpNextHop.ip); - auto intfId = entry->getIntfID(); - ntable->removeEntry(ecmpNextHop.ip); - ntable->addPendingEntry(ecmpNextHop.ip, intfId); - entries[port] = std::move(entry); - } - this->applyNewState(state0); + this->applyNewState([&](const std::shared_ptr& in) { + auto state = in->clone(); + for (auto i = 0; i < numNeighborEntries; i++) { + const auto& ecmpNextHop = ecmpHelper.nhop(i); + auto port = ecmpNextHop.portDesc; + auto ntable = this->getNdpTable(port, state); + auto entry = ntable->getEntry(ecmpNextHop.ip); + auto intfId = entry->getIntfID(); + ntable->removeEntry(ecmpNextHop.ip); + ntable->addPendingEntry(ecmpNextHop.ip, intfId); + entries[port] = std::move(entry); + } + return state; + }); // mark neighbors connected over ports reachable - auto state1 = this->getProgrammedState(); - for (auto i = 0; i < 2; i++) { - const auto& ecmpNextHop = this->ecmpHelper_->nhop(i); - auto port = ecmpNextHop.portDesc; - auto ntable = this->getNdpTable(port, state1); - auto entry = entries[port]; - ntable->updateEntry(NeighborEntryFields::fromThrift( - entry->toThrift())); - } - this->applyNewState(state1); - this->ecmpHelper_->programRoutes(this->getRouteUpdater(), 2); + this->applyNewState([&](const std::shared_ptr& in) { + auto state = in->clone(); + for (auto i = 0; i < numNeighborEntries; i++) { + const auto& ecmpNextHop = ecmpHelper.nhop(i); + auto port = ecmpNextHop.portDesc; + auto ntable = this->getNdpTable(port, state); + auto entry = entries[port]; + ntable->updateEntry(NeighborEntryFields::fromThrift( + entry->toThrift())); + } + return state; + }); + auto wrapper = this->getSw()->getRouteUpdater(); + ecmpHelper.programRoutes(&wrapper, 2); }; auto verify = [=, this]() { /* ecmp is resolved */ - EXPECT_EQ( - utility::getEcmpSizeInHw( - this->getHwSwitch(), kDefaultRoutePrefix, this->kRid, 2), - 2); + WITH_RETRIES({ + EXPECT_EVENTUALLY_EQ(this->getEcmpSizeInHw(numNeighborEntries), 2); + }); }; this->verifyAcrossWarmBoots(setup, verify); } diff --git a/fboss/agent/test/agent_hw_tests/AgentFabricSwitchTests.cpp b/fboss/agent/test/agent_hw_tests/AgentFabricSwitchTests.cpp index 97098ae5c2e20..30b0f7c7c53fe 100644 --- a/fboss/agent/test/agent_hw_tests/AgentFabricSwitchTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentFabricSwitchTests.cpp @@ -522,6 +522,7 @@ class AgentBalancedInputModeTest : public AgentFabricSwitchTest { AgentFabricSwitchTest::setCmdLineFlagOverrides(); FLAGS_disable_looped_fabric_ports = false; FLAGS_detect_wrong_fabric_connections = false; + FLAGS_enable_balanced_input_mode = true; } }; diff --git a/fboss/agent/test/agent_hw_tests/AgentFlowletSwitchingTests.cpp b/fboss/agent/test/agent_hw_tests/AgentFlowletSwitchingTests.cpp index f52a138b94ed0..bd004d421913a 100644 --- a/fboss/agent/test/agent_hw_tests/AgentFlowletSwitchingTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentFlowletSwitchingTests.cpp @@ -560,7 +560,8 @@ class AgentFlowletSwitchingTest : public AgentAclCounterTestBase { ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - utility::addFlowletConfigs(cfg, ensemble.masterLogicalPortIds()); + utility::addFlowletConfigs( + cfg, ensemble.masterLogicalPortIds(), ensemble.isSai()); return cfg; } @@ -608,7 +609,8 @@ class AgentFlowletMirrorTest : public AgentFlowletSwitchingTest { ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - utility::addFlowletConfigs(cfg, ensemble.masterLogicalPortIds()); + utility::addFlowletConfigs( + cfg, ensemble.masterLogicalPortIds(), ensemble.isSai()); addAclAndStat(&cfg, AclType::UDF_NAK); // overwrite existing traffic policy which only has a counter action // It is added in addAclAndStat above diff --git a/fboss/agent/test/agent_hw_tests/AgentHwAclQualifierTest.cpp b/fboss/agent/test/agent_hw_tests/AgentHwAclQualifierTest.cpp index efc5223012389..404f0a4885ecd 100644 --- a/fboss/agent/test/agent_hw_tests/AgentHwAclQualifierTest.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentHwAclQualifierTest.cpp @@ -13,6 +13,7 @@ enum class QualifierType : uint8_t { LOOKUPCLASS_L2, LOOKUPCLASS_NEIGHBOR, LOOKUPCLASS_ROUTE, + LOOKUPCLASS_IGNORE, }; template @@ -104,6 +105,8 @@ namespace facebook::fboss { class AgentHwAclQualifierTest : public AgentHwTest { public: + bool addQualifiers = false; + std::vector getProductionFeaturesVerified() const override { if (!FLAGS_enable_acl_table_group) { @@ -202,8 +205,26 @@ class AgentHwAclQualifierTest : public AgentHwTest { void aclSetupHelper( bool isIpV4, QualifierType lookupClassType, + bool addQualifiers = false, SwitchID switchID = SwitchID(0)) { + this->addQualifiers = addQualifiers; auto newCfg = initialConfig(*getAgentEnsemble()); + if (FLAGS_enable_acl_table_group) { + utility::addAclTableGroup( + &newCfg, + cfg::AclStage::INGRESS, + utility::kDefaultAclTableGroupName()); + std::vector actions = {}; + std::vector qualifiers = addQualifiers + ? utility::genAclQualifiersConfig(this->getAsicType()) + : std::vector(); + utility::addAclTable( + &newCfg, + utility::kDefaultAclTable(), + 0 /* priority */, + actions, + qualifiers); + } auto* acl = utility::addAcl(&newCfg, kAclName(), cfg::AclActionType::DENY); if (isIpV4) { @@ -233,6 +254,9 @@ class AgentHwAclQualifierTest : public AgentHwTest { isIpV4 ? cfg::AclLookupClass::DST_CLASS_L3_LOCAL_1 : cfg::AclLookupClass::DST_CLASS_L3_LOCAL_2); break; + case QualifierType::LOOKUPCLASS_IGNORE: + // This case is here exactly to not do anything + break; default: CHECK(false); } @@ -595,4 +619,35 @@ TEST_F(AgentHwAclQualifierTest, AclIp6LookupClassRoute) { this->verifyAcrossWarmBoots(setup, verify); } + +// canary on for qualifiers from default to coop +TEST_F(AgentHwAclQualifierTest, AclQualifiersCanaryOn) { + auto setup = [=, this]() { + this->aclSetupHelper(true, QualifierType::LOOKUPCLASS_IGNORE, false); + }; + + auto verify = [=, this]() { this->aclVerifyHelper(); }; + + auto setupPostWarmboot = [=, this]() { + this->aclSetupHelper(true, QualifierType::LOOKUPCLASS_IGNORE, true); + }; + + this->verifyAcrossWarmBoots(setup, verify, setupPostWarmboot, []() {}); +} + +// canary off for qualifiers from coop to default +TEST_F(AgentHwAclQualifierTest, AclQualifiersCanaryOff) { + auto setup = [=, this]() { + this->aclSetupHelper(true, QualifierType::LOOKUPCLASS_IGNORE, true); + }; + + auto verify = [=, this]() { this->aclVerifyHelper(); }; + + auto setupPostWarmboot = [=, this]() { + this->aclSetupHelper(true, QualifierType::LOOKUPCLASS_IGNORE, false); + }; + + this->verifyAcrossWarmBoots(setup, verify, setupPostWarmboot, []() {}); +} + } // namespace facebook::fboss diff --git a/fboss/agent/hw/test/HwIngressBufferTests.cpp b/fboss/agent/test/agent_hw_tests/AgentIngressBufferTests.cpp similarity index 54% rename from fboss/agent/hw/test/HwIngressBufferTests.cpp rename to fboss/agent/test/agent_hw_tests/AgentIngressBufferTests.cpp index 1e06d0f266153..3a68cc280d286 100644 --- a/fboss/agent/hw/test/HwIngressBufferTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentIngressBufferTests.cpp @@ -8,9 +8,8 @@ * */ #include -#include "fboss/agent/hw/test/ConfigFactory.h" -#include "fboss/agent/hw/test/HwTest.h" -#include "fboss/agent/hw/test/HwTestPfcUtils.h" +#include "fboss/agent/test/AgentHwTest.h" +#include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/types.h" using namespace facebook::fboss; @@ -38,7 +37,8 @@ std::vector getPortPgConfig( int mmuCellBytes, const std::vector& queues, int deltaValue = 0, - const bool enableHeadroom = true) { + const bool enableHeadroom = true, + const bool zeroHeadroom = false) { std::vector portPgConfigs; for (const auto queueId : queues) { @@ -46,8 +46,12 @@ std::vector getPortPgConfig( pgConfig.id() = queueId; // use queueId value to assign different values for each param/queue if (enableHeadroom) { - pgConfig.headroomLimitBytes() = - (kPgHeadroomLimitCells + queueId + deltaValue) * mmuCellBytes; + if (zeroHeadroom) { + pgConfig.headroomLimitBytes() = 0; + } else { + pgConfig.headroomLimitBytes() = + (kPgHeadroomLimitCells + queueId + deltaValue) * mmuCellBytes; + } } pgConfig.minLimitBytes() = (kPgMinLimitCells + queueId + deltaValue) * mmuCellBytes; @@ -83,22 +87,39 @@ cfg::BufferPoolConfig getBufferPoolConfig( namespace facebook::fboss { -class HwIngressBufferTest : public HwTest { +class AgentIngressBufferTest : public AgentHwTest { protected: - cfg::SwitchConfig initialConfig() const { + void setCmdLineFlagOverrides() const override { + FLAGS_fix_lossless_mode_per_pg = true; + AgentHwTest::setCmdLineFlagOverrides(); + } + cfg::SwitchConfig initialConfig( + const AgentEnsemble& ensemble) const override { return utility::onePortPerInterfaceConfig( - getHwSwitch(), masterLogicalPortIds()); + ensemble.getSw(), + ensemble.masterLogicalPortIds(), + true /*interfaceHasSubnet*/); + } + + std::vector + getProductionFeaturesVerified() const override { + return {production_features::ProductionFeature::PFC}; } - void setupGlobalBuffer(cfg::SwitchConfig& cfg, bool useLargeHwValues) { + void setupGlobalBuffer( + cfg::SwitchConfig& cfg, + bool useLargeHwValues, + PortID portId) { std::map bufferPoolCfgMap; cfg::BufferPoolConfig bufferPoolConfig; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); + if (useLargeHwValues) { - bufferPoolConfig = getBufferPoolHighDefaultConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize()); + bufferPoolConfig = + getBufferPoolHighDefaultConfig(asic->getPacketBufferUnitSize()); } else { - bufferPoolConfig = getBufferPoolConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize()); + bufferPoolConfig = getBufferPoolConfig(asic->getPacketBufferUnitSize()); } bufferPoolCfgMap.insert( @@ -106,14 +127,19 @@ class HwIngressBufferTest : public HwTest { cfg.bufferPoolConfigs() = std::move(bufferPoolCfgMap); } - void setupPgBuffers(cfg::SwitchConfig& cfg, const bool enableHeadroom) { + void setupPgBuffers( + cfg::SwitchConfig& cfg, + const bool enableHeadroom, + PortID portId) { std::map> portPgConfigMap; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); portPgConfigMap["foo"] = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), + asic->getPacketBufferUnitSize(), {0, 1}, 0 /* delta value */, enableHeadroom); - cfg.portPgConfigs() = portPgConfigMap; + cfg.portPgConfigs() = std::move(portPgConfigMap); } void @@ -124,21 +150,22 @@ class HwIngressBufferTest : public HwTest { pfc.portPgConfigName() = "foo"; pfc.tx() = pfcEnable; pfc.rx() = pfcEnable; - portCfg->pfc() = pfc; + portCfg->pfc() = std::move(pfc); } void setupHelper( bool enableHeadroom = true, bool pfcEnable = true, bool enableHighBufferValues = false) { - auto cfg = initialConfig(); + auto cfg = initialConfig(*getAgentEnsemble()); + auto portId = masterLogicalInterfacePortIds()[0]; // setup PFC - setupPfc(cfg, masterLogicalInterfacePortIds()[0], pfcEnable); + setupPfc(cfg, portId, pfcEnable); // setup pgConfig - setupPgBuffers(cfg, enableHeadroom); + setupPgBuffers(cfg, enableHeadroom, portId); // setup bufferPool - setupGlobalBuffer(cfg, enableHighBufferValues); + setupGlobalBuffer(cfg, enableHighBufferValues, portId); applyNewConfig(cfg); cfg_ = cfg; } @@ -147,21 +174,26 @@ class HwIngressBufferTest : public HwTest { setupHelper(true, true, true /* enable high buffer defaults */); } + bool checkSwHwPgCfgMatch(PortID portId, bool pfcEnabled) { + auto client = getAgentEnsemble()->getHwAgentTestClient( + getSw()->getScopeResolver()->scope(portId).switchId()); + return client->sync_verifyPGSettings(portId, pfcEnabled); + } + cfg::SwitchConfig cfg_; }; // Create PG config, associate with PFC config // validate that SDK programming is as per the cfg // Read back from HW (using SDK calls) and validate -TEST_F(HwIngressBufferTest, validateConfig) { +TEST_F(AgentIngressBufferTest, validateConfig) { auto setup = [=, this]() { setupHelper(); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); @@ -170,26 +202,27 @@ TEST_F(HwIngressBufferTest, validateConfig) { // Create PG, Ingress pool config, associate with PFC config. // Modify the ingress pool params only and ensure that it is // getting re-programmed -TEST_F(HwIngressBufferTest, validateIngressPoolParamChange) { +TEST_F(AgentIngressBufferTest, validateIngressPoolParamChange) { auto setup = [&]() { setupHelper(); + auto portId = masterLogicalInterfacePortIds()[0]; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); // setup bufferPool std::map bufferPoolCfgMap; bufferPoolCfgMap.insert(make_pair( static_cast(kBufferPoolName), - getBufferPoolConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), 1))); + getBufferPoolConfig(asic->getPacketBufferUnitSize(), 1))); cfg_.bufferPoolConfigs() = bufferPoolCfgMap; // update one PG, and see ifs reflected in the HW applyNewConfig(cfg_); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); @@ -197,84 +230,94 @@ TEST_F(HwIngressBufferTest, validateIngressPoolParamChange) { // Create PG config, associate with PFC config. Modify the PG // config params and ensure that its getting re-programmed. -TEST_F(HwIngressBufferTest, validatePGParamChange) { +TEST_F(AgentIngressBufferTest, validatePGParamChange) { auto setup = [&]() { setupHelper(); // update one PG, and see ifs reflected in the HW std::map> portPgConfigMap; - portPgConfigMap["foo"] = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {0, 1}, 1); + auto portId = masterLogicalInterfacePortIds()[0]; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); + portPgConfigMap["foo"] = + getPortPgConfig(asic->getPacketBufferUnitSize(), {0, 1}, 1); cfg_.portPgConfigs() = portPgConfigMap; applyNewConfig(cfg_); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); } // For each of the below transitions, ensure headroom is programmed -TEST_F(HwIngressBufferTest, validatePGHeadroomLimitChange) { +TEST_F(AgentIngressBufferTest, validatePGHeadroomLimitChange) { auto setup = [&]() { // Start with PG0 and PG1 with non-zero headroom setupHelper(); // Modify PG1 headroom value // This ensure the new value is getting programmed after config update + // For both PGs, they will be created in lossless mode std::map> portPgConfigMap; - auto portPgConfigs = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {0}, 0); - portPgConfigs.push_back(getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {1}, 1)[0]); + auto portId = masterLogicalInterfacePortIds()[0]; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); + auto portPgConfigs = + getPortPgConfig(asic->getPacketBufferUnitSize(), {0}, 0); + portPgConfigs.push_back( + getPortPgConfig(asic->getPacketBufferUnitSize(), {1}, 1)[0]); portPgConfigMap["foo"] = portPgConfigs; cfg_.portPgConfigs() = portPgConfigMap; applyNewConfig(cfg_); - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); - - // Make PG1 headroom 0 and add a new PG2 with 0 headroom - portPgConfigs = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {0}, 0); - portPgConfigs.push_back(getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {1}, 1, false)[0]); - portPgConfigs.push_back(getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {2}, 0, false)[0]); + checkSwHwPgCfgMatch(masterLogicalInterfacePortIds()[0], true /*pfcEnable*/); + + // Remove PG1 headroom field and add a new PG2 with no headroom field + // both cases, PG1 and PG2 should be created in lossy mode + portPgConfigs = getPortPgConfig(asic->getPacketBufferUnitSize(), {0}, 0); + portPgConfigs.push_back( + getPortPgConfig(asic->getPacketBufferUnitSize(), {1}, 1, false)[0]); + portPgConfigs.push_back( + getPortPgConfig(asic->getPacketBufferUnitSize(), {2}, 0, false)[0]); portPgConfigMap["foo"] = portPgConfigs; cfg_.portPgConfigs() = portPgConfigMap; applyNewConfig(cfg_); - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + checkSwHwPgCfgMatch(masterLogicalInterfacePortIds()[0], true /*pfcEnable*/); - // Remove PG1 and update PG2 headrrom to non-zero + // Remove PG1 and update PG2 headroom to non-zero // This ensure counters are accurately updated per PG. PFC counters are // are created only for non-zero headroom PGs - portPgConfigs = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {0}, 0); + // Also ensures, PG2 is updated to lossless mode. + portPgConfigs = getPortPgConfig(asic->getPacketBufferUnitSize(), {0}, 0); + portPgConfigs.push_back( + getPortPgConfig(asic->getPacketBufferUnitSize(), {2}, 0)[0]); + portPgConfigMap["foo"] = portPgConfigs; + cfg_.portPgConfigs() = portPgConfigMap; + applyNewConfig(cfg_); + checkSwHwPgCfgMatch(masterLogicalInterfacePortIds()[0], true /*pfcEnable*/); + + // Make PG2 headroom value 0. This also make PG2 lossy + portPgConfigs = getPortPgConfig(asic->getPacketBufferUnitSize(), {0}, 0); portPgConfigs.push_back(getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), {2}, 0)[0]); + asic->getPacketBufferUnitSize(), + {2}, + 0, + true, /* enableHeadroom */ + true /* zeroHeadroom */)[0]); portPgConfigMap["foo"] = portPgConfigs; cfg_.portPgConfigs() = portPgConfigMap; applyNewConfig(cfg_); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); @@ -283,16 +326,15 @@ TEST_F(HwIngressBufferTest, validatePGHeadroomLimitChange) { // Validate the Pg's pfc mode bit, by default we have been enabling // PFC on the port and hence on every PG. Force the port to have no // PFC. Validate that Pg's pfc mode is False now. -TEST_F(HwIngressBufferTest, validatePgNoPfc) { +TEST_F(AgentIngressBufferTest, validatePgNoPfc) { auto setup = [&]() { setupHelper(true /* enable headroom */, false /* pfc */); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - false /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], false /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); @@ -303,14 +345,13 @@ TEST_F(HwIngressBufferTest, validatePgNoPfc) { // programming higher values and logic has been added to program what // ever buffer value is lower than programmed first to workaround the // sdk error. -TEST_F(HwIngressBufferTest, validateHighBufferValues) { +TEST_F(AgentIngressBufferTest, validateHighBufferValues) { auto setup = [&]() { setupHelperWithHighBufferValues(); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); } @@ -318,17 +359,16 @@ TEST_F(HwIngressBufferTest, validateHighBufferValues) { // Create PG config, associate with PFC config. Do not create headroom // cfg, PGs should be in lossy mode now; validate that SDK programming // is as per cfg. -TEST_F(HwIngressBufferTest, validateLossyMode) { +TEST_F(AgentIngressBufferTest, validateLossyMode) { auto setup = [&]() { setupHelper(false /* enable headroom */, false /* pfcEnable */); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPorts()->getNodeIf( - PortID(masterLogicalInterfacePortIds()[0])), - false /* pfcEnable */); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], false /* pfcEnable */)); + }); }; verifyAcrossWarmBoots(setup, verify); @@ -336,26 +376,25 @@ TEST_F(HwIngressBufferTest, validateLossyMode) { // Create PG config, associate with PFC config. Modify the PG queue // config params and ensure that its getting re-programmed. -TEST_F(HwIngressBufferTest, validatePGQueueChanges) { +TEST_F(AgentIngressBufferTest, validatePGQueueChanges) { auto setup = [&]() { setupHelper(); // update one PG, and see ifs reflected in the HW std::map> portPgConfigMap; + auto portId = masterLogicalInterfacePortIds()[0]; + auto switchId = getSw()->getScopeResolver()->scope(portId).switchId(); + auto asic = getSw()->getHwAsicTable()->getHwAsic(switchId); portPgConfigMap["foo"] = getPortPgConfig( - getPlatform()->getAsic()->getPacketBufferUnitSize(), - {1}, - 0, - true /* enableHeadroom */); + asic->getPacketBufferUnitSize(), {1}, 0, true /* enableHeadroom */); cfg_.portPgConfigs() = portPgConfigMap; applyNewConfig(cfg_); }; auto verify = [&]() { - utility::checkSwHwPgCfgMatch( - getHwSwitch(), - getProgrammedState()->getPort( - PortID(masterLogicalInterfacePortIds()[0])), - true /*pfcEnable*/); + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(checkSwHwPgCfgMatch( + masterLogicalInterfacePortIds()[0], true /*pfcEnable*/)); + }); }; verifyAcrossWarmBoots(setup, verify); diff --git a/fboss/agent/test/agent_hw_tests/AgentMacLearningAndNeighborResolutionTests.cpp b/fboss/agent/test/agent_hw_tests/AgentMacLearningAndNeighborResolutionTests.cpp index 4b00ddff7056c..1b0d80e8e35a1 100644 --- a/fboss/agent/test/agent_hw_tests/AgentMacLearningAndNeighborResolutionTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentMacLearningAndNeighborResolutionTests.cpp @@ -10,10 +10,15 @@ #include +#include +#include "fboss/agent/AgentFeatures.h" +#include "fboss/agent/FbossHwUpdateError.h" +#include "fboss/agent/NeighborUpdater.h" #include "fboss/agent/TxPacket.h" #include "fboss/agent/state/Port.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/ResourceLibUtil.h" +#include "fboss/agent/test/TestUtils.h" #include "fboss/agent/test/TrunkUtils.h" #include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" @@ -25,8 +30,9 @@ DECLARE_bool(intf_nbr_tables); namespace facebook::fboss { - namespace { +// TODO remove hardcoded value with getMax from ASIC api +constexpr uint32_t kMaxNeighborEntries = 8194; const AggregatePortID kAggID{1}; const AggregatePortID kAggID2{2}; constexpr int kMinAgeInSecs{1}; @@ -90,8 +96,106 @@ using LearningAndPortTypes = ::testing::Types< } // namespace +class AgentNeighborResolutionTest : public AgentHwTest { + protected: + std::vector + getProductionFeaturesVerified() const override { + return {production_features::ProductionFeature::MAC_LEARNING}; + } + + cfg::SwitchConfig initialConfig( + const AgentEnsemble& ensemble) const override { + auto switchId = ensemble.getSw() + ->getScopeResolver() + ->scope(ensemble.masterLogicalPortIds()) + .switchId(); + auto asic = ensemble.getSw()->getHwAsicTable()->getHwAsic(switchId); + auto cfg = utility::oneL3IntfTwoPortConfig( + ensemble.getSw()->getPlatformMapping(), + asic, + ensemble.masterLogicalPortIds()[0], + ensemble.masterLogicalPortIds()[1], + ensemble.getSw()->getPlatformSupportsAddRemovePort(), + asic->desiredLoopbackModes()); + return cfg; + } + + template + AddrT neighborAddr() const { + if constexpr (std::is_same_v) { + return folly::IPAddressV4("1.1.1.2"); + } else { + return folly::IPAddressV6("1::2"); + } + } + + PortDescriptor portDescriptor() const { + return PortDescriptor(masterLogicalPortIds()[0]); + } + + template + std::shared_ptr updateNeighborEntry( + const std::shared_ptr& in, + const PortDescriptor& port, + const AddrT& addr, + const folly::MacAddress& mac, + const bool isIntfNbrTable, + std::optional lookupClass = std::nullopt) { + using NeighborTableT = typename std::conditional_t< + std::is_same::value, + ArpTable, + NdpTable>; + auto state = in->clone(); + NeighborTableT* neighborTable; + if (isIntfNbrTable) { + neighborTable = state->getInterfaces() + ->getNode(kIntfID) + ->template getNeighborEntryTable() + ->modify(kIntfID, &state); + } else { + neighborTable = state->getVlans() + ->getNode(kVlanID) + ->template getNeighborEntryTable() + ->modify(kVlanID, &state); + } + + if (neighborTable->getEntryIf(addr)) { + neighborTable->updateEntry( + addr, mac, port, kIntfID, NeighborState::REACHABLE, lookupClass); + } else { + neighborTable->addEntry(addr, mac, port, kIntfID); + // Update entry to add classid if any + neighborTable->updateEntry( + addr, mac, port, kIntfID, NeighborState::REACHABLE, lookupClass); + } + return state; + } + + // get neighbor table + template + const std::shared_ptr getNeighborTable() { + std::shared_ptr neighborTable; + auto state = getProgrammedState(); + if (FLAGS_intf_nbr_tables) { + neighborTable = state->getInterfaces() + ->getNode(kIntfID) + ->template getNeighborEntryTable(); + } else { + neighborTable = state->getVlans() + ->getNode(kVlanID) + ->template getNeighborEntryTable(); + } + return neighborTable; + } + + const VlanID kVlanID{utility::kBaseVlanId}; + const InterfaceID kIntfID{utility::kBaseVlanId}; + const folly::MacAddress kNeighborMac{"2:3:4:5:6:7"}; +}; + template -class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { +class AgentMacLearningAndNeighborResolutionTest + : public AgentNeighborResolutionTest { public: static auto constexpr kLearningMode = LearningModeAndPortT::kLearningMode; static auto constexpr kIsTrunk = LearningModeAndPortT::kIsTrunk; @@ -101,6 +205,8 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { void setCmdLineFlagOverrides() const override { AgentHwTest::setCmdLineFlagOverrides(); FLAGS_intf_nbr_tables = isIntfNbrTable; + // enable neighbor update failure protection + FLAGS_enable_hw_update_protection = true; } std::vector @@ -139,14 +245,6 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { : PortDescriptor(masterLogicalPortIds()[1]); } - template - AddrT neighborAddr() const { - if constexpr (std::is_same_v) { - return folly::IPAddressV4("1.1.1.2"); - } else { - return folly::IPAddressV6("1::2"); - } - } void verifyForwarding() { enableTrunks(); for (auto i = 0; i < 5; ++i) { @@ -188,7 +286,7 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { } void updateMacEntry(std::optional lookupClass) { - applyNewState( + applyNewStateWithProtectionIfSupported( [&](const std::shared_ptr& in) { auto newState = in->clone(); auto vlan = newState->getVlans()->getNodeIf(kVlanID).get(); @@ -305,52 +403,27 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { EXPECT_TRUE( getAgentEnsemble()->ensureSendPacketSwitched(std::move(txPacket))); } + + void applyNewStateWithProtectionIfSupported( + StateUpdateFn fn, + const std::string& name) { + if (getSw()->getHwSwitchHandler()->transactionsSupported()) { + applyNewStateTransaction( + std::move(fn), name + " with hw failure protection"); + } else { + applyNewState(std::move(fn), name); + } + } + template void programNeighbor( - PortDescriptor port, + const PortDescriptor& port, const AddrT& addr, std::optional lookupClass = std::nullopt) { - using NeighborTableT = typename std::conditional_t< - std::is_same::value, - ArpTable, - NdpTable>; - - applyNewState( + applyNewStateWithProtectionIfSupported( [&](const std::shared_ptr& in) { - auto state = in->clone(); - NeighborTableT* neighborTable; - if (isIntfNbrTable) { - neighborTable = state->getInterfaces() - ->getNode(kIntfID) - ->template getNeighborEntryTable() - ->modify(kIntfID, &state); - } else { - neighborTable = state->getVlans() - ->getNode(kVlanID) - ->template getNeighborEntryTable() - ->modify(kVlanID, &state); - } - - if (neighborTable->getEntryIf(addr)) { - neighborTable->updateEntry( - addr, - kNeighborMac, - port, - kIntfID, - NeighborState::REACHABLE, - lookupClass); - } else { - neighborTable->addEntry(addr, kNeighborMac, port, kIntfID); - // Update entry to add classid if any - neighborTable->updateEntry( - addr, - kNeighborMac, - port, - kIntfID, - NeighborState::REACHABLE, - lookupClass); - } - return state; + return updateNeighborEntry( + in, port, addr, kNeighborMac, isIntfNbrTable, lookupClass); }, "program neighbor"); } @@ -393,7 +466,7 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { ArpTable, NdpTable>; - applyNewState( + applyNewStateWithProtectionIfSupported( [&](const std::shared_ptr& in) { auto newState = in->clone(); NeighborTableT* neighborTable; @@ -414,11 +487,183 @@ class AgentMacLearningAndNeighborResolutionTest : public AgentHwTest { }, "remove neighbor"); } - const VlanID kVlanID{utility::kBaseVlanId}; - const InterfaceID kIntfID{utility::kBaseVlanId}; - const folly::MacAddress kNeighborMac{"2:3:4:5:6:7"}; }; +class AgentNeighborResolutionOverFlowTest : public AgentNeighborResolutionTest { + protected: + void setCmdLineFlagOverrides() const override { + AgentHwTest::setCmdLineFlagOverrides(); + FLAGS_intf_nbr_tables = false; + // Enable neighbor cache so that class id is set + FLAGS_disable_neighbor_updates = false; + // enable neighbor update failure protection + FLAGS_enable_hw_update_protection = true; + } + + // generate IPv6 addresses, here goal is to generate 8K addresses + // this is achieved by incrementing the last byte of the address + std::vector generateIPv6Addresses( + folly::IPAddressV6 startAddress, + int numAddresses) { + std::vector addresses; + folly::IPAddressV6 currentAddress = startAddress; + + for (int i = 0; i < numAddresses; ++i) { + addresses.push_back(currentAddress); + + // Get the byte representation of the address + std::array bytes = currentAddress.toByteArray(); + + // Increment the last byte + bytes[15]++; + if (bytes[15] == 0) { + bytes[15] = 1; + // Increment the second to last byte + bytes[14]++; + } + + // Create a new folly::IPAddressV6 object from the updated byte array + currentAddress = folly::IPAddressV6(bytes); + } + return addresses; + } + + // program neighbor entries in bulk + template + void programNeighborsBulk( + const PortDescriptor& port, + const std::vector& ipAddresses, + std::optional lookupClass = std::nullopt) { + applyNewStateTransaction( + [&](const std::shared_ptr& in) { + return updateNeighborEntries(in, port, ipAddresses, lookupClass); + }, + "program bulk neighbor with hw failure protection"); + } + + // verify neighbor entry over flow, + // 1. check all bulk entries are programmed without any failures from + // setup() + // 2. program additional neighbors to trigger neighbor update failure + // 3. check neighbor update failure + void verifyNeighborsOverFlow( + const PortDescriptor& port, + const std::vector& ipAddressesV6) { + // verify that bulk neighbor entries are programmed without any failures + WITH_RETRIES({ + const std::shared_ptr neighborTable = + getNeighborTable(); + + XLOG(DBG2) << "neighborTable->size() " << neighborTable->size(); + EXPECT_EVENTUALLY_GE(neighborTable->size(), getkBulkProgrammedCount()); + EXPECT_EQ(getSw()->stats()->getNeighborTableUpdateFailure(), 0); + }); + + // program additional neighbors to trigger neighbor update failure + programNeighborsWithNeighborUpdater(port, ipAddressesV6); + + WITH_RETRIES_N_TIMED(30, std::chrono::milliseconds(1000), { + const std::shared_ptr neighborTable = + getNeighborTable(); + XLOG(DBG2) << "neighborTable->size() " << neighborTable->size(); + XLOG(DBG2) << "getNeighborTableUpdateFailure() = " + << getSw()->stats()->getNeighborTableUpdateFailure(); + EXPECT_EVENTUALLY_GT( + getSw()->stats()->getNeighborTableUpdateFailure(), 0); + }); + } + + // for TH3, we can only program 5100 neighbors in single state update + // without HW failure. For TH4, we can program 8100 neighbors in single + // state update + uint16_t getkBulkProgrammedCount() { + auto switchId = getSw() + ->getScopeResolver() + ->scope(masterLogicalPortIds()[1]) + .switchId(); + if (getSw()->getHwAsicTable()->getHwAsic(switchId)->getAsicType() == + cfg::AsicType::ASIC_TYPE_TOMAHAWK3) { + return 5100; + } + return 8100; + } + + private: + // program neighbor entries with neighbor updater + template + void programNeighborsWithNeighborUpdater( + const PortDescriptor& port, + const std::vector& ipAddresses) { + for (int i = getkBulkProgrammedCount(); i < ipAddresses.size(); i++) { + XLOG(DBG2) << "Programming neighbor " << i << ": " + << ipAddresses[i].str(); + if (FLAGS_intf_nbr_tables) { + getSw()->getNeighborUpdater()->receivedNdpMineForIntf( + kIntfID, + ipAddresses[i], + kNeighborMac, + port, + ICMPv6Type::ICMPV6_TYPE_NDP_NEIGHBOR_SOLICITATION, + 0); + } else { + getSw()->getNeighborUpdater()->receivedNdpMine( + kVlanID, + ipAddresses[i], + kNeighborMac, + port, + ICMPv6Type::ICMPV6_TYPE_NDP_NEIGHBOR_SOLICITATION, + 0); + } + + // wait for neighbor update to complete before enqueuing next neighbor + // update + waitForStateUpdates(getSw()); + waitForNeighborCacheThread(getSw()); + + // check for neighbor update failure, if it is set, break the loop + // and verify rollback + if (getSw()->stats()->getNeighborTableUpdateFailure()) { + XLOG(DBG2) << "Neighbor update failure"; + break; + } + } + } + + // update switch state with bulk neighbor entries + template + std::shared_ptr updateNeighborEntries( + const std::shared_ptr& in, + const PortDescriptor& port, + const std::vector& ipAddressesV6, + std::optional lookupClass = std::nullopt) { + auto state = in->clone(); + for (int i = 0; i < getkBulkProgrammedCount(); i++) { + state = updateNeighborEntry( + state, + port, + ipAddressesV6[i], + kNeighborMac, + FLAGS_intf_nbr_tables, + lookupClass); + } + return state; + } +}; + +// This test is to verify neighbor table over flow with hw update failure +// protection +TEST_F(AgentNeighborResolutionOverFlowTest, neighborResolutionOverFlow) { + auto ipAddressesV6 = this->generateIPv6Addresses( + this->template neighborAddr(), kMaxNeighborEntries); + auto setup = [=, this]() { + this->programNeighborsBulk(this->portDescriptor(), ipAddressesV6); + }; + auto verify = [=, this]() { + this->verifyNeighborsOverFlow(this->portDescriptor(), ipAddressesV6); + }; + this->verifyAcrossWarmBoots(setup, verify); +} + TYPED_TEST_SUITE( AgentMacLearningAndNeighborResolutionTest, LearningAndPortTypes); @@ -440,10 +685,11 @@ TYPED_TEST( }; this->verifyAcrossWarmBoots(setup, verify); } + // Learn MAC, program neighbors and now age MAC. // Packets should still be able to get through -// - For BCM we don't need L2 entries for switched/routed packets. So MAC aging -// should have no influence +// - For BCM we don't need L2 entries for switched/routed packets. So MAC +// aging should have no influence // - For SAI we configure static MAC, so it should never age. TYPED_TEST( AgentMacLearningAndNeighborResolutionTest, diff --git a/fboss/agent/test/agent_hw_tests/AgentMacLearningTests.cpp b/fboss/agent/test/agent_hw_tests/AgentMacLearningTests.cpp index b441f91345edc..34059e41887a1 100644 --- a/fboss/agent/test/agent_hw_tests/AgentMacLearningTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentMacLearningTests.cpp @@ -17,7 +17,6 @@ #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/packet/Ethertype.h" #include "fboss/agent/state/PortDescriptor.h" -#include "fboss/agent/state/StateDelta.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/EcmpSetupHelper.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentMemoryUsageTests.cpp b/fboss/agent/test/agent_hw_tests/AgentMemoryUsageTests.cpp index 14b76dd592bb8..8fc86fafacaf7 100644 --- a/fboss/agent/test/agent_hw_tests/AgentMemoryUsageTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentMemoryUsageTests.cpp @@ -50,9 +50,8 @@ class AgentMemoryUsageTest : public AgentHwTest { TEST_F(AgentMemoryUsageTest, MeasureStatsCollection) { if (!folly::usingJEMalloc()) { -#ifdef GTEST_SKIP - GTEST_SKIP() << "This test only works with jemalloc"; -#endif + // Don't use GTEST_SKIP() because it messes up our stats. + XLOG(INFO) << "Skipping test because jemalloc is not enabled"; return; } diff --git a/fboss/agent/test/agent_hw_tests/AgentMirroringTests.cpp b/fboss/agent/test/agent_hw_tests/AgentMirroringTests.cpp index da89b64399276..9a4d2475ad1fd 100644 --- a/fboss/agent/test/agent_hw_tests/AgentMirroringTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentMirroringTests.cpp @@ -146,9 +146,6 @@ class AgentMirroringTest : public AgentHwTest { const std::string& mirrorName) const { auto trafficPort = getTrafficPort(ensemble); std::string aclEntryName = kMirrorAcl; - utility::addAclTableGroup( - cfg, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); - utility::addDefaultAclTable(*cfg); auto aclEntry = cfg::AclEntry(); aclEntry.name() = aclEntryName; aclEntry.actionType() = cfg::AclActionType::PERMIT; diff --git a/fboss/agent/test/agent_hw_tests/AgentOlympicQosSchedulerTests.cpp b/fboss/agent/test/agent_hw_tests/AgentOlympicQosSchedulerTests.cpp index b2b4a116afd67..cdb5bee14a7ee 100644 --- a/fboss/agent/test/agent_hw_tests/AgentOlympicQosSchedulerTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentOlympicQosSchedulerTests.cpp @@ -234,7 +234,16 @@ class AgentOlympicQosSchedulerTest : public AgentHwTest { ensemble.getSw(), ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - utility::addOlympicQueueConfig(&cfg, ensemble.getL3Asics()); + if (isDualStage3Q2QQos()) { + auto hwAsic = utility::checkSameAndGetAsic(ensemble.getL3Asics()); + auto streamType = + *hwAsic->getQueueStreamTypes(cfg::PortType::INTERFACE_PORT).begin(); + utility::addNetworkAIQueueConfig(&cfg, streamType, hwAsic); + // TODO(daiweix): enhance qos scheduler test cases to work with network ai + // qos map and use addNetworkAIQosToConfig() here + } else { + utility::addOlympicQueueConfig(&cfg, ensemble.getL3Asics()); + } utility::addOlympicQosMaps(cfg, ensemble.getL3Asics()); utility::setTTLZeroCpuConfig(ensemble.getL3Asics(), cfg); return cfg; diff --git a/fboss/agent/test/agent_hw_tests/AgentOlympicQosTests.cpp b/fboss/agent/test/agent_hw_tests/AgentOlympicQosTests.cpp index 7d2091e3fcf0c..fab721c000c8c 100644 --- a/fboss/agent/test/agent_hw_tests/AgentOlympicQosTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentOlympicQosTests.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/ResourceLibUtil.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/OlympicTestUtils.h" #include "fboss/agent/test/utils/PacketTestUtils.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentOverflowTestBase.cpp b/fboss/agent/test/agent_hw_tests/AgentOverflowTestBase.cpp index 5341339a2c8d9..4a1f553869f15 100644 --- a/fboss/agent/test/agent_hw_tests/AgentOverflowTestBase.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentOverflowTestBase.cpp @@ -4,7 +4,6 @@ #include "fboss/agent/TxPacket.h" #include "fboss/agent/hw/test/ProdConfigFactory.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/CoppTestUtils.h" #include "fboss/agent/test/utils/EcmpDataPlaneTestUtil.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentPfcTests.cpp b/fboss/agent/test/agent_hw_tests/AgentPfcTests.cpp index d510b78e2ee5a..221e4263c105e 100644 --- a/fboss/agent/test/agent_hw_tests/AgentPfcTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentPfcTests.cpp @@ -101,16 +101,17 @@ TEST_F(AgentPfcTest, verifyPfcCounters) { verifyAcrossWarmBoots(setup, verify); } -TEST_F(AgentPfcTest, verifyPfcLoopback) { - // TODO: Investigate if this can be extended to other ASICs - if (utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) - ->getAsicType() != cfg::AsicType::ASIC_TYPE_JERICHO3) { -#if defined(GTEST_SKIP) - GTEST_SKIP(); -#endif - return; +class AgentPfcCaptureTest : public AgentPfcTest { + std::vector + getProductionFeaturesVerified() const override { + return { + production_features::ProductionFeature::PFC, + production_features::ProductionFeature::PFC_CAPTURE, + }; } +}; +TEST_F(AgentPfcCaptureTest, verifyPfcLoopback) { std::vector portIds = {masterLogicalInterfacePortIds()[0]}; std::vector losslessPgIds = {2}; diff --git a/fboss/agent/test/agent_hw_tests/AgentPortLedTests.cpp b/fboss/agent/test/agent_hw_tests/AgentPortLedTests.cpp new file mode 100644 index 0000000000000..a496684d44ab1 --- /dev/null +++ b/fboss/agent/test/agent_hw_tests/AgentPortLedTests.cpp @@ -0,0 +1,64 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/test/AgentHwTest.h" + +#include "fboss/agent/test/utils/AsicUtils.h" +#include "fboss/agent/test/utils/ConfigUtils.h" +#include "fboss/lib/CommonUtils.h" + +namespace facebook::fboss { + +class AgentPortLedTest : public AgentHwTest { + protected: + cfg::SwitchConfig initialConfig( + const AgentEnsemble& ensemble) const override { + return utility::onePortPerInterfaceConfig( + ensemble.getSw(), + ensemble.masterLogicalPortIds(), + true /*interfaceHasSubnet*/); + } + + std::vector + getProductionFeaturesVerified() const override { + return {production_features::ProductionFeature::LED_PROGRAMMING}; + } + + bool verifyLedStatus(PortID portID, bool up) { + auto client = getAgentEnsemble()->getHwAgentTestClient( + getSw()->getScopeResolver()->scope(portID).switchId()); + return client->sync_verifyPortLedStatus(portID, up); + } +}; + +TEST_F(AgentPortLedTest, TestLed) { + auto setup = []() {}; + auto verify = [=, this]() { + auto portID = masterLogicalPortIds()[0]; + bringUpPort(portID); + WITH_RETRIES({ EXPECT_EVENTUALLY_TRUE(verifyLedStatus(portID, true)); }); + bringDownPort(portID); + WITH_RETRIES({ EXPECT_EVENTUALLY_TRUE(verifyLedStatus(portID, false)); }); + }; + verifyAcrossWarmBoots(setup, verify); +} + +TEST_F(AgentPortLedTest, TestLedFromSwitchState) { + auto portID = masterLogicalPortIds()[0]; + auto setup = [&]() { + bringUpPort(portID); + WITH_RETRIES({ EXPECT_EVENTUALLY_TRUE(verifyLedStatus(portID, true)); }); + applyNewState([&](const std::shared_ptr& in) { + auto newState = in->clone(); + auto port = newState->getPorts()->getNode(portID); + auto newPort = port->modify(&newState); + newPort->setLedPortExternalState( + PortLedExternalState::EXTERNAL_FORCE_OFF); + return newState; + }); + }; + auto verify = [&]() { + WITH_RETRIES({ EXPECT_EVENTUALLY_TRUE(verifyLedStatus(portID, false)); }); + }; + verifyAcrossWarmBoots(setup, verify); +} +} // namespace facebook::fboss diff --git a/fboss/agent/test/agent_hw_tests/AgentPrbsTests.cpp b/fboss/agent/test/agent_hw_tests/AgentPrbsTests.cpp index f7ae3b5e74da8..eb16ee7b6ed40 100644 --- a/fboss/agent/test/agent_hw_tests/AgentPrbsTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentPrbsTests.cpp @@ -3,7 +3,6 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/utils/FabricTestUtils.h" -#include "fboss/lib/CommonUtils.h" #include "fboss/agent/test/gen-cpp2/production_features_types.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentQueuePerHostRouteTests.cpp b/fboss/agent/test/agent_hw_tests/AgentQueuePerHostRouteTests.cpp index 183ea2cddf382..6d3e07ac6050c 100644 --- a/fboss/agent/test/agent_hw_tests/AgentQueuePerHostRouteTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentQueuePerHostRouteTests.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/ResourceLibUtil.h" #include "fboss/agent/test/TestUtils.h" -#include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/QosTestUtils.h" #include "fboss/agent/test/utils/QueuePerHostTestUtils.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentRouteOverDifferentAddressFamilyNhopTests.cpp b/fboss/agent/test/agent_hw_tests/AgentRouteOverDifferentAddressFamilyNhopTests.cpp index 3d33159904d2e..c927fc278247f 100644 --- a/fboss/agent/test/agent_hw_tests/AgentRouteOverDifferentAddressFamilyNhopTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentRouteOverDifferentAddressFamilyNhopTests.cpp @@ -11,16 +11,13 @@ #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/packet/PktFactory.h" -#include "fboss/lib/CommonUtils.h" #include "fboss/agent/test/gen-cpp2/production_features_types.h" -#include "fboss/agent/packet/EthHdr.h" #include "fboss/agent/packet/IPv4Hdr.h" #include "fboss/agent/packet/IPv6Hdr.h" #include "fboss/agent/packet/UDPHeader.h" #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/lib/CommonUtils.h" #include #include "fboss/agent/TxPacket.h" diff --git a/fboss/agent/test/agent_hw_tests/AgentSflowMirrorTest.cpp b/fboss/agent/test/agent_hw_tests/AgentSflowMirrorTest.cpp index 03d182a403d82..cb40943184dca 100644 --- a/fboss/agent/test/agent_hw_tests/AgentSflowMirrorTest.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentSflowMirrorTest.cpp @@ -10,6 +10,7 @@ #include "fboss/agent/packet/PktFactory.h" #include "fboss/agent/packet/PktUtil.h" +#include "fboss/agent/packet/UDPDatagram.h" #include "fboss/agent/test/AgentEnsemble.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/ResourceLibUtil.h" @@ -28,6 +29,7 @@ #include "fboss/agent/SflowShimUtils.h" DEFINE_int32(sflow_test_rate, 90000, "sflow sampling rate for hw test"); +constexpr uint16_t kTimeoutSecs = 10; const std::string kSflowMirror = "sflow_mirror"; @@ -52,31 +54,44 @@ class AgentSflowMirrorTest : public AgentHwTest { ensemble.masterLogicalPortIds(), true /*interfaceHasSubnet*/); - auto port0 = ensemble.masterLogicalPortIds()[0]; + auto port0 = ensemble.masterLogicalInterfacePortIds()[0]; auto port0Switch = ensemble.getSw()->getScopeResolver()->scope(port0).switchId(); auto asic = ensemble.getSw()->getHwAsicTable()->getHwAsic(port0Switch); - auto ports = getPortsForSampling(ensemble.masterLogicalPortIds(), asic); - this->configureMirror(cfg); + auto ports = + getPortsForSampling(ensemble.masterLogicalInterfacePortIds(), asic); if (asic->isSupported(HwAsic::Feature::EVENTOR_PORT_FOR_SFLOW)) { utility::addEventorVoqConfig(&cfg, cfg::StreamType::UNICAST); } return cfg; } - void configureMirror(cfg::SwitchConfig& cfg, bool v4) const { + void configureMirror( + cfg::SwitchConfig& cfg, + bool v4, + uint32_t udpSrcPort = 6545, + uint32_t udpDstPort = 6343) const { utility::configureSflowMirror( - cfg, kSflowMirror, false, utility::getSflowMirrorDestination(v4).str()); + cfg, + kSflowMirror, + false, + utility::getSflowMirrorDestination(v4).str(), + udpSrcPort, + udpDstPort, + v4); } - virtual void configureMirror(cfg::SwitchConfig& cfg) const { + virtual void configureMirror( + cfg::SwitchConfig& cfg, + uint32_t udpSrcPort = 6545, + uint32_t udpDstPort = 6343) const { configureMirror(cfg, std::is_same_v); } void configureTrapAcl(cfg::SwitchConfig& cfg, bool isV4) const { return checkSameAndGetAsic()->isSupported( HwAsic::Feature::SAI_ACL_ENTRY_SRC_PORT_QUALIFIER) - ? utility::configureTrapAcl(cfg, getNonSflowSampledInterfacePorts()) + ? utility::configureTrapAcl(cfg, getNonSflowSampledInterfacePort()) : utility::configureTrapAcl(cfg, isV4); } @@ -85,10 +100,10 @@ class AgentSflowMirrorTest : public AgentHwTest { configureTrapAcl(cfg, isV4); } - PortID getNonSflowSampledInterfacePorts() const { + PortID getNonSflowSampledInterfacePort() const { return checkSameAndGetAsic()->isSupported(HwAsic::Feature::MANAGEMENT_PORT) ? masterLogicalPortIds({cfg::PortType::MANAGEMENT_PORT})[0] - : getPortsForSampling()[0]; + : masterLogicalInterfacePortIds()[0]; } cfg::PortType getNonSflowSampledInterfacePortType() const { @@ -98,10 +113,21 @@ class AgentSflowMirrorTest : public AgentHwTest { } std::vector getPortsForSampling() const { - auto portIds = masterLogicalPortIds({cfg::PortType::INTERFACE_PORT}); - auto switchID = switchIdForPort(portIds[0]); + auto allIntfPorts = masterLogicalInterfacePortIds(); + auto nonSampledPort = getNonSflowSampledInterfacePort(); + // Ports with sampling enabled are all interface ports except any + // on which we are sending the sampled packets out! + std::vector sampledPorts; + std::copy_if( + allIntfPorts.begin(), + allIntfPorts.end(), + std::back_inserter(sampledPorts), + [nonSampledPort](const auto& portId) { + return portId != nonSampledPort; + }); + auto switchID = switchIdForPort(allIntfPorts[0]); auto asic = getSw()->getHwAsicTable()->getHwAsic(switchID); - return getPortsForSampling(portIds, asic); + return getPortsForSampling(sampledPorts, asic); } std::vector getPortsForSampling( @@ -118,18 +144,9 @@ class AgentSflowMirrorTest : public AgentHwTest { return ports; } - void configSampling( - cfg::SwitchConfig& config, - const std::vector& ports, - int sampleRate) const { - std::vector samplePorts(ports.begin() + 1, ports.end()); - utility::configureSflowSampling( - config, kSflowMirror, samplePorts, sampleRate); - } - void configSampling(cfg::SwitchConfig& config, int sampleRate) { auto ports = getPortsForSampling(); - configSampling(config, ports, sampleRate); + utility::configureSflowSampling(config, kSflowMirror, ports, sampleRate); } const HwAsic* checkSameAndGetAsic() const { @@ -145,7 +162,22 @@ class AgentSflowMirrorTest : public AgentHwTest { return getSw()->getHwLogicalPortId(port); } - PortID getSflowPacketSrcPort(const std::vector& sflowPayload) { + void verifySflowExporterIp(const std::vector& sflowPayload) { + auto asic = checkSameAndGetAsic(); + if (asic->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3) { + uint8_t exporterIpBytes[16]; + for (int i = 0; i < 16; i++) { + exporterIpBytes[i] = sflowPayload[i + 8]; + } + auto exporterIp = + folly::IPAddressV6::fromBinary(folly::ByteRange(exporterIpBytes, 16)); + EXPECT_EQ(exporterIp, utility::getSflowMirrorSource(false /* isV4 */)); + } + } + void validateSflowPacketHeader( + const std::vector& sflowPayload, + PortID srcPortId) { + PortID expectedSrcPortId; /* * sflow shim format for Tajo: * @@ -165,7 +197,8 @@ class AgentSflowMirrorTest : public AgentHwTest { if (asic->getAsicType() == cfg::AsicType::ASIC_TYPE_EBRO || asic->getAsicType() == cfg::AsicType::ASIC_TYPE_YUBA) { auto systemPortId = sflowPayload[0] << 8 | sflowPayload[1]; - return static_cast(systemPortId - asic->getSystemPortIDOffset()); + expectedSrcPortId = + static_cast(systemPortId - asic->getSflowPortIDOffset()); } else if (asic->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3) { /* * Bytes 68 through 71 carry the ingress ifindex in sflow v5 header @@ -177,14 +210,17 @@ class AgentSflowMirrorTest : public AgentHwTest { systemPortId |= static_cast((sflowPayload[offsetBytesStart + i]) << j); } - return getPortID(SystemPortID(systemPortId), getProgrammedState()); + expectedSrcPortId = + getPortID(SystemPortID(systemPortId), getProgrammedState()); + verifySflowExporterIp(sflowPayload); } else { auto sourcePortOffset = 0; if (asic->isSupported(HwAsic::Feature::SFLOW_SHIM_VERSION_FIELD)) { sourcePortOffset += 4; } - return static_cast(sflowPayload[sourcePortOffset]); + expectedSrcPortId = static_cast(sflowPayload[sourcePortOffset]); } + EXPECT_EQ(expectedSrcPortId, srcPortId); } uint16_t getMirrorTruncateSize() const { @@ -193,7 +229,7 @@ class AgentSflowMirrorTest : public AgentHwTest { template void resolveRouteForMirrorDestinationImpl() { - const auto mirrorDestinationPort = getNonSflowSampledInterfacePorts(); + const auto mirrorDestinationPort = getNonSflowSampledInterfacePort(); boost::container::flat_set nhopPorts{ PortDescriptor(mirrorDestinationPort)}; @@ -285,7 +321,7 @@ class AgentSflowMirrorTest : public AgentHwTest { std::optional> capturedPktBuf; WITH_RETRIES({ - capturedPktBuf = snooper.waitForPacket(10); + capturedPktBuf = snooper.waitForPacket(kTimeoutSecs); EXPECT_EVENTUALLY_TRUE(capturedPktBuf.has_value()); }); folly::io::Cursor capturedPktCursor{capturedPktBuf->get()}; @@ -306,14 +342,15 @@ class AgentSflowMirrorTest : public AgentHwTest { } auto delta = capturedPkt.length() - payloadLength; EXPECT_LE(delta, getSflowPacketHeaderLength(!isV4)); - auto payload = isV4 ? capturedPkt.v4PayLoad()->udpPayload()->payload() - : capturedPkt.v6PayLoad()->udpPayload()->payload(); - + auto udpPayload = isV4 ? capturedPkt.v4PayLoad()->udpPayload() + : capturedPkt.v6PayLoad()->udpPayload(); + auto payload = udpPayload->payload(); + EXPECT_EQ(udpPayload->header().csum, 0); auto hwLogicalPortId = getHwLogicalPortId(ports[1]); if (!hwLogicalPortId) { - EXPECT_EQ(getSflowPacketSrcPort(payload), ports[1]); + validateSflowPacketHeader(payload, ports[1]); } else { - EXPECT_EQ(getSflowPacketSrcPort(payload), PortID(*hwLogicalPortId)); + validateSflowPacketHeader(payload, PortID(*hwLogicalPortId)); } if (checkSameAndGetAsic()->getAsicType() != cfg::AsicType::ASIC_TYPE_EBRO && @@ -359,7 +396,7 @@ class AgentSflowMirrorTest : public AgentHwTest { std::optional> capturedPktBuf; WITH_RETRIES({ - capturedPktBuf = snooper.waitForPacket(10); + capturedPktBuf = snooper.waitForPacket(kTimeoutSecs); EXPECT_EVENTUALLY_TRUE(capturedPktBuf.has_value()); }); folly::io::Cursor capturedPktCursor{capturedPktBuf->get()}; @@ -374,6 +411,11 @@ class AgentSflowMirrorTest : public AgentHwTest { capturedPkt.length() - capturedHdrSize, getMirrorTruncateSize()); /* TODO: confirm length in CS00010399535 and CS00012130950 */ + bool isV4 = std::is_same_v; + auto udpPayload = isV4 ? capturedPkt.v4PayLoad()->udpPayload() + : capturedPkt.v6PayLoad()->udpPayload(); + verifySflowExporterIp(udpPayload->payload()); + EXPECT_EQ(udpPayload->header().csum, 0); } uint64_t getSampleCount(const std::map& stats) { @@ -434,6 +476,7 @@ class AgentSflowMirrorTest : public AgentHwTest { auto setup = [=, this]() { auto ports = getPortsForSampling(); auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config); configSampling(config, 1); configureTrapAcl(config); applyNewConfig(config); @@ -452,6 +495,7 @@ class AgentSflowMirrorTest : public AgentHwTest { void testSampledPacketRate(bool truncate = false) { auto setup = [=, this]() { auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config); configSampling(config, FLAGS_sflow_test_rate); configureTrapAcl(config); applyNewConfig(config); @@ -461,6 +505,37 @@ class AgentSflowMirrorTest : public AgentHwTest { verifyAcrossWarmBoots(setup, verify); } + void verifySrsPortRandomizationOnSflowPacket(uint16_t numPackets = 10) { + auto ports = getPortsForSampling(); + getAgentEnsemble()->bringDownPorts( + std::vector(ports.begin() + 2, ports.end())); + std::set l4SrcPorts; + for (auto i = 0; i < numPackets; i++) { + auto pkt = genPacket(1, 256); + utility::SwSwitchPacketSnooper snooper(getSw(), "snooper"); + XLOG(DBG2) << "Sending packet through port " << ports[1]; + getAgentEnsemble()->sendPacketAsync( + std::move(pkt), PortDescriptor(ports[1]), std::nullopt); + + std::optional> capturedPktBuf; + WITH_RETRIES({ + capturedPktBuf = snooper.waitForPacket(kTimeoutSecs); + EXPECT_EVENTUALLY_TRUE(capturedPktBuf.has_value()); + }); + folly::io::Cursor capturedPktCursor{capturedPktBuf->get()}; + auto capturedPkt = utility::EthFrame(capturedPktCursor); + auto udpHeader = capturedPkt.v6PayLoad()->udpPayload()->header(); + l4SrcPorts.insert(udpHeader.srcPort); + /* + * J3 randomize the source based on the time stamp in the asic. + * Add a delay to ensure the source ports are different for + * every packet that is trapped to CPU with SFLOW header. + */ + sleep(2); + } + EXPECT_GT(l4SrcPorts.size(), 1); + } + utility::MacAddressGenerator macGenerator = utility::MacAddressGenerator(); constexpr static size_t kDefaultPayloadSize = 1400; constexpr static size_t kDefaultPercentErrorThreshold = 7; @@ -483,16 +558,27 @@ class AgentSflowMirrorTruncateTest : public AgentSflowMirrorTest { } } - void configureMirror(cfg::SwitchConfig& cfg, bool v4) const { + void configureMirror( + cfg::SwitchConfig& cfg, + bool v4, + uint32_t udpSrcPort = 6545, + uint32_t udpDstPort = 6343) const { utility::configureSflowMirror( cfg, kSflowMirror, true /* truncate */, - utility::getSflowMirrorDestination(v4).str()); + utility::getSflowMirrorDestination(v4).str(), + udpSrcPort, + udpDstPort, + v4); } - virtual void configureMirror(cfg::SwitchConfig& cfg) const override { - configureMirror(cfg, std::is_same_v); + virtual void configureMirror( + cfg::SwitchConfig& cfg, + uint32_t udpSrcPort = 6545, + uint32_t udpDstPort = 6343) const override { + configureMirror( + cfg, std::is_same_v, udpSrcPort, udpDstPort); } }; @@ -539,6 +625,14 @@ class AgentSflowMirrorOnTrunkTest : public AgentSflowMirrorTruncateTest { class AgentSflowMirrorWithLineRateTrafficTest : public AgentSflowMirrorTruncateTest { public: + std::vector + getProductionFeaturesVerified() const override { + auto productionFeatures = AgentSflowMirrorTruncateTest< + folly::IPAddressV6>::getProductionFeaturesVerified(); + productionFeatures.push_back( + production_features::ProductionFeature::LINERATE_SFLOW); + return productionFeatures; + } static const int kLosslessPriority{2}; void testSflowEgressCongestion() { constexpr int kNumDataTrafficPorts{6}; @@ -548,11 +642,14 @@ class AgentSflowMirrorWithLineRateTrafficTest allPorts.begin(), allPorts.begin() + kNumDataTrafficPorts); std::vector losslessPgIds = {kLosslessPriority}; auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config); // Configure 1:1 sampling to ensure high rate on mirror egress port configSampling(config, 1); // PFC buffer configurations to ensure we have lossless traffic const std::map tcToPgOverride{}; + // We dont want PFC here, so set global shared threshold to be high const utility::PfcBufferParams bufferParams{ + .globalShared = 20 * 1024 * 1024, .scalingFactor = cfg::MMUScalingFactor::ONE}; utility::setupPfcBuffers( getAgentEnsemble(), @@ -566,11 +663,15 @@ class AgentSflowMirrorWithLineRateTrafficTest applyNewConfig(config); resolveRouteForMirrorDestination(); utility::setupEcmpDataplaneLoopOnAllPorts(getAgentEnsemble()); + // 1. Low rate of the order of 1% of 800G is good enough to saturate the + // eventor port, which currently has a max possible rate of ~13Gbps. + // 2. For prod, we sample 1 out of 60K packets, hence the rate expected + // on eventor port is low, 1/60K of 14.4Tbps ~240Mbps. utility::createTrafficOnMultiplePorts( getAgentEnsemble(), kNumDataTrafficPorts, sendPacket, - 50 /*desiredPctLineRate*/); + 1 /*desiredPctLineRate*/); }; auto verify = [=, this]() { verifySflowEgressPortNotStuck(); @@ -608,7 +709,7 @@ class AgentSflowMirrorWithLineRateTrafficTest } void verifySflowEgressPortNotStuck() { - auto portId = getNonSflowSampledInterfacePorts(); + auto portId = getNonSflowSampledInterfacePort(); // Expect atleast 1Gbps of mirror traffic! const uint64_t kDesiredMirroredTrafficRate{1000000000}; EXPECT_NO_THROW(getAgentEnsemble()->waitForSpecificRateOnPort( @@ -655,11 +756,15 @@ class AgentSflowMirrorWithLineRateTrafficTest getProgrammedState(), SwitchID(*checkSameAndGetAsic()->getSwitchId())); WITH_RETRIES({ - auto latestStats = getLatestSysPortStats(eventorSysPortId); - auto watermarkBytes = latestStats.queueWatermarkBytes_()->at(0); + auto latestSysPortStats = getLatestSysPortStats(eventorSysPortId); + auto watermarkBytes = latestSysPortStats.queueWatermarkBytes_()->at(0); EXPECT_EVENTUALLY_GT(watermarkBytes, 0); EXPECT_LT(watermarkBytes, maxExpectedQueueLimitBytes); - EXPECT_EVENTUALLY_GT(latestStats.queueOutDiscardBytes_()->at(0), 0); + // Now, ingress congestion discards will be seen on input ports + // with line rate traffic. Pick one of the ports with line rate + // traffic and look for ingress congestion discards. + auto latestPortStats = getLatestPortStats(getPortsForSampling()[0]); + EXPECT_EVENTUALLY_GT(*latestPortStats.inCongestionDiscards_(), 0); }); } }; @@ -719,6 +824,7 @@ TEST_F(AgentSflowMirrorTestV4, MoveToV6) { // Test to migrate v4 mirror to v6 auto setup = [=, this]() { auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config); configSampling(config, 1); configureTrapAcl(config); applyNewConfig(config); @@ -743,6 +849,7 @@ TEST_F(AgentSflowMirrorTestV6, MoveToV4) { // Test to migrate v6 mirror to v4 auto setup = [=, this]() { auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config); configSampling(config, 1); configureTrapAcl(config); applyNewConfig(config); @@ -762,4 +869,19 @@ TEST_F(AgentSflowMirrorTestV6, MoveToV4) { verifyAcrossWarmBoots( setup, verify, setupPostWb, [=, this]() { verifySampledPacket(true); }); } + +TEST_F(AgentSflowMirrorTestV6, verifyL4SrcPortRandomization) { + auto setup = [=, this]() { + auto config = initialConfig(*getAgentEnsemble()); + configureMirror(config, false, 0); + configSampling(config, 1); + configureTrapAcl(config); + applyNewConfig(config); + resolveRouteForMirrorDestination(); + }; + auto verify = [=, this]() { + this->verifySrsPortRandomizationOnSflowPacket(); + }; + verifyAcrossWarmBoots(setup, verify); +} } // namespace facebook::fboss diff --git a/fboss/agent/test/agent_hw_tests/AgentTrafficPfcTests.cpp b/fboss/agent/test/agent_hw_tests/AgentTrafficPfcTests.cpp index d82deeea397eb..8da1e360b26c2 100644 --- a/fboss/agent/test/agent_hw_tests/AgentTrafficPfcTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentTrafficPfcTests.cpp @@ -394,15 +394,6 @@ class AgentTrafficPfcTest : public AgentHwTest { std::vector portIds = portIdsForTest(); auto setup = [&]() { - for (auto [switchId, asic] : this->getAsics()) { - if ((asic->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2) || - (asic->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3)) { - // Keep low scaling factor so that headroom usage is attempted - // for Jericho family of ASICs. - testParams.buffer.scalingFactor = cfg::MMUScalingFactor::ONE_32768TH; - } - } - // Setup PFC auto cfg = getAgentEnsemble()->getCurrentConfig(); std::vector portIdsToConfigure = portIds; @@ -511,6 +502,13 @@ TEST_P(AgentTrafficPfcGenTest, verifyPfc) { const int trafficClass = kLosslessTrafficClass; const int pfcPriority = kLosslessPriority; TrafficTestParams trafficParams = GetParam(); + auto asicType = utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) + ->getAsicType(); + if (asicType == cfg::AsicType::ASIC_TYPE_JERICHO2 || + asicType == cfg::AsicType::ASIC_TYPE_JERICHO3) { + // Keep smaller global pool size + trafficParams.buffer.globalShared = kGlobalSharedBytes; + } runTestWithCfg(trafficClass, pfcPriority, {}, trafficParams); } @@ -537,11 +535,7 @@ TEST_F(AgentTrafficPfcTest, verifyPfcWithMapChanges_1) { TEST_F(AgentTrafficPfcTest, verifyBufferPoolWatermarks) { const int trafficClass = kLosslessTrafficClass; const int pfcPriority = kLosslessPriority; - cfg::MMUScalingFactor scalingFactor = - utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) - ->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2 - ? cfg::MMUScalingFactor::ONE_32768TH - : cfg::MMUScalingFactor::ONE_64TH; + cfg::MMUScalingFactor scalingFactor = cfg::MMUScalingFactor::ONE_64TH; runTestWithCfg( trafficClass, pfcPriority, diff --git a/fboss/agent/test/agent_hw_tests/AgentTrunkTests.cpp b/fboss/agent/test/agent_hw_tests/AgentTrunkTests.cpp new file mode 100644 index 0000000000000..3133537e43f51 --- /dev/null +++ b/fboss/agent/test/agent_hw_tests/AgentTrunkTests.cpp @@ -0,0 +1,113 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#include "fboss/agent/test/AgentHwTest.h" +#include "fboss/agent/test/EcmpSetupHelper.h" +#include "fboss/agent/test/TrunkUtils.h" +#include "fboss/agent/test/utils/ConfigUtils.h" +#include "fboss/agent/test/utils/TrunkTestUtils.h" + +#include + +using namespace ::testing; + +namespace facebook::fboss { +class AgentTrunkTest : public AgentHwTest { + protected: + cfg::SwitchConfig initialConfig( + const AgentEnsemble& ensemble) const override { + return utility::oneL3IntfTwoPortConfig( + ensemble.getSw(), + ensemble.masterLogicalPortIds()[0], + ensemble.masterLogicalPortIds()[1]); + } + + std::vector + getProductionFeaturesVerified() const override { + return {production_features::ProductionFeature::LAG}; + } + + void applyConfigAndEnableTrunks(const cfg::SwitchConfig& config) { + applyNewConfig(config); + applyNewState( + [](const std::shared_ptr state) { + return utility::enableTrunkPorts(state); + }, + "enable trunk ports"); + } +}; + +TEST_F(AgentTrunkTest, TrunkCreateHighLowKeyIds) { + auto setup = [=, this]() { + auto cfg = initialConfig(*getAgentEnsemble()); + utility::addAggPort( + std::numeric_limits::max(), + {masterLogicalPortIds()[0]}, + &cfg); + utility::addAggPort(1, {masterLogicalPortIds()[1]}, &cfg); + applyConfigAndEnableTrunks(cfg); + }; + auto verify = [=, this]() { + WITH_RETRIES({ + EXPECT_EVENTUALLY_EQ( + utility::getAggregatePortCount(*getAgentEnsemble()), 2); + EXPECT_EVENTUALLY_TRUE(utility::verifyAggregatePort( + *getAgentEnsemble(), AggregatePortID(1))); + EXPECT_EVENTUALLY_TRUE(utility::verifyAggregatePort( + *getAgentEnsemble(), + AggregatePortID(std::numeric_limits::max()))); + auto aggIDs = { + AggregatePortID(1), + AggregatePortID(std::numeric_limits::max())}; + for (auto aggId : aggIDs) { + EXPECT_EVENTUALLY_TRUE(utility::verifyAggregatePortMemberCount( + *getAgentEnsemble(), aggId, 1)); + } + }); + }; + verifyAcrossWarmBoots(setup, verify); +} + +TEST_F(AgentTrunkTest, TrunkCheckIngressPktAggPort) { + auto setup = [=, this]() { + auto cfg = initialConfig(*getAgentEnsemble()); + utility::addAggPort( + std::numeric_limits::max(), + {masterLogicalPortIds()[0]}, + &cfg); + applyConfigAndEnableTrunks(cfg); + }; + auto verify = [=, this]() { + WITH_RETRIES({ + EXPECT_EVENTUALLY_TRUE(utility::verifyPktFromAggregatePort( + *getAgentEnsemble(), + AggregatePortID(std::numeric_limits::max()))); + }); + }; + verifyAcrossWarmBoots(setup, verify); +} + +TEST_F(AgentTrunkTest, TrunkMemberPortDownMinLinksViolated) { + auto aggId = AggregatePortID(std::numeric_limits::max()); + + auto setup = [=, this]() { + auto cfg = initialConfig(*getAgentEnsemble()); + utility::addAggPort( + aggId, {masterLogicalPortIds()[0], masterLogicalPortIds()[1]}, &cfg); + applyConfigAndEnableTrunks(cfg); + + // Member port count should drop to 1 now. + }; + auto verify = [=, this]() { + bringDownPort(PortID(masterLogicalPortIds()[0])); + WITH_RETRIES({ + EXPECT_EVENTUALLY_EQ( + utility::getAggregatePortCount(*getAgentEnsemble()), 1); + EXPECT_EVENTUALLY_TRUE( + utility::verifyAggregatePort(*getAgentEnsemble(), aggId)); + EXPECT_EVENTUALLY_TRUE(utility::verifyAggregatePortMemberCount( + *getAgentEnsemble(), aggId, 1)); + }); + }; + verifyAcrossWarmBoots(setup, verify); +} +} // namespace facebook::fboss diff --git a/fboss/agent/test/agent_hw_tests/AgentTunnelMgrTests.cpp b/fboss/agent/test/agent_hw_tests/AgentTunnelMgrTests.cpp index 87ce8e29dab4d..9f7cc3c906213 100644 --- a/fboss/agent/test/agent_hw_tests/AgentTunnelMgrTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentTunnelMgrTests.cpp @@ -1,5 +1,8 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. - +#include +#include +#include "fboss/agent/SwSwitch.h" +#include "fboss/agent/TunManager.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/test/AgentHwTest.h" #include "fboss/agent/test/TestUtils.h" @@ -19,47 +22,213 @@ class AgentTunnelMgrTest : public AgentHwTest { } // Clear any stale kernel entries - void clearKernelEntries() { - // Delete the source route rule entries from the kernel - auto cmd = folly::to("ip rule delete table 1"); + void clearKernelEntries(const std::string& intfIp, bool isIPv4 = true) { + std::string cmd; + if (isIPv4) { + cmd = folly::to("ip rule list | grep ", intfIp); + } else { + cmd = folly::to("ip -6 rule list | grep ", intfIp); + } - runShellCmd(cmd); + auto output = runShellCmd(cmd); - // Delete the tunnel address entries from the kernel - cmd = folly::to("ip link delete fboss2000"); + // There could be duplicate source route rule entries in the kernel. Clear + // all of them. + while (output.find(folly::to(intfIp)) != std::string::npos) { + // Break the output string into words + std::istringstream iss(output); + std::string word; + std::string lastWord; + + while (iss >> word) { + lastWord = folly::copy(word); + } + + XLOG(DBG2) << "tableId: " << lastWord; + + // Delete the source route rule entries from the kernel + if (isIPv4) { + cmd = folly::to("ip rule delete table ", lastWord); + } else { + cmd = folly::to("ip -6 rule delete table ", lastWord); + } + + runShellCmd(cmd); + + if (isIPv4) { + // Get the source route rule entries again + cmd = folly::to("ip rule list | grep ", intfIp); + } else { + cmd = folly::to("ip -6 rule list | grep ", intfIp); + } + + output = runShellCmd(cmd); + + XLOG(DBG2) << "clearKernelEntries Cmd: " << cmd; + XLOG(DBG2) << "clearKernelEntries Output: \n" << output; + } + + // Get the String + if (isIPv4) { + cmd = folly::to("ip addr list | grep ", intfIp); + } else { + cmd = folly::to("ip -6 addr list | grep ", intfIp); + } - runShellCmd(cmd); - } + output = runShellCmd(cmd); - void checkKernelEntriesRemoved() { - auto config = initialConfig(*getAgentEnsemble()); - auto intfIp = folly::IPAddress::createNetwork( - config.interfaces()[0].ipAddresses()[0], -1, false) - .first; + XLOG(DBG2) << "clearKernelEntries Cmd: " << cmd; + XLOG(DBG2) << "clearKernelEntries Output: \n" << output; + + // Break the output string into words + std::istringstream iss(output); + do { + std::string subs; + // Get the word from the istringstream + iss >> subs; + // Delete the matching fboss interface from the kernel + if (subs.find("fboss") != std::string::npos) { + cmd = folly::to("ip link delete ", subs); + runShellCmd(cmd); + XLOG(DBG2) << "clearKernelEntries Cmd: " << cmd; + break; + } + } while (iss); + } + void checkIpKernelEntriesRemoved( + const std::string& intfIp, + bool isIPv4 = true) { // Check that the source route rule entries are not present in the kernel - auto cmd = folly::to("ip rule list | grep ", intfIp); + std::string cmd; + // ipv6 address can match with other ipv6 addresses e.g. 1:: can match with + // 1::1. So, adding a space before and after the address to avoid matching + // with other addresses + std::string searchIntfIp = " " + intfIp + " "; + if (isIPv4) { + cmd = folly::to("ip rule list | grep ", searchIntfIp); + } else { + cmd = folly::to("ip -6 rule list | grep ", searchIntfIp); + } auto output = runShellCmd(cmd); + XLOG(DBG2) << "checkKernelEntriesRemoved Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesRemoved Output: \n" << output; + EXPECT_TRUE( - output.find(folly::to(intfIp)) == std::string::npos); + output.find(folly::to(searchIntfIp)) == std::string::npos); + searchIntfIp = " " + intfIp + "/"; // Check that the tunnel address entries are not present in the kernel - cmd = folly::to("ip addr list | grep ", intfIp); + if (isIPv4) { + cmd = folly::to("ip addr list | grep ", searchIntfIp); + } else { + cmd = folly::to("ip -6 addr list | grep ", searchIntfIp); + } output = runShellCmd(cmd); + XLOG(DBG2) << "checkKernelEntriesRemoved Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesRemoved Output: \n" << output; + EXPECT_TRUE( - output.find(folly::to(intfIp)) == std::string::npos); + output.find(folly::to(searchIntfIp)) == std::string::npos); + + // Check that the route entries are not present in the kernel + if (isIPv4) { + searchIntfIp = intfIp; + cmd = folly::to( + "ip route list | grep ", searchIntfIp, " | grep fboss"); + } else { + searchIntfIp = intfIp + "/"; + cmd = folly::to( + "ip -6 route list | grep ", searchIntfIp, " | grep fboss"); + } + + output = runShellCmd(cmd); + + XLOG(DBG2) << "checkKernelEntriesRemoved Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesRemoved Output: \n" << output; + + EXPECT_TRUE( + output.find(folly::to(searchIntfIp)) == std::string::npos); + } + + // Check that the kernel entries are present in the kernel + void checkKernelEntriesExist( + const std::string& intfIp, + bool isIPv4 = true, + bool checkRouteEntry = true) { + // Check that the source route rule entries are present in the kernel + + std::string cmd; + std::string searchIntfIp = " " + intfIp + " "; + if (isIPv4) { + cmd = folly::to("ip rule list | grep ", searchIntfIp); + } else { + cmd = folly::to("ip -6 rule list | grep ", searchIntfIp); + } + + auto output = runShellCmd(cmd); - // Check that the default route entries are not present in the kernel - cmd = folly::to("ip route list | grep ", intfIp); + XLOG(DBG2) << "checkKernelEntriesExist Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesExist Output: \n" << output; + + EXPECT_TRUE( + output.find(folly::to(searchIntfIp)) != std::string::npos); + + searchIntfIp = " " + intfIp + "/"; + if (isIPv4) { + // Check that the tunnel address entries are present in the kernel + cmd = folly::to("ip addr list | grep ", searchIntfIp); + } else { + cmd = folly::to("ip -6 addr list | grep ", searchIntfIp); + } output = runShellCmd(cmd); + XLOG(DBG2) << "checkKernelEntriesExist Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesExist Output: \n" << output; + EXPECT_TRUE( - output.find(folly::to(intfIp)) == std::string::npos); + output.find(folly::to(searchIntfIp)) != std::string::npos); + + if (checkRouteEntry) { + // Check that the route entries are present in the kernel + if (isIPv4) { + searchIntfIp = intfIp; + cmd = folly::to( + "ip route list | grep ", searchIntfIp, " | grep fboss"); + } else { + searchIntfIp = intfIp + "/"; + cmd = folly::to( + "ip -6 route list | grep ", searchIntfIp, " | grep fboss"); + } + + output = runShellCmd(cmd); + + XLOG(DBG2) << "checkKernelEntriesExist Cmd: " << cmd; + XLOG(DBG2) << "checkKernelEntriesExist Output:" << output; + + EXPECT_TRUE( + output.find(folly::to(searchIntfIp)) != + std::string::npos); + } + } + + void clearKernelEntries( + const std::string& intfIPv4, + const std::string& intfIPv6) { + clearKernelEntries(intfIPv4, true); + clearKernelEntries(intfIPv6, false); + } + + void checkKernelEntriesRemoved( + const std::string& intfIPv4, + const std::string& intfIPv6) { + checkIpKernelEntriesRemoved(intfIPv4, true); + checkIpKernelEntriesRemoved(intfIPv6, false); } cfg::SwitchConfig initialConfig( @@ -73,51 +242,306 @@ class AgentTunnelMgrTest : public AgentHwTest { } }; -// Test that the tunnel manager is able to create the source route rule entries, -// tunnel address entries and default route entries in the kernel -TEST_F(AgentTunnelMgrTest, checkKernelEntries) { +// Test that the tunnel manager is able to create the source route rule +// entries, tunnel address entries and default route entries for IPv4 in the +// kernel +TEST_F(AgentTunnelMgrTest, checkKernelIPv4Entries) { auto setup = [=]() {}; auto verify = [=, this]() { auto config = initialConfig(*getAgentEnsemble()); - auto intfIp = folly::IPAddress::createNetwork( - config.interfaces()[0].ipAddresses()[0], -1, false) - .first; + auto intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + auto intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + // Get TunManager pointer + auto tunMgr_ = getAgentEnsemble()->getSw()->getTunManager(); + auto status = tunMgr_->getIntfStatus( + getProgrammedState(), (InterfaceID)config.interfaces()[0].get_intfID()); + // There could be a race condition where the interface is up, but the + // socket is not created. So, checking for the socket existence. + auto socketExists = tunMgr_->isValidNlSocket(); + + // There is a known limitation in the kernel that the source route rule + // entries are not created if the interface is not up. So, checking for + // the kernel entries if the interface is up + if (status && socketExists) { + checkKernelEntriesExist(folly::to(intfIPv4)); + } - // Check that the source route rule entries are present in the kernel - auto cmd = folly::to("ip rule list | grep ", intfIp); + // Clear kernel entries + clearKernelEntries( + folly::to(intfIPv4), folly::to(intfIPv6)); - auto output = runShellCmd(cmd); + // Check that the kernel entries are removed + checkKernelEntriesRemoved( + folly::to(intfIPv4), folly::to(intfIPv6)); + }; - XLOG(DBG2) << "Cmd: " << cmd; - XLOG(DBG2) << "Output: \n" << output; + verifyAcrossWarmBoots(setup, verify); +} - EXPECT_TRUE( - output.find(folly::to(intfIp)) != std::string::npos); +// Test that the tunnel manager is able to create the source route rule +// entries, tunnel address entries and default route entries for IPv6 in the +// kernel +TEST_F(AgentTunnelMgrTest, checkKernelIPv6Entries) { + auto setup = [=]() {}; + auto verify = [=, this]() { + auto config = initialConfig(*getAgentEnsemble()); + auto intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + auto intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + // Get TunManager pointer + auto tunMgr_ = getAgentEnsemble()->getSw()->getTunManager(); + auto status = tunMgr_->getIntfStatus( + getProgrammedState(), (InterfaceID)config.interfaces()[0].get_intfID()); + // There could be a race condition where the interface is up, but the + // socket is not created. So, checking for the socket existence. + auto socketExists = tunMgr_->isValidNlSocket(); + + // There is a known limitation in the kernel that the source route rule + // entries are not created if the interface is not up. So, checking for + // the kernel entries if the interface is up + if (status && socketExists) { + checkKernelEntriesExist(folly::to(intfIPv6), false, true); + } - // Check that the tunnel address entries are present in the kernel - cmd = folly::to("ip addr list | grep ", intfIp); + // Clear kernel entries + clearKernelEntries( + folly::to(intfIPv4), folly::to(intfIPv6)); - output = runShellCmd(cmd); + // Check that the kernel entries are removed + checkKernelEntriesRemoved( + folly::to(intfIPv4), folly::to(intfIPv6)); + }; - EXPECT_TRUE( - output.find(folly::to(intfIp)) != std::string::npos); + verifyAcrossWarmBoots(setup, verify); +} - // Check that the default route entries are present in the kernel - cmd = folly::to("ip route list | grep ", intfIp); +// Test that the tunnel manager is able to handle ipv4 address change of the +// interface +TEST_F(AgentTunnelMgrTest, changeIPv4Address) { + auto setup = [=]() {}; + auto verify = [=, this]() { + auto config = initialConfig(*getAgentEnsemble()); - output = runShellCmd(cmd); + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + auto intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + auto intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Get TunManager pointer + auto tunMgr_ = getAgentEnsemble()->getSw()->getTunManager(); + auto status = tunMgr_->getIntfStatus( + getProgrammedState(), (InterfaceID)config.interfaces()[0].get_intfID()); + // There could be a race condition where the interface is up, but the + // socket is not created. So, checking for the socket existence. + auto socketExists = tunMgr_->isValidNlSocket(); + + // There is a known limitation in the kernel that the source route rule + // entries are not created if the interface is not up. So, checking for + // the kernel entries if the interface is up + if (status && socketExists) { + checkKernelEntriesExist(folly::to(intfIPv4), true, true); + } + + // change ip address of the interface + config.interfaces()[0].ipAddresses()[0] = "2.2.2.2/32"; + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + // Route entries installation is currently not consistent after the ip + // address change. So, passing false for checkRouteEntry. + if (status) { + checkKernelEntriesExist(folly::to(intfIPv4), true, false); + } - EXPECT_TRUE( - output.find(folly::to(intfIp)) != std::string::npos); + // Clear kernel entries + clearKernelEntries( + folly::to(intfIPv4), folly::to(intfIPv6)); + + // Check that the kernel entries are removed + checkKernelEntriesRemoved( + folly::to(intfIPv4), folly::to(intfIPv6)); + }; + + verifyAcrossWarmBoots(setup, verify); +} + +// Test that the tunnel manager is able to handle ipv6 address change of the +// interface +TEST_F(AgentTunnelMgrTest, changeIPv6Address) { + auto setup = [=]() {}; + auto verify = [=, this]() { + auto config = initialConfig(*getAgentEnsemble()); + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + auto intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + auto intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Get TunManager pointer + auto tunMgr_ = getAgentEnsemble()->getSw()->getTunManager(); + auto status = tunMgr_->getIntfStatus( + getProgrammedState(), (InterfaceID)config.interfaces()[0].get_intfID()); + // There could be a race condition where the interface is up, but the + // socket is not created. So, checking for the socket existence. + auto socketExists = tunMgr_->isValidNlSocket(); + + // There is a known limitation in the kernel that the source route rule + // entries are not created if the interface is not up. So, checking for + // the kernel entries if the interface is up + if (status && socketExists) { + checkKernelEntriesExist(folly::to(intfIPv6), false); + } + + // change ipv6 address of the interface + config.interfaces()[0].ipAddresses()[1] = "2::/128"; + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Route entries installation is currently not consistent after the ip + // address change. So, passing false for checkRouteEntry. + if (status) { + checkKernelEntriesExist(folly::to(intfIPv6), false, false); + } // Clear kernel entries - clearKernelEntries(); + clearKernelEntries( + folly::to(intfIPv4), folly::to(intfIPv6)); // Check that the kernel entries are removed - checkKernelEntriesRemoved(); + checkKernelEntriesRemoved( + folly::to(intfIPv4), folly::to(intfIPv6)); }; verifyAcrossWarmBoots(setup, verify); } +// Test to check if there are no duplicate kernel entries created +TEST_F(AgentTunnelMgrTest, checkDuplicateEntries) { + auto setup = [=]() {}; + auto verify = [=, this]() { + auto config = initialConfig(*getAgentEnsemble()); + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + auto intfIPv4 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + auto intfIPv6 = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + + // Get TunManager pointer + auto tunMgr_ = getAgentEnsemble()->getSw()->getTunManager(); + auto status = tunMgr_->getIntfStatus( + getProgrammedState(), (InterfaceID)config.interfaces()[0].get_intfID()); + // There could be a race condition where the interface is up, but the + // socket is not created. So, checking for the socket existence. + auto socketExists = tunMgr_->isValidNlSocket(); + + // There is a known limitation in the kernel that the source route rule + // entries are not created if the interface is not up. So, checking for + // the kernel entries if the interface is up + if (status && socketExists) { + checkKernelEntriesExist(folly::to(intfIPv6), false); + } + + // Applying the same config again + // Made change in TunManager to reprogram source route rule upon interface + // up. Noticed duplicate entry for 1.1.1.1 and 1:: for source route rule. + + // Applying same ipv4 and ipv6 address on the interface + config.interfaces()[0].ipAddresses()[0] = "1.1.1.1/32"; + config.interfaces()[0].ipAddresses()[1] = "1::/128"; + + // Apply the config + applyNewConfig(config); + + // change ipv4 and ipv6 address of the interface + config.interfaces()[0].ipAddresses()[0] = "2.2.2.2/32"; + config.interfaces()[0].ipAddresses()[1] = "2::/128"; + + // Apply the config + applyNewConfig(config); + waitForStateUpdates(getAgentEnsemble()->getSw()); + + auto intfIPv6New = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[1], -1, false) + .first; + auto intfIPv4New = folly::IPAddress::createNetwork( + config.interfaces()[0].ipAddresses()[0], -1, false) + .first; + + // Route entries installation is currently not consistent after the ip + // address change. So, passing false for checkRouteEntry. + if (status) { + // If source route rule is added again for the same IP address, it would + // create duplicate entries. + checkKernelEntriesRemoved( + folly::to(intfIPv4), folly::to(intfIPv6)); + checkKernelEntriesExist(folly::to(intfIPv4New), true, false); + checkKernelEntriesExist( + folly::to(intfIPv6New), false, false); + } + + // Clear kernel entries + clearKernelEntries( + folly::to(intfIPv4New), + folly::to(intfIPv6New)); + + // Check that the kernel entries are removed + checkKernelEntriesRemoved( + folly::to(intfIPv4New), + folly::to(intfIPv6New)); + }; + + verifyAcrossWarmBoots(setup, verify); +} } // namespace facebook::fboss diff --git a/fboss/agent/test/agent_hw_tests/AgentVoqSwitchTests.cpp b/fboss/agent/test/agent_hw_tests/AgentVoqSwitchTests.cpp index 3e7a48d18818d..89d8ef97360ff 100644 --- a/fboss/agent/test/agent_hw_tests/AgentVoqSwitchTests.cpp +++ b/fboss/agent/test/agent_hw_tests/AgentVoqSwitchTests.cpp @@ -313,6 +313,37 @@ class AgentVoqSwitchTest : public AgentHwTest { }); } + std::vector getInterfacePortSysPortDesc() { + auto ports = getProgrammedState()->getPorts()->getAllNodes(); + std::vector portDescs; + std::for_each( + ports->begin(), + ports->end(), + [this, &portDescs](const auto& idAndPort) { + const auto port = idAndPort.second; + if (port->getPortType() == cfg::PortType::INTERFACE_PORT) { + portDescs.push_back(PortDescriptor(getSystemPortID( + PortDescriptor(port->getID()), cfg::Scope::GLOBAL))); + } + }); + return portDescs; + } + + // Resolve and return list of local nhops (only NIF ports) + std::vector resolveLocalNhops( + utility::EcmpSetupTargetedPorts6& ecmpHelper) { + std::vector portDescs = getInterfacePortSysPortDesc(); + + applyNewState([&](const std::shared_ptr& in) { + auto out = in->clone(); + for (const auto& portDesc : portDescs) { + out = ecmpHelper.resolveNextHops(out, {portDesc}); + } + return out; + }); + return portDescs; + } + private: void addCpuTrafficPolicy( cfg::SwitchConfig& cfg, @@ -1006,13 +1037,23 @@ TEST_F(AgentVoqSwitchWithFabricPortsTest, fdrCellDrops) { std::vector(1024, 0xff)); } }; + int64_t fdrFifoWatermark = 0; int64_t fdrCellDrops = 0; WITH_RETRIES({ sendPkts(); + for (const auto& switchWatermarksIter : getAllSwitchWatermarkStats()) { + if (switchWatermarksIter.second.fdrFifoWatermarkBytes().has_value()) { + fdrFifoWatermark += + switchWatermarksIter.second.fdrFifoWatermarkBytes().value(); + } + } + EXPECT_EVENTUALLY_GT(fdrFifoWatermark, 0); fdrCellDrops = *getAggregatedSwitchDropStats().fdrCellDrops(); // TLTimeseries value > 0 EXPECT_EVENTUALLY_GT(fdrCellDrops, 0); }); + XLOG(DBG0) << "FDR fifo watermark: " << fdrFifoWatermark + << ", FDR cell drops: " << fdrCellDrops; // Assert that we don't spuriously increment fdrCellDrops on every drop // stats. This would happen if we treated a stat as clear on read, while // in HW it was cumulative @@ -1082,6 +1123,13 @@ TEST_F(AgentVoqSwitchTest, sendPacketCpuAndFrontPanel) { int64_t afterQueueOutPkts = 0, afterQueueOutBytes = 0; int64_t beforeVoQOutBytes = 0, afterVoQOutBytes = 0; int64_t egressCoreWatermarkBytes = 0; + // Get SRAM size per core as thats the highest possible free SRAM + const uint64_t kSramSize = + utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) + ->getSramSizeBytes() / + utility::checkSameAndGetAsic(getAgentEnsemble()->getL3Asics()) + ->getNumCores(); + int64_t sramMinBufferWatermarkBytes = kSramSize + 1; if (isSupportedOnAllAsics(HwAsic::Feature::L3_QOS)) { auto beforeAllQueueOut = getAllQueueOutPktsBytes(); @@ -1144,6 +1192,12 @@ TEST_F(AgentVoqSwitchTest, sendPacketCpuAndFrontPanel) { switchWatermarksIter.second.egressCoreBufferWatermarkBytes() .value(); } + if (switchWatermarksIter.second.sramMinBufferWatermarkBytes() + .has_value()) { + sramMinBufferWatermarkBytes = std::min( + sramMinBufferWatermarkBytes, + *switchWatermarksIter.second.sramMinBufferWatermarkBytes()); + } } XLOG(DBG2) << "Verifying: " << (isFrontPanel ? "Send Packet from Front Panel Port" @@ -1167,7 +1221,9 @@ TEST_F(AgentVoqSwitchTest, sendPacketCpuAndFrontPanel) { << " afterFrontPanelBytes: " << afterFrontPanelOutBytes << " afterRecyclePkts: " << afterRecyclePkts << " egressCoreWatermarkBytes: " - << egressCoreWatermarkBytes; + << egressCoreWatermarkBytes + << " sramMinBufferWatermarkBytes: " + << sramMinBufferWatermarkBytes; EXPECT_EVENTUALLY_EQ(afterOutPkts - 1, beforeOutPkts); int extraByteOffset = 0; @@ -1217,6 +1273,10 @@ TEST_F(AgentVoqSwitchTest, sendPacketCpuAndFrontPanel) { HwAsic::Feature::EGRESS_CORE_BUFFER_WATERMARK)) { EXPECT_EVENTUALLY_GT(egressCoreWatermarkBytes, 0); } + if (isSupportedOnAllAsics( + HwAsic::Feature::INGRESS_SRAM_MIN_BUFFER_WATERMARK)) { + EXPECT_EVENTUALLY_LE(sramMinBufferWatermarkBytes, kSramSize); + } }); }; @@ -1582,8 +1642,13 @@ TEST_F(AgentVoqSwitchWithMultipleDsfNodesTest, remoteSystemPort) { << " after sysPortsFree: " << afterSysPortsFree << " voqsFree: " << afterVoqsFree; EXPECT_EVENTUALLY_EQ(beforeSysPortsFree - 1, afterSysPortsFree); - // 8 VOQs allocated per sys port - EXPECT_EVENTUALLY_EQ(beforeVoqsFree - 8, afterVoqsFree); + // 8 VOQs allocated per sys port for single stage + // 4 VOQs allocated per sys port for dual stage - 3 VOQs for the system + // port itself (since it's <16k port), and 1 VOQ for the 16k+ port. Please + // see 3Q2Q mode VOQ allocation for more details. + EXPECT_EVENTUALLY_EQ( + isDualStage3Q2QMode() ? beforeVoqsFree - 4 : beforeVoqsFree - 8, + afterVoqsFree); }); }; verifyAcrossWarmBoots(setup, [] {}); @@ -2093,47 +2158,10 @@ class AgentVoqSwitchFullScaleDsfNodesTest : public AgentVoqSwitchTest { return 64; } - // Resolve and return list of local nhops (only NIF ports) - std::vector resolveLocalNhops( - utility::EcmpSetupTargetedPorts6& ecmpHelper) { - std::vector portDescs = getInterfacePortSysPortDesc(); - - applyNewState([&](const std::shared_ptr& in) { - auto out = in->clone(); - for (const auto& portDesc : portDescs) { - out = ecmpHelper.resolveNextHops(out, {portDesc}); - } - return out; - }); - return portDescs; - } - - void setupRemoteIntfAndSysPorts() { - auto updateDsfStateFn = [this](const std::shared_ptr& in) { - std::map> switchId2SystemPorts; - std::map> switchId2Rifs; - utility::populateRemoteIntfAndSysPorts( - switchId2SystemPorts, - switchId2Rifs, - getSw()->getConfig(), - isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); - return DsfStateUpdaterUtil::getUpdatedState( - in, - getSw()->getScopeResolver(), - getSw()->getRib(), - switchId2SystemPorts, - switchId2Rifs); - }; - getSw()->getRib()->updateStateInRibThread([this, updateDsfStateFn]() { - getSw()->updateStateWithHwFailureProtection( - folly::sformat("Update state for node: {}", 0), updateDsfStateFn); - }); - } - - boost::container::flat_set getRemoteSysPortDesc() { + flat_set getRemoteSysPortDesc() { auto remoteSysPorts = getProgrammedState()->getRemoteSystemPorts()->getAllNodes(); - boost::container::flat_set sysPortDescs; + flat_set sysPortDescs; std::for_each( remoteSysPorts->begin(), remoteSysPorts->end(), @@ -2144,22 +2172,6 @@ class AgentVoqSwitchFullScaleDsfNodesTest : public AgentVoqSwitchTest { return sysPortDescs; } - std::vector getInterfacePortSysPortDesc() { - auto ports = getProgrammedState()->getPorts()->getAllNodes(); - std::vector portDescs; - std::for_each( - ports->begin(), - ports->end(), - [this, &portDescs](const auto& idAndPort) { - const auto port = idAndPort.second; - if (port->getPortType() == cfg::PortType::INTERFACE_PORT) { - portDescs.push_back(PortDescriptor(getSystemPortID( - PortDescriptor(port->getID()), cfg::Scope::GLOBAL))); - } - }); - return portDescs; - } - protected: void setCmdLineFlagOverrides() const override { AgentVoqSwitchTest::setCmdLineFlagOverrides(); @@ -2186,7 +2198,11 @@ class AgentVoqSwitchFullScaleDsfNodesWithFabricPortsTest }; TEST_F(AgentVoqSwitchFullScaleDsfNodesTest, systemPortScaleTest) { - auto setup = [this]() { setupRemoteIntfAndSysPorts(); }; + auto setup = [this]() { + utility::setupRemoteIntfAndSysPorts( + getSw(), + isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); + }; verifyAcrossWarmBoots(setup, [] {}); } @@ -2194,24 +2210,35 @@ TEST_F(AgentVoqSwitchFullScaleDsfNodesTest, remoteNeighborWithEcmpGroup) { const auto kEcmpWidth = getMaxEcmpWidth(); const auto kMaxDeviation = 25; auto setup = [&]() { - setupRemoteIntfAndSysPorts(); + utility::setupRemoteIntfAndSysPorts( + getSw(), + isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); utility::EcmpSetupTargetedPorts6 ecmpHelper(getProgrammedState()); // Resolve remote nhops and get a list of remote sysPort descriptors - boost::container::flat_set sysPortDescs = + flat_set sysPortDescs = utility::resolveRemoteNhops(getAgentEnsemble(), ecmpHelper); + CHECK(sysPortDescs.size() > kEcmpWidth); for (int i = 0; i < getMaxEcmpGroup(); i++) { auto prefix = RoutePrefixV6{ folly::IPAddressV6(folly::to(i, "::", i)), static_cast(i == 0 ? 0 : 128)}; auto routeUpdater = getSw()->getRouteUpdater(); - ecmpHelper.programRoutes( - &routeUpdater, - flat_set( - std::make_move_iterator(sysPortDescs.begin() + i), - std::make_move_iterator(sysPortDescs.begin() + i + kEcmpWidth)), - {prefix}); + auto sysPortStart = (i * kEcmpWidth) % sysPortDescs.size(); + auto ecmpMemberPorts = flat_set( + std::make_move_iterator(sysPortDescs.begin() + sysPortStart), + std::make_move_iterator( + sysPortDescs.begin() + + std::min(sysPortStart + kEcmpWidth, sysPortDescs.size()))); + // Wrap around and start adding from front of the ports + if (ecmpMemberPorts.size() < kEcmpWidth) { + ecmpMemberPorts.insert( + std::make_move_iterator(sysPortDescs.begin()), + std::make_move_iterator( + sysPortDescs.begin() + (kEcmpWidth - ecmpMemberPorts.size()))); + } + ecmpHelper.programRoutes(&routeUpdater, ecmpMemberPorts, {prefix}); } }; auto verify = [&]() { @@ -2261,7 +2288,9 @@ TEST_F(AgentVoqSwitchFullScaleDsfNodesTest, remoteAndLocalLoadBalance) { const auto kEcmpWidth = 16; const auto kMaxDeviation = 25; auto setup = [&]() { - setupRemoteIntfAndSysPorts(); + utility::setupRemoteIntfAndSysPorts( + getSw(), + isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); utility::EcmpSetupTargetedPorts6 ecmpHelper(getProgrammedState()); // Resolve remote and local nhops and get a list of sysPort descriptors @@ -2341,7 +2370,9 @@ TEST_F(AgentVoqSwitchFullScaleDsfNodesTest, stressProgramEcmpRoutes) { const auto routeScale = 5; const auto numIterations = 20; auto setup = [&]() { - setupRemoteIntfAndSysPorts(); + utility::setupRemoteIntfAndSysPorts( + getSw(), + isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); utility::EcmpSetupTargetedPorts6 ecmpHelper(getProgrammedState()); // Resolve remote nhops and get a list of remote sysPort descriptors @@ -2484,7 +2515,11 @@ TEST_F(AgentVoqSwitchLineRateTest, creditsDeleted) { TEST_F( AgentVoqSwitchFullScaleDsfNodesWithFabricPortsTest, failUpdateAtFullSysPortScale) { - auto setup = [this]() { setupRemoteIntfAndSysPorts(); }; + auto setup = [this]() { + utility::setupRemoteIntfAndSysPorts( + getSw(), + isSupportedOnAllAsics(HwAsic::Feature::RESERVED_ENCAP_INDEX_RANGE)); + }; auto verify = [this]() { getSw()->getRib()->updateStateInRibThread([this]() { EXPECT_THROW( @@ -2527,6 +2562,7 @@ class AgentVoqSwitchConditionalEntropyTest : public AgentVoqSwitchTest { port.conditionalEntropyRehash() = true; } } + cfg.switchSettings()->conditionalEntropyRehashPeriodUS() = 100; return cfg; } }; @@ -2547,4 +2583,81 @@ TEST_F(AgentVoqSwitchConditionalEntropyTest, init) { }; verifyAcrossWarmBoots(setup, verify); } + +TEST_F(AgentVoqSwitchConditionalEntropyTest, verifyLoadBalancing) { + const auto kEcmpWidth = 4; + const auto kMaxDeviation = 25; + + auto getLocalSysPortDesc = [this](auto ecmpHelper) { + std::vector sysPortDescs; + auto localSysPortDescs = resolveLocalNhops(ecmpHelper); + sysPortDescs.insert( + sysPortDescs.end(), + localSysPortDescs.begin(), + localSysPortDescs.begin() + kEcmpWidth); + return sysPortDescs; + }; + auto setup = [this, kEcmpWidth, &getLocalSysPortDesc]() { + utility::EcmpSetupTargetedPorts6 ecmpHelper(getProgrammedState()); + + std::vector sysPortDescs = getLocalSysPortDesc(ecmpHelper); + + auto prefix = RoutePrefixV6{folly::IPAddressV6("0::0"), 0}; + auto routeUpdater = getSw()->getRouteUpdater(); + ecmpHelper.programRoutes( + &routeUpdater, + flat_set( + std::make_move_iterator(sysPortDescs.begin()), + std::make_move_iterator(sysPortDescs.end())), + {prefix}); + }; + + auto verify = [this, &getLocalSysPortDesc]() { + // Send traffic through the 5th interface port and verify load balancing + const auto kIngressPort = 5; + CHECK(masterLogicalInterfacePortIds().size() > kIngressPort + 1); + + utility::EcmpSetupTargetedPorts6 ecmpHelper(getProgrammedState()); + std::vector sysPortDescs = getLocalSysPortDesc(ecmpHelper); + + std::function( + const std::vector&)> + getSysPortStatsFn = [&](const std::vector& portIds) { + getSw()->updateStats(); + return getLatestSysPortStats(portIds); + }; + + utility::pumpTrafficAndVerifyLoadBalanced( + [&]() { + utility::pumpRoCETraffic( + true /* isV6 */, + utility::getAllocatePktFn(getAgentEnsemble()), + utility::getSendPktFunc(getAgentEnsemble()), + utility::getFirstInterfaceMac(getProgrammedState()), + std::nullopt /* vlan */, + masterLogicalInterfacePortIds()[kIngressPort], + utility::kUdfL4DstPort, + 255 /* hopLimit */, + std::nullopt /* srcMacAddr */, + 1000000, /* packetCount */ + utility::kUdfRoceOpcodeAck, + 0x40, /* reserved */ + std::nullopt, /* nextHdr */ + true /* sameDstQueue */); + }, + [&]() { + auto ports = std::make_unique>(); + for (auto sysPortDecs : sysPortDescs) { + ports->push_back(static_cast(sysPortDecs.sysPortID())); + } + getSw()->clearPortStats(ports); + }, + [&]() { + WITH_RETRIES(EXPECT_EVENTUALLY_TRUE(utility::isLoadBalanced( + sysPortDescs, {}, getSysPortStatsFn, kMaxDeviation, false))); + return true; + }); + }; + verifyAcrossWarmBoots(setup, verify); +} } // namespace facebook::fboss diff --git a/fboss/agent/test/agent_hw_tests/BUCK b/fboss/agent/test/agent_hw_tests/BUCK index d889ace4fc957..26744ba75d3e5 100644 --- a/fboss/agent/test/agent_hw_tests/BUCK +++ b/fboss/agent/test/agent_hw_tests/BUCK @@ -21,6 +21,7 @@ cpp_library( "AgentDiagShellStressTests.cpp", "AgentDscpMarkingTests.cpp", "AgentDscpQueueMappingTests.cpp", + "AgentEcmpTests.cpp", "AgentEgressForwardingDiscardCounterTests.cpp", "AgentEmptyTests.cpp", "AgentFabricSwitchTests.cpp", @@ -30,6 +31,7 @@ cpp_library( "AgentHwAclStatTests.cpp", "AgentInNullRouteDiscardsTest.cpp", "AgentInTrapDiscardsTest.cpp", + "AgentIngressBufferTests.cpp", "AgentJumboFramesTests.cpp", "AgentL3ForwardingTests.cpp", "AgentL4PortBlackholingTests.cpp", @@ -47,6 +49,7 @@ cpp_library( "AgentPacketSendTests.cpp", "AgentPfcTests.cpp", "AgentPortBandWidthTests.cpp", + "AgentPortLedTests.cpp", "AgentPortTests.cpp", "AgentPrbsTests.cpp", "AgentQueuePerHostL2Tests.cpp", @@ -64,6 +67,7 @@ cpp_library( "AgentSwitchStatsTxCounterTests.cpp", "AgentTrafficPfcTests.cpp", "AgentTrunkLoadBalancerTests.cpp", + "AgentTrunkTests.cpp", "AgentTunnelMgrTests.cpp", "AgentVoqSwitchInterruptsTests.cpp", "AgentVoqSwitchTests.cpp", @@ -72,77 +76,6 @@ cpp_library( ], link_whole = True, exported_deps = [ - "fbcode//fb303:service_data", - "fbcode//fboss/agent:address_utils", - "fbcode//fboss/agent:agent_features", - "fbcode//fboss/agent:apply_thrift_config", - "fbcode//fboss/agent:core", - "fbcode//fboss/agent:fboss-error", - "fbcode//fboss/agent:fboss-types", - "fbcode//fboss/agent:handler", - "fbcode//fboss/agent:hw_asic_table", - "fbcode//fboss/agent:load_agent_config", - "fbcode//fboss/agent:packet", - "fbcode//fboss/agent:route_update_wrapper", - "fbcode//fboss/agent:sflow_shim_utils", - "fbcode//fboss/agent:stats", - "fbcode//fboss/agent:switch_config-cpp2-types", - "fbcode//fboss/agent:utils", - "fbcode//fboss/agent/hw:hw_resource_stats_publisher", - "fbcode//fboss/agent/hw:hw_switch_fb303_stats", - "fbcode//fboss/agent/hw/switch_asics:switch_asics", - "fbcode//fboss/agent/hw/test:config_factory", - "fbcode//fboss/agent/hw/test:hw_test_acl_utils", - "fbcode//fboss/agent/hw/test:prod_config_factory", - "fbcode//fboss/agent/packet:ether_type", - "fbcode//fboss/agent/packet:packet", - "fbcode//fboss/agent/packet:packet_factory", - "fbcode//fboss/agent/packet:pktutil", - "fbcode//fboss/agent/state:label_forwarding_action", - "fbcode//fboss/agent/state:state", - "fbcode//fboss/agent/state:state_utils", - "fbcode//fboss/agent/test:agent_hw_test", - "fbcode//fboss/agent/test:ecmp_helper", - "fbcode//fboss/agent/test:production_features-cpp2-types", - "fbcode//fboss/agent/test:resourcelibutil", - "fbcode//fboss/agent/test:route_scale_gen", - "fbcode//fboss/agent/test:trunk_utils", - "fbcode//fboss/agent/test:utils", - "fbcode//fboss/agent/test/utils:acl_test_utils", - "fbcode//fboss/agent/test/utils:aqm_test_utils", - "fbcode//fboss/agent/test/utils:asic_test_utils", - "fbcode//fboss/agent/test/utils:config_utils", - "fbcode//fboss/agent/test/utils:copp_test_utils", - "fbcode//fboss/agent/test/utils:dscp_marking_utils", - "fbcode//fboss/agent/test/utils:dsf_config_utils", - "fbcode//fboss/agent/test/utils:ecmp_dataplane_test_util", - "fbcode//fboss/agent/test/utils:fabric_test_utils", - "fbcode//fboss/agent/test/utils:invariant_test_utils", - "fbcode//fboss/agent/test/utils:l2learn_observer_util", - "fbcode//fboss/agent/test/utils:load_balancer_test_runner_h", - "fbcode//fboss/agent/test/utils:load_balancer_test_utils", - "fbcode//fboss/agent/test/utils:mac_test_utils", - "fbcode//fboss/agent/test/utils:mirror_test_utils", - "fbcode//fboss/agent/test/utils:multi_port_traffic_test_utils", - "fbcode//fboss/agent/test/utils:olympic_qos_utils", - "fbcode//fboss/agent/test/utils:packet_snooper", - "fbcode//fboss/agent/test/utils:pkt_test_utils", - "fbcode//fboss/agent/test/utils:port_stats_test_utils", - "fbcode//fboss/agent/test/utils:port_test_utils", - "fbcode//fboss/agent/test/utils:qos_test_utils", - "fbcode//fboss/agent/test/utils:queue_per_host_test_utils", - "fbcode//fboss/agent/test/utils:queue_test_utils", - "fbcode//fboss/agent/test/utils:route_test_utils", - "fbcode//fboss/agent/test/utils:scale_test_utils", - "fbcode//fboss/agent/test/utils:traffic_policy_utils", - "fbcode//fboss/agent/test/utils:trap_packet_utils", - "fbcode//fboss/agent/test/utils:voq_test_utils", - "fbcode//fboss/lib:common_utils", - "fbcode//folly:file_util", - "fbcode//folly:network_address", - "fbcode//folly/json:dynamic", - "fbcode//folly/logging:logging", - "fbcode//folly/testing:test_util", "fbsource//third-party/googletest:gtest", "//fb303:service_data", "//fboss/agent:address_utils", @@ -190,6 +123,7 @@ cpp_library( "//fboss/agent/test/utils:config_utils", "//fboss/agent/test/utils:copp_test_utils", "//fboss/agent/test/utils:dscp_marking_utils", + "//fboss/agent/test/utils:dsf_config_utils", "//fboss/agent/test/utils:ecmp_dataplane_test_util", "//fboss/agent/test/utils:fabric_test_utils", "//fboss/agent/test/utils:invariant_test_utils", @@ -198,6 +132,7 @@ cpp_library( "//fboss/agent/test/utils:load_balancer_test_utils", "//fboss/agent/test/utils:mac_test_utils", "//fboss/agent/test/utils:mirror_test_utils", + "//fboss/agent/test/utils:multi_port_traffic_test_utils", "//fboss/agent/test/utils:olympic_qos_utils", "//fboss/agent/test/utils:packet_snooper", "//fboss/agent/test/utils:pfc_test_utils", @@ -211,6 +146,7 @@ cpp_library( "//fboss/agent/test/utils:scale_test_utils", "//fboss/agent/test/utils:traffic_policy_utils", "//fboss/agent/test/utils:trap_packet_utils", + "//fboss/agent/test/utils:trunk_test_utils", "//fboss/agent/test/utils:voq_test_utils", "//fboss/lib:common_utils", "//folly:file_util", @@ -243,7 +179,6 @@ cpp_library( "//fboss/agent/test/utils:acl_test_utils", "//fboss/agent/test/utils:asic_test_utils", "//fboss/agent/test/utils:scale_test_utils", - "//fboss/lib:common_utils", "//folly:network_address", ], ) diff --git a/fboss/agent/test/integration_tests/AgentIntegrationTest.cpp b/fboss/agent/test/integration_tests/AgentIntegrationTest.cpp index 7001bfca6c120..e5aaf1e6f9c4e 100644 --- a/fboss/agent/test/integration_tests/AgentIntegrationTest.cpp +++ b/fboss/agent/test/integration_tests/AgentIntegrationTest.cpp @@ -15,7 +15,6 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/hw/test/LoadBalancerUtils.h" -#include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/EcmpSetupHelper.h" #include "fboss/agent/test/integration_tests/AgentIntegrationTest.h" #include "fboss/lib/config/PlatformConfigUtils.h" diff --git a/fboss/agent/test/link_tests/AgentEnsembleBcmLinkTest.cpp b/fboss/agent/test/link_tests/AgentEnsembleBcmLinkTest.cpp new file mode 100644 index 0000000000000..ee2b069da104e --- /dev/null +++ b/fboss/agent/test/link_tests/AgentEnsembleBcmLinkTest.cpp @@ -0,0 +1,9 @@ +// (c) Facebook, Inc. and its affiliates. Confidential and proprietary. + +#include "fboss/agent/platforms/wedge/WedgePlatformInit.h" +#include "fboss/agent/test/link_tests/AgentEnsembleLinkTest.h" + +int main(int argc, char* argv[]) { + return facebook::fboss::agentEnsembleLinkTestMain( + argc, argv, facebook::fboss::initWedgePlatform); +} diff --git a/fboss/agent/test/link_tests/AgentEnsembleLacpSanityTests.cpp b/fboss/agent/test/link_tests/AgentEnsembleLacpSanityTests.cpp index 39c70e02ab3a1..091ea30f4dfcb 100644 --- a/fboss/agent/test/link_tests/AgentEnsembleLacpSanityTests.cpp +++ b/fboss/agent/test/link_tests/AgentEnsembleLacpSanityTests.cpp @@ -2,7 +2,6 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/state/AggregatePort.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TrunkUtils.h" #include "fboss/agent/test/link_tests/AgentEnsembleLinkTest.h" diff --git a/fboss/agent/test/link_tests/AgentEnsembleLinkTest.cpp b/fboss/agent/test/link_tests/AgentEnsembleLinkTest.cpp index db2dcb13c9f4a..ce9095811722c 100644 --- a/fboss/agent/test/link_tests/AgentEnsembleLinkTest.cpp +++ b/fboss/agent/test/link_tests/AgentEnsembleLinkTest.cpp @@ -18,12 +18,10 @@ #include "fboss/agent/test/utils/CoppTestUtils.h" #include "fboss/agent/test/utils/LoadBalancerTestUtils.h" #include "fboss/agent/test/utils/QosTestUtils.h" -#include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/CommonUtils.h" #include "fboss/lib/config/PlatformConfigUtils.h" #include "fboss/lib/phy/gen-cpp2/phy_types_custom_protocol.h" #include "fboss/lib/thrift_service_client/ThriftServiceClient.h" -#include "fboss/qsfp_service/if/gen-cpp2/transceiver_types_custom_protocol.h" DEFINE_bool( list_production_feature, @@ -576,6 +574,9 @@ void AgentEnsembleLinkTest::printProductionFeatures() const { for (const auto& feature : getProductionFeatures()) { supportedFeatures.push_back(apache::thrift::util::enumNameSafe(feature)); } + if (supportedFeatures.size() == 0) { + throw std::runtime_error("No production features found for this Link Test"); + } std::cout << "Feature List: " << folly::join(",", supportedFeatures) << "\n"; } diff --git a/fboss/agent/test/link_tests/AgentEnsemblePhyInfoTest.cpp b/fboss/agent/test/link_tests/AgentEnsemblePhyInfoTest.cpp index 7eca9934b1531..3f8a9b581433e 100644 --- a/fboss/agent/test/link_tests/AgentEnsemblePhyInfoTest.cpp +++ b/fboss/agent/test/link_tests/AgentEnsemblePhyInfoTest.cpp @@ -45,6 +45,7 @@ void validateInterfaceAndMedium( {TransmitterTechnology::OPTICAL, { phy::InterfaceType::SR, + phy::InterfaceType::SR2, phy::InterfaceType::SR4, phy::InterfaceType::SR8, // Choice for optical profiles in @@ -63,10 +64,13 @@ void validateInterfaceAndMedium( }}, {TransmitterTechnology::BACKPLANE, { + phy::InterfaceType::CR4, phy::InterfaceType::KR, phy::InterfaceType::KR2, phy::InterfaceType::KR4, phy::InterfaceType::KR8, + phy::InterfaceType::SR4, // Used on J3 serdes + phy::InterfaceType::SR8, // Used on J3 serdes // Results in backplane medium in // BcmPortUtils::getDesiredPhyLaneConfig phy::InterfaceType::CAUI4_C2C, diff --git a/fboss/agent/test/link_tests/AgentEnsemblePtpTests.cpp b/fboss/agent/test/link_tests/AgentEnsemblePtpTests.cpp index 6dd3857b1208d..a9dfe1591e67c 100644 --- a/fboss/agent/test/link_tests/AgentEnsemblePtpTests.cpp +++ b/fboss/agent/test/link_tests/AgentEnsemblePtpTests.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/test/utils/PacketSnooper.h" #include "fboss/agent/test/utils/PacketTestUtils.h" #include "fboss/agent/test/utils/TrapPacketUtils.h" -#include "fboss/lib/CommonUtils.h" #include "common/process/Process.h" diff --git a/fboss/agent/test/link_tests/BUCK b/fboss/agent/test/link_tests/BUCK index 330e9cc8d89d4..ffede622d7992 100644 --- a/fboss/agent/test/link_tests/BUCK +++ b/fboss/agent/test/link_tests/BUCK @@ -59,7 +59,6 @@ cpp_library( "//fboss/agent/hw/test:hw_test_port_utils", "//fboss/agent/hw/test:load_balancer_utils", "//fboss/agent/packet:packet", - "//fboss/agent/packet:pktutil", "//fboss/agent/platforms/common:platform_mapping", "//fboss/agent/state:state", "//fboss/agent/state:state_utils", @@ -361,6 +360,34 @@ cpp_library( for sdk in BCM_SDKS ] +[ + cpp_binary( + name = "agent_ensemble_bcm_link_test{}".format(to_impl_suffix(sdk)), + srcs = [ + "AgentEnsembleBcmLinkTest.cpp", + ], + linker_flags = [ + "--export-dynamic", + "--unresolved-symbols=ignore-all", + ], + versions = to_versions(sdk), + deps = [ + "fbsource//third-party/googletest:gtest", + "//fboss/agent:main-bcm", + "//fboss/agent/hw/bcm/tests:agent_hw_test_thrift_handler", + "//fboss/agent/hw/bcm/tests:bcm_ecmp_utils", + "//fboss/agent/platforms/wedge:platform", + "//fboss/agent/test:mono_agent_ensemble", + "//fboss/agent/test/link_tests:agent_ensemble_link_tests", + ], + external_deps = [ + "gflags", + "glog", + ], + ) + for sdk in BCM_SDKS +] + [ cpp_binary( name = "bcm_dependency_test{}".format(to_impl_suffix(sdk)), diff --git a/fboss/agent/test/link_tests/LacpSanityTests.cpp b/fboss/agent/test/link_tests/LacpSanityTests.cpp index b32da67a2d134..86201e8ce9166 100644 --- a/fboss/agent/test/link_tests/LacpSanityTests.cpp +++ b/fboss/agent/test/link_tests/LacpSanityTests.cpp @@ -4,7 +4,6 @@ #include "fboss/agent/hw/HwSwitchWarmBootHelper.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/state/AggregatePort.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TrunkUtils.h" #include "fboss/agent/test/link_tests/LinkTest.h" diff --git a/fboss/agent/test/link_tests/LinkSanityTests.cpp b/fboss/agent/test/link_tests/LinkSanityTests.cpp index 9de80924b7411..c55da8591e110 100644 --- a/fboss/agent/test/link_tests/LinkSanityTests.cpp +++ b/fboss/agent/test/link_tests/LinkSanityTests.cpp @@ -13,8 +13,6 @@ #include "fboss/agent/test/link_tests/LinkTestUtils.h" #include "fboss/lib/CommonUtils.h" -#include "fboss/agent/platforms/common/PlatformMapping.h" - using namespace ::testing; using namespace facebook::fboss; diff --git a/fboss/agent/test/link_tests/LinkTest.cpp b/fboss/agent/test/link_tests/LinkTest.cpp index fa7f06b20fea0..6ab7a851ebb78 100644 --- a/fboss/agent/test/link_tests/LinkTest.cpp +++ b/fboss/agent/test/link_tests/LinkTest.cpp @@ -20,12 +20,10 @@ #include "fboss/agent/test/link_tests/LinkTestUtils.h" #include "fboss/agent/test/utils/CoppTestUtils.h" #include "fboss/agent/test/utils/QosTestUtils.h" -#include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/CommonUtils.h" #include "fboss/lib/config/PlatformConfigUtils.h" #include "fboss/lib/phy/gen-cpp2/phy_types_custom_protocol.h" #include "fboss/lib/thrift_service_client/ThriftServiceClient.h" -#include "fboss/qsfp_service/if/gen-cpp2/transceiver_types_custom_protocol.h" DEFINE_bool( list_production_feature, @@ -571,6 +569,9 @@ void LinkTest::printProductionFeatures() const { for (const auto& feature : getProductionFeatures()) { supportedFeatures.push_back(apache::thrift::util::enumNameSafe(feature)); } + if (supportedFeatures.size() == 0) { + throw std::runtime_error("No production features found for this Link Test"); + } std::cout << "Feature List: " << folly::join(",", supportedFeatures) << "\n"; } diff --git a/fboss/agent/test/link_tests/MacLearningTests.cpp b/fboss/agent/test/link_tests/MacLearningTests.cpp index 7760c27ba437f..33988f59aaf7c 100644 --- a/fboss/agent/test/link_tests/MacLearningTests.cpp +++ b/fboss/agent/test/link_tests/MacLearningTests.cpp @@ -6,15 +6,11 @@ #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/hw/test/LoadBalancerUtils.h" -#include "fboss/agent/state/AggregatePort.h" -#include "fboss/agent/state/Port.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/TestUtils.h" #include "fboss/agent/test/link_tests/LinkTest.h" #include "fboss/agent/test/utils/QosTestUtils.h" -#include "fboss/lib/CommonFileUtils.h" - using namespace ::testing; using namespace facebook::fboss; diff --git a/fboss/agent/test/link_tests/PhyInfoTest.cpp b/fboss/agent/test/link_tests/PhyInfoTest.cpp index e118ab462f554..e591a519ff4f1 100644 --- a/fboss/agent/test/link_tests/PhyInfoTest.cpp +++ b/fboss/agent/test/link_tests/PhyInfoTest.cpp @@ -46,6 +46,7 @@ void validateInterfaceAndMedium( {TransmitterTechnology::OPTICAL, { phy::InterfaceType::SR, + phy::InterfaceType::SR2, phy::InterfaceType::SR4, phy::InterfaceType::SR8, // Choice for optical profiles in @@ -69,6 +70,8 @@ void validateInterfaceAndMedium( phy::InterfaceType::KR2, phy::InterfaceType::KR4, phy::InterfaceType::KR8, + phy::InterfaceType::SR4, // Used on J3 serdes + phy::InterfaceType::SR8, // Used on J3 serdes // Results in backplane medium in // BcmPortUtils::getDesiredPhyLaneConfig phy::InterfaceType::CAUI4_C2C, diff --git a/fboss/agent/test/link_tests/PtpTests.cpp b/fboss/agent/test/link_tests/PtpTests.cpp index f7ac416d7a14a..a3b28b3b5ac71 100644 --- a/fboss/agent/test/link_tests/PtpTests.cpp +++ b/fboss/agent/test/link_tests/PtpTests.cpp @@ -4,17 +4,14 @@ #include #include "fboss/agent/PlatformPort.h" #include "fboss/agent/SwSwitch.h" -#include "fboss/agent/hw/test/HwTestEcmpUtils.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/packet/PTPHeader.h" -#include "fboss/agent/packet/PktUtil.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/link_tests/LinkTest.h" #include "fboss/agent/test/link_tests/LinkTestUtils.h" #include "fboss/agent/test/utils/PacketSnooper.h" #include "fboss/agent/test/utils/PacketTestUtils.h" #include "fboss/agent/test/utils/TrapPacketUtils.h" -#include "fboss/lib/CommonUtils.h" #include "common/process/Process.h" diff --git a/fboss/agent/test/production_features.thrift b/fboss/agent/test/production_features.thrift index 1e8a1a68e27e0..414fed7f4e12b 100644 --- a/fboss/agent/test/production_features.thrift +++ b/fboss/agent/test/production_features.thrift @@ -56,6 +56,9 @@ enum ProductionFeature { UDF_WR_IMMEDIATE_ACL = 43, VLAN = 44, PORT_MTU_ERROR_TRAP = 45, + LED_PROGRAMMING = 46, + PFC_CAPTURE = 47, + LINERATE_SFLOW = 48, # production feature which is present on all platforms, keep it at the end HW_SWITCH = 65536, } diff --git a/fboss/agent/test/soak_tests/BUCK b/fboss/agent/test/soak_tests/BUCK index 0f2aa0a8d21c3..ac7325c0c4ae6 100644 --- a/fboss/agent/test/soak_tests/BUCK +++ b/fboss/agent/test/soak_tests/BUCK @@ -14,7 +14,6 @@ cpp_library( exported_deps = [ "//common/process:process", "//fboss/agent:core", - "//fboss/agent:stats", "//fboss/agent/hw/test:config_factory", "//fboss/agent/hw/test:hw_packet_utils", "//fboss/agent/hw/test:load_balancer_utils", @@ -22,7 +21,6 @@ cpp_library( "//fboss/agent/state:state_utils", "//fboss/agent/test:agent_test", "//fboss/agent/test:utils", - "//folly:network_address", ], exported_external_deps = [ "gflags", diff --git a/fboss/agent/test/soak_tests/InterruptTest.cpp b/fboss/agent/test/soak_tests/InterruptTest.cpp index 837686c779701..ab5117d2d5610 100644 --- a/fboss/agent/test/soak_tests/InterruptTest.cpp +++ b/fboss/agent/test/soak_tests/InterruptTest.cpp @@ -2,13 +2,9 @@ #include "fboss/agent/test/soak_tests/InterruptTest.h" -#include #include -#include - #include "fboss/agent/SwSwitch.h" -#include "fboss/agent/SwitchStats.h" #include "fboss/agent/hw/test/ConfigFactory.h" #include "fboss/agent/hw/test/HwTestPacketUtils.h" #include "fboss/agent/hw/test/LoadBalancerUtils.h" @@ -18,8 +14,6 @@ #include "common/process/Process.h" -#include - namespace facebook::fboss { void InterruptTest::setUpPorts() { diff --git a/fboss/agent/test/utils/AclTestUtils.cpp b/fboss/agent/test/utils/AclTestUtils.cpp index 7c9353ced9d16..8ffbfda713a4b 100644 --- a/fboss/agent/test/utils/AclTestUtils.cpp +++ b/fboss/agent/test/utils/AclTestUtils.cpp @@ -21,7 +21,7 @@ DECLARE_bool(enable_acl_table_group); namespace facebook::fboss::utility { std::string kDefaultAclTable() { - return "AclTable1"; + return cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); } std::vector genAclQualifiersConfig( @@ -49,26 +49,24 @@ std::vector genAclQualifiersConfig( int getAclTableIndex( cfg::SwitchConfig* cfg, - const std::optional& tableName) { - if (!cfg->aclTableGroup()) { + const std::string& tableName, + const std::string& tableGroupName) { + auto aclTableGroup = getAclTableGroup(*cfg, tableGroupName); + if (!aclTableGroup) { throw FbossError( "Multiple acl tables flag enabled but config leaves aclTableGroup empty"); } - if (!tableName.has_value()) { - throw FbossError( - "Multiple acl tables flag enabled but no acl table name provided for add/delAcl()"); - } int tableIndex; - std::vector aclTables = *cfg->aclTableGroup()->aclTables(); + std::vector aclTables = *aclTableGroup->aclTables(); std::vector::iterator it = std::find_if( aclTables.begin(), aclTables.end(), [&](cfg::AclTable const& aclTable) { - return *aclTable.name() == tableName.value(); + return *aclTable.name() == tableName; }); if (it != aclTables.end()) { tableIndex = std::distance(aclTables.begin(), it); } else { throw FbossError( - "Table with name ", tableName.value(), " does not exist in config"); + "Table with name ", tableName, " does not exist in config"); } return tableIndex; } @@ -76,14 +74,14 @@ int getAclTableIndex( cfg::AclEntry* addAclEntry( cfg::SwitchConfig* cfg, cfg::AclEntry& acl, - const std::optional& tableName) { + const std::string& aclTableName) { if (FLAGS_enable_acl_table_group) { - auto aclTableName = - tableName.has_value() ? tableName.value() : kDefaultAclTable(); - int tableNumber = getAclTableIndex(cfg, aclTableName); - CHECK(cfg->aclTableGroup().has_value()); - cfg->aclTableGroup()->aclTables()[tableNumber].aclEntries()->push_back(acl); - return &cfg->aclTableGroup()->aclTables()[tableNumber].aclEntries()->back(); + auto aclTableGroup = getAclTableGroup(*cfg); + int tableNumber = + getAclTableIndex(cfg, aclTableName, *aclTableGroup->name()); + CHECK(aclTableGroup); + aclTableGroup->aclTables()[tableNumber].aclEntries()->push_back(acl); + return &aclTableGroup->aclTables()[tableNumber].aclEntries()->back(); } else { cfg->acls()->push_back(acl); return &cfg->acls()->back(); @@ -99,7 +97,10 @@ cfg::AclEntry* addAcl( *acl.name() = aclName; *acl.actionType() = aclActionType; - return addAclEntry(cfg, acl, tableName); + if (!tableName) { + return addAclEntry(cfg, acl, kDefaultAclTable()); + } + return addAclEntry(cfg, acl, *tableName); } void addEtherTypeToAcl( @@ -117,7 +118,8 @@ std::shared_ptr getAclEntryByName( std::shared_ptr swAcl; if (FLAGS_enable_acl_table_group) { auto aclMap = state->getAclsForTable( - cfg::AclStage::INGRESS, utility::kDefaultAclTable()); + cfg::AclStage::INGRESS, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()); if (aclMap) { swAcl = aclMap->getNodeIf(aclName); } @@ -140,19 +142,22 @@ std::optional getAclTrafficCounter( return std::nullopt; } -std::string getAclTableGroupName() { +std::string kDefaultAclTableGroupName() { return "acl-table-group-ingress"; } std::vector& getAcls( cfg::SwitchConfig* cfg, const std::optional& tableName) { - auto aclTableName = - tableName.has_value() ? tableName.value() : kDefaultAclTable(); + auto aclTableName = tableName.has_value() + ? tableName.value() + : cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(); if (FLAGS_enable_acl_table_group) { - CHECK(cfg->aclTableGroup()); - return *cfg->aclTableGroup() - ->aclTables()[getAclTableIndex(cfg, aclTableName)] + auto* aclTableGroup = getAclTableGroup(*cfg); + CHECK(aclTableGroup); + return *aclTableGroup + ->aclTables()[getAclTableIndex( + cfg, aclTableName, *aclTableGroup->name())] .aclEntries(); } return *cfg->acls(); @@ -182,16 +187,21 @@ void addAclTableGroup( cfg::AclStage aclStage, const std::string& aclTableGroupName) { cfg::AclTableGroup cfgTableGroup; - cfg->aclTableGroup() = cfgTableGroup; - cfg->aclTableGroup()->name() = aclTableGroupName; - cfg->aclTableGroup()->stage() = aclStage; + cfgTableGroup.name() = aclTableGroupName; + cfgTableGroup.stage() = aclStage; + cfg->aclTableGroups() = {std::move(cfgTableGroup)}; } void addDefaultAclTable(cfg::SwitchConfig& cfg) { /* Create default ACL table similar to whats being done in Agent today */ std::vector qualifiers = {}; std::vector actions = {}; - addAclTable(&cfg, kDefaultAclTable(), 0 /* priority */, actions, qualifiers); + addAclTable( + &cfg, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE(), + 0 /* priority */, + actions, + qualifiers); } cfg::AclTable* addAclTable( @@ -200,7 +210,8 @@ cfg::AclTable* addAclTable( const int aclTablePriority, const std::vector& actionTypes, const std::vector& qualifiers) { - if (!cfg->aclTableGroup()) { + auto aclTableGroup = getAclTableGroup(*cfg); + if (!aclTableGroup) { throw FbossError( "Attempted to add acl table without first creating acl table group"); } @@ -211,18 +222,19 @@ cfg::AclTable* addAclTable( aclTable.actionTypes() = actionTypes; aclTable.qualifiers() = qualifiers; - cfg->aclTableGroup()->aclTables()->push_back(aclTable); - return &cfg->aclTableGroup()->aclTables()->back(); + aclTableGroup->aclTables()->push_back(aclTable); + return &aclTableGroup->aclTables()->back(); } void delAclTable(cfg::SwitchConfig* cfg, const std::string& aclTableName) { - if (!cfg->aclTableGroup()) { + auto aclTableGroup = getAclTableGroup(*cfg); + if (!aclTableGroup) { throw FbossError( "Attempted to delete acl table (", aclTableName, ") from uninstantiated table group"); } - auto& aclTables = *cfg->aclTableGroup()->aclTables(); + auto& aclTables = *aclTableGroup->aclTables(); aclTables.erase( std::remove_if( aclTables.begin(), @@ -392,10 +404,34 @@ std::shared_ptr getAclEntry( bool enableAclTableGroup) { if (enableAclTableGroup) { return state - ->getAclsForTable(cfg::AclStage::INGRESS, utility::kDefaultAclTable()) + ->getAclsForTable( + cfg::AclStage::INGRESS, + cfg::switch_config_constants::DEFAULT_INGRESS_ACL_TABLE()) ->getNodeIf(name); } return state->getAcl(name); } +cfg::AclTableGroup* FOLLY_NULLABLE +getAclTableGroup(cfg::SwitchConfig& config, const std::string& name) { + if (!config.aclTableGroups()) { + return nullptr; + } + for (auto iter = config.aclTableGroups()->begin(); + iter != config.aclTableGroups()->end(); + iter++) { + if (iter->name_ref() == name) { + return std::addressof(*iter); + } + } + return nullptr; +} + +cfg::AclTableGroup* FOLLY_NULLABLE getAclTableGroup(cfg::SwitchConfig& config) { + if (!config.aclTableGroups() || + config.aclTableGroups()->begin() == config.aclTableGroups()->end()) { + return nullptr; + } + return (*config.aclTableGroups()).data(); +} } // namespace facebook::fboss::utility diff --git a/fboss/agent/test/utils/AclTestUtils.h b/fboss/agent/test/utils/AclTestUtils.h index c7a556ce6b283..9861a85e65c0e 100644 --- a/fboss/agent/test/utils/AclTestUtils.h +++ b/fboss/agent/test/utils/AclTestUtils.h @@ -32,7 +32,7 @@ std::string kDefaultAclTable(); cfg::AclEntry* addAclEntry( cfg::SwitchConfig* cfg, cfg::AclEntry& acl, - const std::optional& tableName); + const std::string& tableName); cfg::AclEntry* addAcl( cfg::SwitchConfig* cfg, @@ -50,7 +50,8 @@ std::vector genAclQualifiersConfig( int getAclTableIndex( cfg::SwitchConfig* cfg, - const std::optional& tableName); + const std::string& tableName, + const std::string& tableGroupName); std::shared_ptr getAclEntryByName( const std::shared_ptr state, @@ -60,7 +61,7 @@ std::optional getAclTrafficCounter( const std::shared_ptr state, const std::string& aclName); -std::string getAclTableGroupName(); +std::string kDefaultAclTableGroupName(); std::vector& getAcls( cfg::SwitchConfig* cfg, @@ -143,4 +144,9 @@ std::shared_ptr getAclEntry( const std::string& name, bool enableAclTableGroup); +cfg::AclTableGroup* FOLLY_NULLABLE +getAclTableGroup(cfg::SwitchConfig& config, const std::string& name); + +cfg::AclTableGroup* FOLLY_NULLABLE getAclTableGroup(cfg::SwitchConfig& config); + } // namespace facebook::fboss::utility diff --git a/fboss/agent/test/utils/AqmTestUtils.h b/fboss/agent/test/utils/AqmTestUtils.h index 9060ecc268191..12d235a745f90 100644 --- a/fboss/agent/test/utils/AqmTestUtils.h +++ b/fboss/agent/test/utils/AqmTestUtils.h @@ -16,7 +16,7 @@ namespace facebook::fboss { class HwAsic; class HwPortStats; class TestEnsembleIf; -class PortID; +struct PortID; namespace utility { int getRoundedBufferThreshold( diff --git a/fboss/agent/test/utils/BUCK b/fboss/agent/test/utils/BUCK index 454d13c7fffa4..6c5c3bd8e50fc 100644 --- a/fboss/agent/test/utils/BUCK +++ b/fboss/agent/test/utils/BUCK @@ -33,6 +33,7 @@ cpp_library( "//fboss/agent:hw_switch", "//fboss/agent:packet", "//fboss/agent:switch_config-cpp2-types", + "//fboss/agent:voq_utils", "//fboss/agent/hw:hardware_stats-cpp2-types", "//fboss/agent/hw/switch_asics:switch_asics", "//fboss/agent/packet:packet", @@ -107,12 +108,14 @@ cpp_library( ], headers = ["OlympicTestUtils.h"], exported_deps = [ - "fbcode//fboss/agent:fboss-error", - "fbcode//fboss/agent:switch_config-cpp2-types", - "fbcode//fboss/agent:utils", - "fbcode//fboss/agent/hw/switch_asics:switch_asics", - "fbcode//fboss/agent/test/utils:asic_test_utils", - "fbcode//fboss/agent/test/utils:traffic_policy_utils", + ":asic_test_utils", + ":traffic_policy_utils", + ":voq_test_utils", + "//fboss/agent:agent_features", + "//fboss/agent:fboss-error", + "//fboss/agent:switch_config-cpp2-types", + "//fboss/agent:utils", + "//fboss/agent/hw/switch_asics:switch_asics", ], ) @@ -131,6 +134,20 @@ cpp_library( ], ) +cpp_library( + name = "trunk_test_utils", + srcs = [ + "TrunkTestUtils.cpp", + ], + headers = ["TrunkTestUtils.h"], + exported_deps = [ + "//fboss/agent:fboss-types", + "//fboss/agent/if:agent_hw_test_ctrl-cpp2-services", + "//fboss/agent/state:state", + "//fboss/agent/test:agent_ensemble", + ], +) + cpp_library( name = "mac_test_utils", srcs = [ @@ -154,8 +171,8 @@ cpp_library( ":acl_test_utils", ":asic_test_utils", ":port_test_utils", + ":voq_test_utils", "//fboss/agent:agent_features", - "//fboss/agent:constants", "//fboss/agent:core", "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", @@ -451,7 +468,6 @@ cpp_library( "PfcTestUtils.h", ], exported_deps = [ - "fbsource//third-party/googletest:gtest", ":acl_test_utils", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:utils", @@ -503,11 +519,11 @@ cpp_library( "VoqTestUtils.h", ], exported_deps = [ - ":dsf_config_utils", + "//fboss/agent:agent_features", + "//fboss/agent:core", "//fboss/agent:fboss-types", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:switchid_scope_resolver", - "//fboss/agent/hw/test:config_factory", "//fboss/agent/state:state", "//fboss/agent/test:ecmp_helper", "//fboss/agent/test:test_ensemble_if", diff --git a/fboss/agent/test/utils/ConfigUtils.cpp b/fboss/agent/test/utils/ConfigUtils.cpp index 80fcba2ec31be..bd22748aaa11d 100644 --- a/fboss/agent/test/utils/ConfigUtils.cpp +++ b/fboss/agent/test/utils/ConfigUtils.cpp @@ -12,21 +12,22 @@ #include #include "fboss/agent/AgentFeatures.h" -#include "fboss/agent/Constants.h" #include "fboss/agent/FbossError.h" #include "fboss/agent/SwSwitch.h" #include "fboss/agent/test/TestEnsembleIf.h" #include "fboss/agent/test/utils/AclTestUtils.h" #include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/PortTestUtils.h" +#include "fboss/agent/test/utils/VoqTestUtils.h" #include "fboss/lib/config/PlatformConfigUtils.h" #include DEFINE_bool(nodeZ, false, "Setup test config as node Z"); +namespace facebook::fboss::utility { + namespace { -constexpr auto kSysPortOffset = 10; void removePort( facebook::fboss::cfg::SwitchConfig& config, facebook::fboss::PortID port, @@ -48,10 +49,41 @@ void removePort( cfgPort->state() = facebook::fboss::cfg::PortState::DISABLED; } } -} // namespace -namespace facebook::fboss::utility { +int getRdswSysPortBlockSize() { + // For dual stage 3/2q mode, sys ports are allocated in 2 blocks of 28 while + // for single state we allocate a single block of 44 + return isDualStage3Q2QMode() ? 28 : 44; +} +int getEdswSysPortBlockSize() { + // For dual stage 3/2q mode, sys ports are allocated in 2 blocks of 14 while + // for single state we allocate a single block of 26 + return isDualStage3Q2QMode() ? 14 : 26; +} +int getPerNodeSysPortsBlockSize(const HwAsic& asic, int remoteSwitchId) { + if (remoteSwitchId < getMaxRdsw() * asic.getNumCores()) { + return getRdswSysPortBlockSize(); + } + return getEdswSysPortBlockSize(); +} + +int getSysPortIdsAllocated( + const HwAsic& asic, + int remoteSwitchId, + int64_t firstSwitchIdMin) { + auto portsConsumed = firstSwitchIdMin; + auto deviceIndex = remoteSwitchId / asic.getNumCores(); + CHECK(asic.getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3); + if (deviceIndex < getMaxRdsw()) { + portsConsumed += deviceIndex * getRdswSysPortBlockSize() - 1; + } else { + portsConsumed += getMaxRdsw() * getRdswSysPortBlockSize() + + (deviceIndex - getMaxRdsw()) * getEdswSysPortBlockSize() - 1; + } + return portsConsumed; +} +} // namespace folly::MacAddress kLocalCpuMac() { static const folly::MacAddress kLocalMac( FLAGS_nodeZ ? "02:00:00:00:00:02" : "02:00:00:00:00:01"); @@ -62,40 +94,6 @@ std::string getLocalCpuMacStr() { return kLocalCpuMac().toString(); } -std::vector getDefaultVoqCfg() { - std::vector voqs; - - cfg::PortQueue defaultQueue; - defaultQueue.id() = 0; - defaultQueue.name() = "default"; - defaultQueue.streamType() = cfg::StreamType::UNICAST; - defaultQueue.scheduling() = cfg::QueueScheduling::INTERNAL; - voqs.push_back(defaultQueue); - - cfg::PortQueue rdmaQueue; - rdmaQueue.id() = 2; - rdmaQueue.name() = "rdma"; - rdmaQueue.streamType() = cfg::StreamType::UNICAST; - rdmaQueue.scheduling() = cfg::QueueScheduling::INTERNAL; - voqs.push_back(rdmaQueue); - - cfg::PortQueue monitoringQueue; - monitoringQueue.id() = 6; - monitoringQueue.name() = "monitoring"; - monitoringQueue.streamType() = cfg::StreamType::UNICAST; - monitoringQueue.scheduling() = cfg::QueueScheduling::INTERNAL; - voqs.push_back(monitoringQueue); - - cfg::PortQueue ncQueue; - ncQueue.id() = 7; - ncQueue.name() = "nc"; - ncQueue.streamType() = cfg::StreamType::UNICAST; - ncQueue.scheduling() = cfg::QueueScheduling::INTERNAL; - voqs.push_back(ncQueue); - - return voqs; -} - const std::map& kDefaultLoopbackMap() { static const std::map kLoopbackMap = { {cfg::PortType::INTERFACE_PORT, cfg::PortLoopbackMode::NONE}, @@ -209,13 +207,13 @@ std::unordered_map getSafeProfileIDs( } auto asicType = asic->getAsicType(); - bool isJericho2 = asicType == cfg::AsicType::ASIC_TYPE_JERICHO2; auto bestSpeed = cfg::PortSpeed::DEFAULT; - if (isJericho2) { - // For J2c we always want to choose the following - // speeds since that's what we have in hw chip config - // and J2c does not support dynamic port speed change yet. + if (asicType == cfg::AsicType::ASIC_TYPE_JERICHO3 && + FLAGS_dual_stage_rdsw_3q_2q) { + // When using dual_stage_rdsw_3q_2q mapping. Pick NIF port + // speed to be 400G, since that's what we have in chip config + // and J3 does not support dynamic port speed change yet. auto portId = group.first; auto platPortItr = platformMapping->getPlatformPorts().find(portId); if (platPortItr == platformMapping->getPlatformPorts().end()) { @@ -223,16 +221,12 @@ std::unordered_map getSafeProfileIDs( } switch (*platPortItr->second.mapping()->portType()) { case cfg::PortType::INTERFACE_PORT: - case cfg::PortType::MANAGEMENT_PORT: - bestSpeed = getDefaultInterfaceSpeed(asicType); + bestSpeed = cfg::PortSpeed::FOURHUNDREDG; break; case cfg::PortType::FABRIC_PORT: - bestSpeed = getDefaultFabricSpeed(asicType); - break; + case cfg::PortType::MANAGEMENT_PORT: case cfg::PortType::RECYCLE_PORT: case cfg::PortType::EVENTOR_PORT: - bestSpeed = cfg::PortSpeed::XG; - break; case cfg::PortType::CPU_PORT: break; } @@ -365,114 +359,102 @@ void securePortsInConfig( } } } + +int getMaxRdsw() { + return isDualStage3Q2QMode() ? 512 : 128; +} + +int getMaxEdsw() { + return isDualStage3Q2QMode() ? 128 : 16; +} + +int getLocalSystemPortOffset(const cfg::SystemPortRanges& ranges) { + // For 2q/3q mode, local sys port offset is -32K + // FIXME 2-stage-MTIA, offsets may be higher for 2nd ASIC + return isDualStage3Q2QMode() ? -32 * 1024 + : *ranges.systemPortRanges()->begin()->minimum(); +} + cfg::DsfNode dsfNodeConfig( const HwAsic& myAsic, int64_t otherSwitchId, - cfg::SystemPortRanges sysPortRanges, - const std::optional platformType) { - auto createAsic = [&](const HwAsic& fromAsic, int64_t switchId) - -> std::pair, PlatformType> { - std::optional systemPortRange; - auto fromAsicSystemPortRange = fromAsic.getSystemPortRange(); - if (fromAsicSystemPortRange.has_value()) { - cfg::Range64 range; - int numCores = fromAsic.getNumCores(); - auto blockSize = (*fromAsicSystemPortRange->maximum() - - *fromAsicSystemPortRange->minimum() + 1) / - numCores; - if (sysPortRanges.systemPortRanges()->size()) { - CHECK_EQ(sysPortRanges.systemPortRanges()->size(), 1) - << " Multiple sys port ranges per node are not supported yet in tests (TODO)"; - auto firstRange = *sysPortRanges.systemPortRanges()->begin(); - range.minimum() = kSysPortOffset + *firstRange.minimum(); - range.maximum() = kSysPortOffset + *firstRange.maximum(); - } else { - range.minimum() = kSysPortOffset + switchId * blockSize; - range.maximum() = *range.minimum() + numCores * blockSize - 1; - } - systemPortRange = range; + const std::optional platformType, + const std::optional clusterId) { + auto getPlatformType = [](const auto& asic, auto& platformType) { + if (platformType.has_value()) { + return *platformType; } - auto localMac = utility::kLocalCpuMac(); - switch (fromAsic.getAsicType()) { + switch (asic.getAsicType()) { case cfg::AsicType::ASIC_TYPE_JERICHO2: - return std::pair( - std::make_unique( - fromAsic.getSwitchType(), - switchId, - fromAsic.getSwitchIndex(), - systemPortRange, - localMac), - PlatformType::PLATFORM_MERU400BIU); - case cfg::AsicType::ASIC_TYPE_JERICHO3: { - auto fromPlatformType = platformType.has_value() - ? platformType.value() - : PlatformType::PLATFORM_MERU800BIA; - return std::pair( - std::make_unique( - fromAsic.getSwitchType(), - switchId, - fromAsic.getSwitchIndex(), - systemPortRange, - localMac), - fromPlatformType); - } + return PlatformType::PLATFORM_MERU400BIU; + case cfg::AsicType::ASIC_TYPE_JERICHO3: + return PlatformType::PLATFORM_MERU800BIA; case cfg::AsicType::ASIC_TYPE_RAMON: - return std::pair( - std::make_unique( - fromAsic.getSwitchType(), - switchId, - fromAsic.getSwitchIndex(), - std::nullopt, - localMac), - PlatformType::PLATFORM_MERU400BFU); + return PlatformType::PLATFORM_MERU400BFU; case cfg::AsicType::ASIC_TYPE_RAMON3: - return std::pair( - std::make_unique( - fromAsic.getSwitchType(), - switchId, - fromAsic.getSwitchIndex(), - std::nullopt, - localMac), - PlatformType::PLATFORM_MERU800BFA); - case cfg::AsicType::ASIC_TYPE_CHENAB: - return std::pair( - std::make_unique( - fromAsic.getSwitchType(), - switchId, - fromAsic.getSwitchIndex(), - std::nullopt, - localMac), - PlatformType::PLATFORM_YANGRA); + return PlatformType::PLATFORM_MERU800BFA; default: - throw FbossError("Unexpected asic type: ", fromAsic.getAsicTypeStr()); + break; } + throw FbossError("Unexpected asic type: ", asic.getAsicTypeStr()); + }; + auto getSystemPortRanges = [](const HwAsic& fromAsic, int64_t otherSwitchId) { + cfg::SystemPortRanges sysPortRanges; + CHECK(fromAsic.getSystemPortRanges().systemPortRanges()->size()); + CHECK(fromAsic.getSwitchId().has_value()); + CHECK_EQ(*fromAsic.getSwitchId(), 0) << " For VOQ switches input asic " + << " must be of the first VOQ switch"; + auto firstDsfNodeSysPortRanges = + *fromAsic.getSystemPortRanges().systemPortRanges(); + for (const auto& firstNodeRange : firstDsfNodeSysPortRanges) { + cfg::Range64 systemPortRange; + // Already allocated + 1 + systemPortRange.minimum() = + getSysPortIdsAllocated( + fromAsic, otherSwitchId, *firstNodeRange.minimum()) + + 1; + systemPortRange.maximum() = *systemPortRange.minimum() + + getPerNodeSysPortsBlockSize(fromAsic, otherSwitchId) - 1; + XLOG(DBG2) << " For switch Id: " << otherSwitchId + << " allocating range, min: " << *systemPortRange.minimum() + << " max: " << *systemPortRange.maximum(); + + sysPortRanges.systemPortRanges()->push_back(systemPortRange); + } + return sysPortRanges; }; - auto [otherAsic, otherPlatformType] = createAsic(myAsic, otherSwitchId); cfg::DsfNode dsfNode; - dsfNode.switchId() = *otherAsic->getSwitchId(); + dsfNode.switchId() = otherSwitchId; dsfNode.name() = folly::sformat("hwTestSwitch{}", *dsfNode.switchId()); - switch (otherAsic->getSwitchType()) { - case cfg::SwitchType::VOQ: + switch (myAsic.getSwitchType()) { + case cfg::SwitchType::VOQ: { dsfNode.type() = cfg::DsfNodeType::INTERFACE_NODE; - CHECK(otherAsic->getSystemPortRange().has_value()); - dsfNode.systemPortRange() = *otherAsic->getSystemPortRange(); - dsfNode.systemPortRanges()->systemPortRanges()->push_back( - dsfNode.systemPortRange().value()); + auto sysPortRanges = getSystemPortRanges(myAsic, otherSwitchId); + dsfNode.systemPortRanges() = sysPortRanges; + dsfNode.localSystemPortOffset() = getLocalSystemPortOffset(sysPortRanges); + // In single-stage sys port ranges, 0th port is reserved for CPU. + // For dual stage, no implicit reservation for 0th port, hence offset + // should be 1 less. + dsfNode.globalSystemPortOffset() = isDualStage3Q2QMode() + ? *sysPortRanges.systemPortRanges()->begin()->minimum() - 1 + : *sysPortRanges.systemPortRanges()->begin()->minimum(); + CHECK(myAsic.getInbandPortId().has_value()); + dsfNode.inbandPortId() = *myAsic.getInbandPortId(); dsfNode.nodeMac() = kLocalCpuMac().toString(); dsfNode.loopbackIps() = getLoopbackIps(SwitchID(*dsfNode.switchId())); - dsfNode.localSystemPortOffset() = *dsfNode.systemPortRange()->minimum(); - dsfNode.globalSystemPortOffset() = *dsfNode.systemPortRange()->minimum(); - dsfNode.inbandPortId() = kSingleStageInbandPortId; - break; + } break; case cfg::SwitchType::FABRIC: dsfNode.type() = cfg::DsfNodeType::FABRIC_NODE; break; case cfg::SwitchType::NPU: case cfg::SwitchType::PHY: - throw FbossError("Unexpected switch type: ", otherAsic->getSwitchType()); + throw FbossError("Unexpected switch type: ", myAsic.getSwitchType()); + } + dsfNode.asicType() = myAsic.getAsicType(); + dsfNode.platformType() = getPlatformType(myAsic, platformType); + if (clusterId.has_value()) { + dsfNode.clusterId() = clusterId.value(); } - dsfNode.asicType() = otherAsic->getAsicType(); - dsfNode.platformType() = otherPlatformType; return dsfNode; } @@ -654,6 +636,7 @@ cfg::SwitchConfig multiplePortsPerIntfConfig( addInterface( vlans[i], vlans[i], + // TODO(Chenab): Support port router interface cfg::InterfaceType::VLAN, setInterfaceMac, interfaceHasSubnet, @@ -722,7 +705,7 @@ cfg::SwitchConfig genPortVlanCfg( cfg::SwitchConfig config; if (FLAGS_enable_acl_table_group) { utility::addAclTableGroup( - &config, cfg::AclStage::INGRESS, utility::getAclTableGroupName()); + &config, cfg::AclStage::INGRESS, utility::kDefaultAclTableGroupName()); utility::addDefaultAclTable(config); } if (switchIdToSwitchInfo.has_value() && hwAsicTable.has_value()) { @@ -768,17 +751,15 @@ cfg::SwitchConfig genPortVlanCfg( asicType == cfg::AsicType::ASIC_TYPE_YUBA) { switchInfo.connectionHandle() = "/dev/uio0"; } - if (asic->getSystemPortRange().has_value()) { - switchInfo.systemPortRange() = *asic->getSystemPortRange(); - switchInfo.systemPortRanges()->systemPortRanges()->push_back( - *asic->getSystemPortRange()); - switchInfo.localSystemPortOffset() = - *asic->getSystemPortRange()->minimum(); - switchInfo.globalSystemPortOffset() = - *asic->getSystemPortRange()->minimum(); + switchInfo.systemPortRanges() = asic->getSystemPortRanges(); + if (asic->getLocalSystemPortOffset().has_value()) { + switchInfo.localSystemPortOffset() = *asic->getLocalSystemPortOffset(); } - if (switchType == cfg::SwitchType::VOQ) { - switchInfo.inbandPortId() = kSingleStageInbandPortId; + if (asic->getGlobalSystemPortOffset().has_value()) { + switchInfo.globalSystemPortOffset() = *asic->getGlobalSystemPortOffset(); + } + if (asic->getInbandPortId().has_value()) { + switchInfo.inbandPortId() = *asic->getInbandPortId(); } defaultSwitchIdToSwitchInfo.insert({SwitchID(switchId), switchInfo}); populateSwitchInfo( @@ -787,7 +768,14 @@ cfg::SwitchConfig genPortVlanCfg( auto switchType = asic->getSwitchType(); // VOQ config if (switchType == cfg::SwitchType::VOQ) { - config.defaultVoqConfig() = getDefaultVoqCfg(); + auto nameAndDefaultVoqCfg = + getNameAndDefaultVoqCfg(cfg::PortType::INTERFACE_PORT); + CHECK(nameAndDefaultVoqCfg.has_value()); + config.defaultVoqConfig() = nameAndDefaultVoqCfg->queueConfig; + auto cpuVoqConfigAndName = getNameAndDefaultVoqCfg(cfg::PortType::CPU_PORT); + if (cpuVoqConfigAndName) { + config.cpuVoqs() = cpuVoqConfigAndName->queueConfig; + } } // Use getPortToDefaultProfileIDMap() to genetate the default config instead @@ -844,6 +832,15 @@ cfg::SwitchConfig genPortVlanCfg( portCfg->state() = cfg::PortState::ENABLED; portCfg->ingressVlan() = port2vlan.find(portID)->second; portCfg->maxFrameSize() = kPortMTU; + if (switchType == cfg::SwitchType::VOQ && + *portCfg->portType() != cfg::PortType::INTERFACE_PORT) { + auto nameAndVoqConfig = getNameAndDefaultVoqCfg(*portCfg->portType()); + if (nameAndVoqConfig.has_value()) { + config.portQueueConfigs()[nameAndVoqConfig->name] = + nameAndVoqConfig->queueConfig; + portCfg->portVoqConfigName() = nameAndVoqConfig->name; + } + } } portCfg->routable() = true; portCfg->parserType() = cfg::ParserType::L3; @@ -896,9 +893,7 @@ void populateSwitchInfo( if (hwAsic->getSwitchType() == cfg::SwitchType::VOQ || hwAsic->getSwitchType() == cfg::SwitchType::FABRIC) { newDsfNodes.insert( - {switchId, - dsfNodeConfig( - *hwAsic, switchId, cfg::SystemPortRanges(), platformType)}); + {switchId, dsfNodeConfig(*hwAsic, switchId, platformType)}); } } config.switchSettings()->switchIdToSwitchInfo() = newSwitchIdToSwitchInfo; @@ -1064,6 +1059,7 @@ cfg::SwitchConfig twoL3IntfConfig( intf.mtu() = 9000; intf.routerID() = 0; intf.type() = switchType == cfg::SwitchType::NPU + // TODO(Chenab): Support port router interface ? cfg::InterfaceType::VLAN : cfg::InterfaceType::SYSTEM_PORT; if (switchType == cfg::SwitchType::VOQ) { diff --git a/fboss/agent/test/utils/ConfigUtils.h b/fboss/agent/test/utils/ConfigUtils.h index 79017a216196a..06aa9866b9fc8 100644 --- a/fboss/agent/test/utils/ConfigUtils.h +++ b/fboss/agent/test/utils/ConfigUtils.h @@ -69,11 +69,14 @@ bool isEnabledPortWithSubnet( std::vector getLoopbackIps(SwitchID switchId); +int getMaxRdsw(); +int getMaxEdsw(); + cfg::DsfNode dsfNodeConfig( const HwAsic& myAsic, int64_t otherSwitchId = 4, - cfg::SystemPortRanges = cfg::SystemPortRanges(), - const std::optional platformType = std::nullopt); + const std::optional platformType = std::nullopt, + const std::optional clusterId = std::nullopt); std::vector::iterator findCfgPort( cfg::SwitchConfig& cfg, diff --git a/fboss/agent/test/utils/CoppTestUtils.cpp b/fboss/agent/test/utils/CoppTestUtils.cpp index 894f37c76d31a..6152448799740 100644 --- a/fboss/agent/test/utils/CoppTestUtils.cpp +++ b/fboss/agent/test/utils/CoppTestUtils.cpp @@ -14,6 +14,7 @@ #include "fboss/agent/LldpManager.h" #include "fboss/agent/SwSwitch.h" #include "fboss/agent/TxPacket.h" +#include "fboss/agent/VoqUtils.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/packet/ICMPHdr.h" #include "fboss/agent/packet/PktFactory.h" @@ -296,6 +297,36 @@ void addCpuQueueConfig( cpuQueues.push_back(queue9); *config.cpuQueues() = cpuQueues; + + if (hwAsic->isSupported(HwAsic::Feature::VOQ)) { + std::vector cpuVoqs; + cfg::PortQueue voq0; + voq0.id() = kCoppLowPriQueueId; + voq0.name() = "cpuVoq-low"; + voq0.streamType() = getCpuDefaultStreamType(hwAsic); + voq0.scheduling() = cfg::QueueScheduling::INTERNAL; + voq0.maxDynamicSharedBytes() = kDnxCoppLowMaxDynamicSharedBytes; + cpuVoqs.push_back(voq0); + + cfg::PortQueue voq1; + voq1.id() = isDualStage3Q2QQos() ? 1 : getCoppMidPriQueueId({hwAsic}); + voq1.name() = "cpuVoq-mid"; + voq1.streamType() = getCpuDefaultStreamType(hwAsic); + voq1.scheduling() = cfg::QueueScheduling::INTERNAL; + voq1.maxDynamicSharedBytes() = kDnxCoppMidMaxDynamicSharedBytes; + cpuVoqs.push_back(voq1); + + cfg::PortQueue voq2; + voq2.id() = isDualStage3Q2QQos() + ? 2 + : getNumVoqs(cfg::PortType::CPU_PORT, cfg::Scope::LOCAL) - 1; + voq2.name() = "cpuVoq-high"; + voq2.streamType() = getCpuDefaultStreamType(hwAsic); + voq2.scheduling() = cfg::QueueScheduling::INTERNAL; + cpuVoqs.push_back(voq2); + + config.cpuVoqs() = cpuVoqs; + } } void setDefaultCpuTrafficPolicyConfig( @@ -306,7 +337,8 @@ void setDefaultCpuTrafficPolicyConfig( auto cpuAcls = utility::defaultCpuAcls(hwAsic, config, isSai); for (int i = 0; i < cpuAcls.size(); i++) { - utility::addAclEntry(&config, cpuAcls[i].first, std::nullopt); + utility::addAclEntry( + &config, cpuAcls[i].first, utility::kDefaultAclTable()); } // prepare cpu traffic config @@ -712,7 +744,7 @@ void setPortQueueSharedBytes(cfg::PortQueue& queue, bool isSai) { void setPortQueueMaxDynamicSharedBytes( cfg::PortQueue& queue, const HwAsic* hwAsic) { - if (hwAsic->isSupported(HwAsic::Feature::CPU_VOQ_BUFFER_PROFILE)) { + if (hwAsic->isSupported(HwAsic::Feature::VOQ)) { if (queue.id() == kCoppLowPriQueueId) { queue.maxDynamicSharedBytes() = kDnxCoppLowMaxDynamicSharedBytes; } else if (queue.id() == getCoppMidPriQueueId({hwAsic})) { diff --git a/fboss/agent/test/utils/DsfConfigUtils.cpp b/fboss/agent/test/utils/DsfConfigUtils.cpp index 7793cdd031dfc..304bca898f889 100644 --- a/fboss/agent/test/utils/DsfConfigUtils.cpp +++ b/fboss/agent/test/utils/DsfConfigUtils.cpp @@ -9,35 +9,22 @@ */ #include "fboss/agent/test/utils/DsfConfigUtils.h" +#include "fboss/agent/AgentFeatures.h" #include "fboss/agent/AsicUtils.h" #include "fboss/agent/test/utils/ConfigUtils.h" namespace facebook::fboss::utility { namespace { -constexpr auto kNumRdsw = 128; -constexpr auto kNumEdsw = 16; -constexpr auto kNumRdswSysPort = 44; -constexpr auto kNumEdswSysPort = 26; -constexpr auto kJ2NumSysPort = 20; -int getPerNodeSysPorts(const HwAsic& asic, int remoteSwitchId) { - if (asic.getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2) { - return kJ2NumSysPort; - } - if (remoteSwitchId < kNumRdsw * asic.getNumCores()) { - return kNumRdswSysPort; - } - return kNumEdswSysPort; -} -} // namespace +constexpr auto kRdswPerCluster = 128; +constexpr auto k2StageEdgePodClusterId = 201; -int getDsfNodeCount(const HwAsic& asic) { - return asic.getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO2 - ? kNumRdsw - : kNumRdsw + kNumEdsw; +int getDsfInterfaceNodeCount() { + return getMaxRdsw() + getMaxEdsw(); } +} // namespace std::optional> addRemoteIntfNodeCfg( const std::map& curDsfNodes, std::optional numRemoteNodes) { @@ -46,37 +33,78 @@ std::optional> addRemoteIntfNodeCfg( const auto& firstDsfNode = dsfNodes.begin()->second; CHECK(!firstDsfNode.systemPortRanges()->systemPortRanges()->empty()); CHECK(firstDsfNode.nodeMac().has_value()); - auto asic = HwAsic::makeAsic( - *firstDsfNode.asicType(), - cfg::SwitchType::VOQ, - *firstDsfNode.switchId(), - 0, - *firstDsfNode.systemPortRanges()->systemPortRanges()->begin(), - folly::MacAddress(*firstDsfNode.nodeMac()), - std::nullopt); - int numCores = asic->getNumCores(); + CHECK(firstDsfNode.localSystemPortOffset().has_value()); + CHECK(firstDsfNode.globalSystemPortOffset().has_value()); + CHECK(firstDsfNode.inbandPortId().has_value()); + CHECK_EQ(*firstDsfNode.switchId(), 0); + CHECK(*firstDsfNode.type() == cfg::DsfNodeType::INTERFACE_NODE); + cfg::SwitchInfo switchInfo; + switchInfo.asicType() = *firstDsfNode.asicType(); + switchInfo.switchType() = cfg::SwitchType::VOQ; + switchInfo.switchIndex() = 0; + switchInfo.switchMac() = *firstDsfNode.nodeMac(); + switchInfo.systemPortRanges() = *firstDsfNode.systemPortRanges(); + switchInfo.localSystemPortOffset() = *firstDsfNode.localSystemPortOffset(); + switchInfo.globalSystemPortOffset() = *firstDsfNode.globalSystemPortOffset(); + switchInfo.inbandPortId() = *firstDsfNode.inbandPortId(); + + auto myAsic = + HwAsic::makeAsic(*firstDsfNode.switchId(), switchInfo, std::nullopt); + + std::unique_ptr dualStageRdswAsic, dualStageEdswAsic; + // Update inbandPortId based on InterfaceNodeRole + if (isDualStage3Q2QMode()) { + cfg::SwitchInfo dualStageRdswInfo = switchInfo; + dualStageRdswInfo.inbandPortId() = + myAsic->getRecyclePortInfo(HwAsic::InterfaceNodeRole::IN_CLUSTER_NODE) + .inbandPortId; + dualStageRdswAsic = HwAsic::makeAsic( + *firstDsfNode.switchId(), dualStageRdswInfo, std::nullopt); + + cfg::SwitchInfo dualStageEdswInfo = switchInfo; + dualStageEdswInfo.inbandPortId() = + myAsic + ->getRecyclePortInfo( + HwAsic::InterfaceNodeRole::DUAL_STAGE_EDGE_NODE) + .inbandPortId; + dualStageEdswAsic = HwAsic::makeAsic( + *firstDsfNode.switchId(), dualStageEdswInfo, std::nullopt); + } + + int numCores = myAsic->getNumCores(); CHECK( !numRemoteNodes.has_value() || - numRemoteNodes.value() < getDsfNodeCount(*asic)); + numRemoteNodes.value() < getDsfInterfaceNodeCount()); int totalNodes = numRemoteNodes.has_value() ? numRemoteNodes.value() + curDsfNodes.size() - : getDsfNodeCount(*asic); - int remoteNodeStart = dsfNodes.rbegin()->first + numCores; - int systemPortMin = - getPerNodeSysPorts(*asic, dsfNodes.begin()->first) * curDsfNodes.size(); + : getDsfInterfaceNodeCount(); + auto lastDsfNode = dsfNodes.rbegin()->second; + int remoteNodeStart = *lastDsfNode.switchId() + numCores; + auto firstDsfNodeSysPortRanges = + *firstDsfNode.systemPortRanges()->systemPortRanges(); + for (int remoteSwitchId = remoteNodeStart; remoteSwitchId < totalNodes * numCores; remoteSwitchId += numCores) { - cfg::Range64 systemPortRange; - systemPortRange.minimum() = systemPortMin; - systemPortRange.maximum() = - systemPortMin + getPerNodeSysPorts(*asic, remoteSwitchId) - 1; - cfg::SystemPortRanges ranges; - ranges.systemPortRanges()->push_back(systemPortRange); + std::optional clusterId; + HwAsic& hwAsic = *myAsic; + if (isDualStage3Q2QMode()) { + if (remoteSwitchId < getMaxRdsw() * numCores) { + clusterId = remoteSwitchId / numCores / kRdswPerCluster; + CHECK(dualStageRdswAsic); + hwAsic = *dualStageRdswAsic; + } else { + clusterId = k2StageEdgePodClusterId; + CHECK(dualStageEdswAsic); + hwAsic = *dualStageEdswAsic; + } + } auto remoteDsfNodeCfg = dsfNodeConfig( - *asic, SwitchID(remoteSwitchId), ranges, *firstDsfNode.platformType()); + hwAsic, + SwitchID(remoteSwitchId), + *firstDsfNode.platformType(), + clusterId); dsfNodes.insert({remoteSwitchId, remoteDsfNodeCfg}); - systemPortMin = *systemPortRange.maximum() + 1; } return dsfNodes; } diff --git a/fboss/agent/test/utils/DsfConfigUtils.h b/fboss/agent/test/utils/DsfConfigUtils.h index 64607ebb3693d..d577501ca7fb9 100644 --- a/fboss/agent/test/utils/DsfConfigUtils.h +++ b/fboss/agent/test/utils/DsfConfigUtils.h @@ -7,11 +7,8 @@ namespace facebook::fboss::utility { -int getDsfNodeCount(const HwAsic* asic); - // Returns config with remote DSF node added. If numRemoteNodes is not -// specified, it will check the asic type and use max DSF node count -// (128 for J2 and 256 for J3). +// specified, it will check the asic type and use max DSF node count. std::optional> addRemoteIntfNodeCfg( const std::map& curDsfNodes, std::optional numRemoteNodes = std::nullopt); diff --git a/fboss/agent/test/utils/InvariantTestUtils.h b/fboss/agent/test/utils/InvariantTestUtils.h index 2db1d7d8a4b64..00faa0630092d 100644 --- a/fboss/agent/test/utils/InvariantTestUtils.h +++ b/fboss/agent/test/utils/InvariantTestUtils.h @@ -15,9 +15,9 @@ namespace facebook::fboss { class SwSwitch; class TestEnsembleIf; -class PortID; +struct PortID; class HwAsic; -class SwitchID; +struct SwitchID; class PortDescriptor; namespace utility { diff --git a/fboss/agent/test/utils/LoadBalancerTestRunner.h b/fboss/agent/test/utils/LoadBalancerTestRunner.h index 4ac699570cd48..f6bd3bd0d472f 100644 --- a/fboss/agent/test/utils/LoadBalancerTestRunner.h +++ b/fboss/agent/test/utils/LoadBalancerTestRunner.h @@ -300,7 +300,8 @@ class HwLoadBalancerTestRunner { auto cfg = getEnsemble()->getCurrentConfig(); if (preMode != cfg::SwitchingMode::FIXED_ASSIGNMENT) { cfg.udfConfig() = utility::addUdfFlowletAclConfig(); - utility::addFlowletConfigs(cfg, getMasterLogicalPortIds(), preMode); + utility::addFlowletConfigs( + cfg, getMasterLogicalPortIds(), getEnsemble()->isSai(), preMode); utility::addFlowletAcl(cfg); } getEnsemble()->applyNewConfig(cfg); @@ -321,7 +322,8 @@ class HwLoadBalancerTestRunner { getEnsemble(), getMasterLogicalPortIds()); if (postMode != cfg::SwitchingMode::FIXED_ASSIGNMENT) { cfg.udfConfig() = utility::addUdfFlowletAclConfig(); - utility::addFlowletConfigs(cfg, getMasterLogicalPortIds(), postMode); + utility::addFlowletConfigs( + cfg, getMasterLogicalPortIds(), getEnsemble()->isSai(), postMode); utility::addFlowletAcl(cfg); } getEnsemble()->applyNewConfig(cfg); diff --git a/fboss/agent/test/utils/LoadBalancerTestUtils.cpp b/fboss/agent/test/utils/LoadBalancerTestUtils.cpp index 846a9e4635196..a5184dd361d36 100644 --- a/fboss/agent/test/utils/LoadBalancerTestUtils.cpp +++ b/fboss/agent/test/utils/LoadBalancerTestUtils.cpp @@ -240,20 +240,30 @@ cfg::UdfConfig addUdfHashAclConfig(void) { } cfg::FlowletSwitchingConfig getDefaultFlowletSwitchingConfig( + bool isSai, cfg::SwitchingMode switchingMode) { cfg::FlowletSwitchingConfig flowletCfg; flowletCfg.inactivityIntervalUsecs() = 16; flowletCfg.flowletTableSize() = 2048; // set the egress load and queue exponent to zero for DLB engine // to do load balancing across all the links better with single stream - flowletCfg.dynamicEgressLoadExponent() = 0; - flowletCfg.dynamicQueueExponent() = 0; + // SAI has exponents 1 based while native BCM is 0 based + // SAI has sample rate in msec while native BCM is number of ticks + if (isSai) { + flowletCfg.dynamicEgressLoadExponent() = 1; + flowletCfg.dynamicQueueExponent() = 1; + flowletCfg.dynamicPhysicalQueueExponent() = 5; + flowletCfg.dynamicSampleRate() = 1; + } else { + flowletCfg.dynamicEgressLoadExponent() = 0; + flowletCfg.dynamicQueueExponent() = 0; + flowletCfg.dynamicPhysicalQueueExponent() = 4; + flowletCfg.dynamicSampleRate() = 1000000; + } flowletCfg.dynamicQueueMinThresholdBytes() = 1000; flowletCfg.dynamicQueueMaxThresholdBytes() = 10000; - flowletCfg.dynamicSampleRate() = 1000000; flowletCfg.dynamicEgressMinThresholdBytes() = 1000; flowletCfg.dynamicEgressMaxThresholdBytes() = 10000; - flowletCfg.dynamicPhysicalQueueExponent() = 4; flowletCfg.switchingMode() = switchingMode; return flowletCfg; } @@ -287,14 +297,19 @@ void addFlowletAcl( void addFlowletConfigs( cfg::SwitchConfig& cfg, const std::vector& ports, + bool isSai, cfg::SwitchingMode switchingMode) { cfg::FlowletSwitchingConfig flowletCfg = - utility::getDefaultFlowletSwitchingConfig(switchingMode); + utility::getDefaultFlowletSwitchingConfig(isSai, switchingMode); cfg.flowletSwitchingConfig() = flowletCfg; std::map portFlowletCfgMap; cfg::PortFlowletConfig portFlowletConfig; - portFlowletConfig.scalingFactor() = kScalingFactor; + if (isSai) { + portFlowletConfig.scalingFactor() = kScalingFactorSai; + } else { + portFlowletConfig.scalingFactor() = kScalingFactor; + } portFlowletConfig.loadWeight() = kLoadWeight; portFlowletConfig.queueWeight() = kQueueWeight; portFlowletCfgMap.insert(std::make_pair("default", portFlowletConfig)); @@ -437,7 +452,8 @@ size_t pumpRoCETraffic( int packetCount, uint8_t roceOpcode, uint8_t reserved, - std::optional> nxtHdr) { + std::optional> nxtHdr, + bool sameDstQueue) { folly::MacAddress srcMac( srcMacAddr.has_value() ? *srcMacAddr : MacAddressGenerator().get(dstMac.u64HBO() + 1)); @@ -456,7 +472,7 @@ size_t pumpRoCETraffic( // vary dst queues pair ids ONLY in the RoCE pkt // to verify that we can hash on it - int dstQueueIds = i; + int dstQueueIds = sameDstQueue ? 0 : i; // since dst queue pair id is in the middle of the packet // we need to keep front/end payload which doesn't vary rocePayload.push_back((dstQueueIds & 0x00ff0000) >> 16); diff --git a/fboss/agent/test/utils/LoadBalancerTestUtils.h b/fboss/agent/test/utils/LoadBalancerTestUtils.h index 143a4ba370574..731ed02ed3e6f 100644 --- a/fboss/agent/test/utils/LoadBalancerTestUtils.h +++ b/fboss/agent/test/utils/LoadBalancerTestUtils.h @@ -67,7 +67,8 @@ size_t pumpRoCETraffic( uint8_t roceOpcode = kUdfRoceOpcodeAck, uint8_t reserved = kRoceReserved, std::optional> nextHdr = - std::optional>()); + std::optional>(), + bool sameDstQueue = false); size_t pumpTrafficWithSourceFile( AllocatePktFunc allocateFn, @@ -177,6 +178,7 @@ bool isLoadBalanced( portStats, std::vector(), maxDeviationPct); } +inline const int kScalingFactorSai(10); inline const int kScalingFactor(100); inline const int kLoadWeight(70); inline const int kQueueWeight(30); @@ -193,6 +195,7 @@ cfg::UdfConfig addUdfFlowletAclConfig(); cfg::UdfConfig addUdfHashAclConfig(); cfg::FlowletSwitchingConfig getDefaultFlowletSwitchingConfig( + bool isSai, cfg::SwitchingMode switchingMode = cfg::SwitchingMode::FLOWLET_QUALITY); void addFlowletAcl( cfg::SwitchConfig& cfg, @@ -202,6 +205,7 @@ void addFlowletAcl( void addFlowletConfigs( cfg::SwitchConfig& cfg, const std::vector& ports, + bool isSai = false, cfg::SwitchingMode switchingMode = cfg::SwitchingMode::FLOWLET_QUALITY); cfg::LoadBalancer getTrunkHalfHashConfig( diff --git a/fboss/agent/test/utils/MirrorTestUtils.cpp b/fboss/agent/test/utils/MirrorTestUtils.cpp index f681b3ba86bcb..714b447492cdd 100644 --- a/fboss/agent/test/utils/MirrorTestUtils.cpp +++ b/fboss/agent/test/utils/MirrorTestUtils.cpp @@ -28,6 +28,15 @@ folly::IPAddress getSflowMirrorDestination(bool isV4) { : folly::IPAddress("2401:101:101::101"); } +folly::IPAddress getSflowMirrorSource(bool isV4) { + /* + * This is the source IP for sflow mirror packets. + * We will be supporting only v6 on future platforms. + */ + return isV4 ? folly::IPAddress("100.100.100.100") + : folly::IPAddress("2401::100"); +} + /* * This configures a local/erspan mirror session. * Adds a tunnel config if the mirrorname is erspan. @@ -78,13 +87,16 @@ void configureSflowMirror( const std::string& mirrorName, bool truncate, const std::string& destinationIp, - uint32_t udpDstPort) { + uint32_t udpSrcPort, + uint32_t udpDstPort, + bool isV4) { cfg::SflowTunnel sflowTunnel; sflowTunnel.ip() = destinationIp; - sflowTunnel.udpSrcPort() = 6545; + sflowTunnel.udpSrcPort() = udpSrcPort; sflowTunnel.udpDstPort() = udpDstPort; cfg::MirrorTunnel tunnel; + tunnel.srcIp() = getSflowMirrorSource(isV4).str(); tunnel.sflowTunnel() = sflowTunnel; cfg::MirrorDestination destination; diff --git a/fboss/agent/test/utils/MirrorTestUtils.h b/fboss/agent/test/utils/MirrorTestUtils.h index ae7ae40098a66..602ea50d59f65 100644 --- a/fboss/agent/test/utils/MirrorTestUtils.h +++ b/fboss/agent/test/utils/MirrorTestUtils.h @@ -51,13 +51,16 @@ void addMirrorConfig( uint8_t dscp = kDscpDefault); folly::IPAddress getSflowMirrorDestination(bool isV4); +folly::IPAddress getSflowMirrorSource(bool isV4); void configureSflowMirror( cfg::SwitchConfig& config, const std::string& mirrorName, bool truncate, const std::string& destinationIp, - uint32_t udpSrcPort = 6343); + uint32_t udpSrcPort = 6545, + uint32_t udpDstPort = 6343, + bool isV4 = false); void configureSflowSampling( cfg::SwitchConfig& config, diff --git a/fboss/agent/test/utils/OlympicTestUtils.cpp b/fboss/agent/test/utils/OlympicTestUtils.cpp index 0149b34486239..e24460b44be08 100644 --- a/fboss/agent/test/utils/OlympicTestUtils.cpp +++ b/fboss/agent/test/utils/OlympicTestUtils.cpp @@ -7,12 +7,15 @@ * of patent rights can be found in the PATENTS file in the same directory. * */ + #include "fboss/agent/test/utils/OlympicTestUtils.h" +#include "fboss/agent/AgentFeatures.h" #include "fboss/agent/FbossError.h" #include "fboss/agent/Utils.h" #include "fboss/agent/hw/switch_asics/HwAsic.h" #include "fboss/agent/test/utils/AsicUtils.h" #include "fboss/agent/test/utils/TrafficPolicyTestUtils.h" +#include "fboss/agent/test/utils/VoqTestUtils.h" namespace facebook::fboss::utility { @@ -270,6 +273,52 @@ cfg::ActiveQueueManagement kGetWredConfig( return wredAQM; } +int getTrafficClassToVoqId(const HwAsic* hwAsic, int trafficClass) { + if (hwAsic->isSupported(HwAsic::Feature::VOQ) && isDualStage3Q2QQos()) { + if (trafficClass == 7) { + // tc 7 -> nc voq 2 + return 2; + } else if (trafficClass == 2) { + // tc 2 -> rdma voq 0 + return 0; + } + // all other tc -> default voq 1 + return 1; + } + return trafficClass; +} + +int getTrafficClassToCpuVoqId(const HwAsic* hwAsic, int trafficClass) { + if (hwAsic->isSupported(HwAsic::Feature::VOQ) && isDualStage3Q2QQos()) { + if (trafficClass == 7) { + // tc 7 -> high queue 2 + return 2; + } else if (trafficClass == 3) { + // tc 3 -> mid queue 1 + return 1; + } + // all other tc -> low queue 0 + return 0; + } + return trafficClass; +} + +int getTrafficClassToEgressQueueId(const HwAsic* hwAsic, int trafficClass) { + if (isDualStage3Q2QQos()) { + if (trafficClass == 7) { + // tc 7 -> nc egq 7 + return 7; + } else if (trafficClass == 2) { + // tc 2 -> rdma egq 2 + return 2; + } + // all other tc -> default egq 6 + return 6; + } + // same one-to-one tc to queue mapping for other platforms + return trafficClass; +} + int getTrafficClassToCpuEgressQueueId(const HwAsic* hwAsic, int trafficClass) { if (hwAsic->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3) { // Jericho3 only has two egress queues for cpu port and recycle port @@ -348,9 +397,9 @@ void addQueueWredConfig( void addNetworkAIQueueConfig( cfg::SwitchConfig* config, - cfg::StreamType streamType) { + cfg::StreamType streamType, + const HwAsic* hwAsic) { std::vector portQueues; - cfg::PortQueue queue0; queue0.id() = getNetworkAIQueueId(NetworkAIQueueType::RDMA); queue0.name() = "queue2.rdma"; @@ -379,9 +428,13 @@ void addNetworkAIQueueConfig( queue3.scheduling() = cfg::QueueScheduling::STRICT_PRIORITY; portQueues.push_back(queue3); - config->portQueueConfigs()["queue_config"] = portQueues; - for (auto& port : *config->ports()) { - port.portQueueConfigName() = "queue_config"; + config->defaultPortQueues() = portQueues; + + if (hwAsic->getSwitchType() == cfg::SwitchType::VOQ) { + auto nameAndDefaultVoqCfg = + getNameAndDefaultVoqCfg(cfg::PortType::INTERFACE_PORT); + CHECK(nameAndDefaultVoqCfg.has_value()); + config->defaultVoqConfig() = nameAndDefaultVoqCfg->queueConfig; } } @@ -744,8 +797,9 @@ void addQosMapsHelper( } std::map tc2Voq; for (int q = 0; q <= kOlympicHighestSPQueueId; q++) { - tc2Voq.emplace(q, q); - qosMap.trafficClassToQueueId()->emplace(q, q); + tc2Voq.emplace(q, getTrafficClassToVoqId(hwAsic, q)); + qosMap.trafficClassToQueueId()->emplace( + q, getTrafficClassToEgressQueueId(hwAsic, q)); } if (hwAsic->isSupported(HwAsic::Feature::VOQ)) { qosMap.trafficClassToVoqId() = std::move(tc2Voq); @@ -765,6 +819,10 @@ void addQosMapsHelper( cpuQosMap.trafficClassToQueueId()->emplace( q, getTrafficClassToCpuEgressQueueId(hwAsic, q)); } + for (int q = 0; q <= kOlympicHighestSPQueueId; q++) { + cpuQosMap.trafficClassToVoqId()->emplace( + q, getTrafficClassToCpuVoqId(hwAsic, q)); + } cfg.qosPolicies()->resize(2); *cfg.qosPolicies()[1].name() = cpuQosPolicyName; cfg.qosPolicies()[1].qosMap() = cpuQosMap; diff --git a/fboss/agent/test/utils/OlympicTestUtils.h b/fboss/agent/test/utils/OlympicTestUtils.h index c4d39dd8ae63f..1768de5ee4c41 100644 --- a/fboss/agent/test/utils/OlympicTestUtils.h +++ b/fboss/agent/test/utils/OlympicTestUtils.h @@ -116,7 +116,8 @@ constexpr int kNetworkAIHighestQueueId = kNetworkAINCQueueId; void addNetworkAIQueueConfig( cfg::SwitchConfig* config, - cfg::StreamType streamType); + cfg::StreamType streamType, + const HwAsic* hwAsic); void addNetworkAIQosMaps( cfg::SwitchConfig& cfg, diff --git a/fboss/agent/test/utils/PfcTestUtils.cpp b/fboss/agent/test/utils/PfcTestUtils.cpp index 41081e64ff84a..2bc8e70dfe2b7 100644 --- a/fboss/agent/test/utils/PfcTestUtils.cpp +++ b/fboss/agent/test/utils/PfcTestUtils.cpp @@ -6,8 +6,6 @@ #include "fboss/agent/hw/gen-cpp2/hardware_stats_types.h" #include "fboss/agent/test/utils/AclTestUtils.h" -#include - namespace facebook::fboss::utility { namespace { @@ -90,7 +88,11 @@ void setupPfc( ->getHwAsics() .cbegin() ->second->getSwitchType() == cfg::SwitchType::VOQ) { - cfg::CPUTrafficPolicyConfig cpuPolicy; + // Start with the current CPU traffic policy, overwrite whats + // needed here, leave the rest as is! + cfg::CPUTrafficPolicyConfig cpuPolicy = cfg.cpuTrafficPolicy() + ? *cfg.cpuTrafficPolicy() + : cfg::CPUTrafficPolicyConfig(); const std::string kCpuQueueingPolicy{"cpuQp"}; cpuPolicy.trafficPolicy() = setupQosPolicy(true /*isCpuQosMap*/, kCpuQueueingPolicy); @@ -204,6 +206,15 @@ void setupPfcBuffers( setupBufferPoolConfig( bufferPoolCfgMap, buffer.globalShared, buffer.globalHeadroom); cfg.bufferPoolConfigs() = std::move(bufferPoolCfgMap); + if (ensemble->getHwAsicTable() + ->getHwAsics() + .cbegin() + ->second->getAsicType() == cfg::AsicType::ASIC_TYPE_JERICHO3) { + // For J3, set the SRAM global PFC thresholds as well + cfg.switchSettings()->sramGlobalFreePercentXoffThreshold() = 10; + cfg.switchSettings()->sramGlobalFreePercentXonThreshold() = 20; + cfg.switchSettings()->linkFlowControlCreditThreshold() = 99; + } } void addPuntPfcPacketAcl(cfg::SwitchConfig& cfg, uint16_t queueId) { diff --git a/fboss/agent/test/utils/QueuePerHostTestUtils.cpp b/fboss/agent/test/utils/QueuePerHostTestUtils.cpp index 2c7323ca55de5..bbcfcb27cd5ea 100644 --- a/fboss/agent/test/utils/QueuePerHostTestUtils.cpp +++ b/fboss/agent/test/utils/QueuePerHostTestUtils.cpp @@ -19,7 +19,6 @@ #include "fboss/agent/test/utils/ConfigUtils.h" #include "fboss/agent/test/utils/CoppTestUtils.h" #include "fboss/agent/test/utils/LoadBalancerTestUtils.h" -#include "fboss/agent/test/utils/QueuePerHostTestUtils.h" #include "fboss/agent/test/utils/TrafficPolicyTestUtils.h" #include "fboss/lib/CommonUtils.h" diff --git a/fboss/agent/test/utils/TrapPacketUtils.cpp b/fboss/agent/test/utils/TrapPacketUtils.cpp index c45f80a561598..ef497217f0f99 100644 --- a/fboss/agent/test/utils/TrapPacketUtils.cpp +++ b/fboss/agent/test/utils/TrapPacketUtils.cpp @@ -10,7 +10,7 @@ void addTrapPacketAcl(cfg::SwitchConfig* config, PortID port) { entry.name() = folly::to("trap-packet-", port); entry.srcPort() = port; entry.actionType() = cfg::AclActionType::PERMIT; - utility::addAclEntry(config, entry, std::nullopt); + utility::addAclEntry(config, entry, utility::kDefaultAclTable()); cfg::MatchAction action; action.sendToQueue() = cfg::QueueMatchAction(); @@ -56,7 +56,7 @@ void addTrapPacketAcl( entry.name() = folly::to("trap-", prefix.first.str()); entry.dstIp() = prefix.first.str(); entry.actionType() = cfg::AclActionType::PERMIT; - utility::addAclEntry(config, entry, std::nullopt); + utility::addAclEntry(config, entry, utility::kDefaultAclTable()); cfg::MatchAction action; action.sendToQueue() = cfg::QueueMatchAction(); @@ -100,7 +100,7 @@ void addTrapPacketAcl(cfg::SwitchConfig* config, uint16_t l4DstPort) { entry.name() = folly::to("trap-packet-", l4DstPort); entry.l4DstPort() = l4DstPort; entry.actionType() = cfg::AclActionType::PERMIT; - utility::addAclEntry(config, entry, std::nullopt); + utility::addAclEntry(config, entry, utility::kDefaultAclTable()); cfg::MatchAction action; action.sendToQueue() = cfg::QueueMatchAction(); diff --git a/fboss/agent/test/utils/TrunkTestUtils.cpp b/fboss/agent/test/utils/TrunkTestUtils.cpp new file mode 100644 index 0000000000000..39ac65623806b --- /dev/null +++ b/fboss/agent/test/utils/TrunkTestUtils.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2004-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#include "fboss/agent/test/utils/TrunkTestUtils.h" +#include + +#include "fboss/agent/if/gen-cpp2/AgentHwTestCtrl.h" +#include "fboss/agent/state/SwitchState.h" +#include "fboss/agent/test/AgentEnsemble.h" +#include "fboss/agent/types.h" + +namespace facebook::fboss::utility { +bool verifyAggregatePortMemberCount( + AgentEnsemble& ensemble, + AggregatePortID aggregatePortID, + uint8_t currentCount) { + auto aggPort = ensemble.getSw()->getState()->getAggregatePorts()->getNodeIf( + aggregatePortID); + if (!aggPort) { + return false; + } + auto client = ensemble.getHwAgentTestClient( + ensemble.getSw()->getScopeResolver()->scope(aggPort).switchId()); + const std::vector aggIds{aggregatePortID}; + std::vector aggPortInfos; + client->sync_getAggPortInfo(aggPortInfos, aggIds); + XLOG(DBG2) << "Total member count: " << *aggPortInfos[0].numMembers() + << "Active member count: " << *aggPortInfos[0].numActiveMembers(); + return currentCount == aggPortInfos[0].numActiveMembers(); +} + +int getAggregatePortCount(AgentEnsemble& ensemble) { + auto client = ensemble.getHwAgentTestClient( + ensemble.getSw() + ->getScopeResolver() + ->scope(ensemble.masterLogicalPortIds()[0]) + .switchId()); + return client->sync_getNumAggPorts(); +} + +bool verifyAggregatePort(AgentEnsemble& ensemble, AggregatePortID aggId) { + auto aggPort = + ensemble.getSw()->getState()->getAggregatePorts()->getNodeIf(aggId); + if (!aggPort) { + return false; + } + auto client = ensemble.getHwAgentTestClient( + ensemble.getSw()->getScopeResolver()->scope(aggPort).switchId()); + const std::vector aggIds{aggId}; + std::vector aggPortInfos; + client->sync_getAggPortInfo(aggPortInfos, aggIds); + return *aggPortInfos[0].isPresent(); +} + +bool verifyPktFromAggregatePort( + AgentEnsemble& ensemble, + AggregatePortID aggId) { + auto aggPort = + ensemble.getSw()->getState()->getAggregatePorts()->getNodeIf(aggId); + if (!aggPort) { + return false; + } + auto client = ensemble.getHwAgentTestClient( + ensemble.getSw()->getScopeResolver()->scope(aggPort).switchId()); + return client->sync_verifyPktFromAggPort(aggId); +} + +} // namespace facebook::fboss::utility diff --git a/fboss/agent/test/utils/TrunkTestUtils.h b/fboss/agent/test/utils/TrunkTestUtils.h new file mode 100644 index 0000000000000..aa464a08dcbad --- /dev/null +++ b/fboss/agent/test/utils/TrunkTestUtils.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2004-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#pragma once + +#include + +namespace facebook::fboss { + +class AgentEnsemble; +struct AggregatePortID; + +namespace utility { + +bool verifyAggregatePortMemberCount( + AgentEnsemble& ensemble, + AggregatePortID aggregatePortID, + uint8_t currentCount); + +int getAggregatePortCount(AgentEnsemble& ensemble); +bool verifyAggregatePort(AgentEnsemble& ensemble, AggregatePortID aggId); +bool verifyPktFromAggregatePort(AgentEnsemble& ensemble, AggregatePortID aggId); + +} // namespace utility +} // namespace facebook::fboss diff --git a/fboss/agent/test/utils/VoqTestUtils.cpp b/fboss/agent/test/utils/VoqTestUtils.cpp index e97bed74d983c..36d65c1772d19 100644 --- a/fboss/agent/test/utils/VoqTestUtils.cpp +++ b/fboss/agent/test/utils/VoqTestUtils.cpp @@ -9,7 +9,9 @@ */ #include "fboss/agent/test/utils/VoqTestUtils.h" -#include "fboss/agent/hw/test/ConfigFactory.h" +#include "fboss/agent/AgentFeatures.h" +#include "fboss/agent/DsfStateUpdaterUtil.h" +#include "fboss/agent/SwSwitch.h" #include "fboss/agent/test/TestEnsembleIf.h" namespace facebook::fboss::utility { @@ -20,6 +22,9 @@ constexpr auto kNumPortPerCore = 10; // 7: mgm port, 8-43 front panel nif constexpr auto kRemoteSysPortOffset = 7; constexpr auto kNumVoq = 8; +constexpr auto k3q2qNumVoq = 3; +constexpr auto kNumRdswSysPort = 44; +constexpr auto kNumEdswSysPort = 26; std::shared_ptr makeRemoteSysPort( SystemPortID portId, @@ -32,7 +37,8 @@ std::shared_ptr makeRemoteSysPort( remoteSysPort->setName(folly::to( "hwTestSwitch", remoteSwitchId, ":eth/", portId, "/1")); remoteSysPort->setSwitchId(remoteSwitchId); - remoteSysPort->setNumVoqs(kNumVoq); + // TODO(zecheng): NIF MGMT port for 3q2q mode should have 2 VOQ + remoteSysPort->setNumVoqs(isDualStage3Q2QMode() ? k3q2qNumVoq : kNumVoq); remoteSysPort->setCoreIndex(coreIndex); remoteSysPort->setCorePortIndex(corePortIndex); remoteSysPort->setSpeedMbps(speed); @@ -80,6 +86,114 @@ void updateRemoteIntfWithNeighbor( ndpTable->emplace(neighborIp.str(), std::move(ndp)); remoteIntf->setNdpTable(ndpTable->toThrift()); } + +std::vector getDefaultNifVoqCfg() { + std::vector voqs; + if (isDualStage3Q2QQos()) { + cfg::PortQueue rdmaQueue; + rdmaQueue.id() = 0; + rdmaQueue.name() = "rdma"; + rdmaQueue.streamType() = cfg::StreamType::UNICAST; + rdmaQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(rdmaQueue); + + cfg::PortQueue monitoringQueue; + monitoringQueue.id() = 1; + monitoringQueue.name() = "monitoring"; + monitoringQueue.streamType() = cfg::StreamType::UNICAST; + monitoringQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(monitoringQueue); + + cfg::PortQueue ncQueue; + ncQueue.id() = 2; + ncQueue.name() = "nc"; + ncQueue.streamType() = cfg::StreamType::UNICAST; + ncQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(ncQueue); + } else { + cfg::PortQueue defaultQueue; + defaultQueue.id() = 0; + defaultQueue.name() = "default"; + defaultQueue.streamType() = cfg::StreamType::UNICAST; + defaultQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(defaultQueue); + + cfg::PortQueue rdmaQueue; + rdmaQueue.id() = 2; + rdmaQueue.name() = "rdma"; + rdmaQueue.streamType() = cfg::StreamType::UNICAST; + rdmaQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(rdmaQueue); + + cfg::PortQueue monitoringQueue; + monitoringQueue.id() = 6; + monitoringQueue.name() = "monitoring"; + monitoringQueue.streamType() = cfg::StreamType::UNICAST; + monitoringQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(monitoringQueue); + + cfg::PortQueue ncQueue; + ncQueue.id() = 7; + ncQueue.name() = "nc"; + ncQueue.streamType() = cfg::StreamType::UNICAST; + ncQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(ncQueue); + } + return voqs; +} + +std::vector get2VoqCfg() { + std::vector voqs; + cfg::PortQueue lowQueue; + lowQueue.id() = 0; + lowQueue.name() = "low"; + lowQueue.streamType() = cfg::StreamType::UNICAST; + lowQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(lowQueue); + + cfg::PortQueue highQueue; + highQueue.id() = 1; + highQueue.name() = "high"; + highQueue.streamType() = cfg::StreamType::UNICAST; + highQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(highQueue); + return voqs; +} + +std::vector get3VoqCfg() { + std::vector voqs; + cfg::PortQueue lowQueue; + lowQueue.id() = 0; + lowQueue.name() = "low"; + lowQueue.streamType() = cfg::StreamType::UNICAST; + lowQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(lowQueue); + + cfg::PortQueue midQueue; + midQueue.id() = 1; + midQueue.name() = "mid"; + midQueue.streamType() = cfg::StreamType::UNICAST; + midQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(midQueue); + + cfg::PortQueue highQueue; + highQueue.id() = 2; + highQueue.name() = "high"; + highQueue.streamType() = cfg::StreamType::UNICAST; + highQueue.scheduling() = cfg::QueueScheduling::INTERNAL; + voqs.push_back(highQueue); + return voqs; +} + +std::shared_ptr makeSwitchStateVoq(const cfg::PortQueue& cfgQueue) { + auto queue = + std::make_shared(static_cast(cfgQueue.id().value())); + queue->setStreamType(cfgQueue.streamType().value()); + queue->setScheduling(cfgQueue.scheduling().value()); + queue->setName(cfgQueue.name().value()); + queue->setScalingFactor(cfg::MMUScalingFactor::ONE_32768TH); + return queue; +} } // namespace std::shared_ptr addRemoteSysPort( @@ -185,7 +299,9 @@ void populateRemoteIntfAndSysPorts( for (auto sysPortRange : *dsfNode.systemPortRanges()->systemPortRanges()) { const auto minPortID = *sysPortRange.minimum(); const auto maxPortID = *sysPortRange.maximum(); - // 0th port for CPU and 1st port for recycle port + // TODO(zecheng): Update num of ports for dual stage + const auto numPorts = maxPortID - minPortID + 1; + CHECK(numPorts == kNumRdswSysPort || numPorts == kNumEdswSysPort); for (int i = minPortID + kRemoteSysPortOffset; i <= maxPortID; i++) { const SystemPortID remoteSysPortId(i); const InterfaceID remoteIntfId(i); @@ -201,12 +317,16 @@ void populateRemoteIntfAndSysPorts( auto thirdOctet = i - minPortID; folly::IPAddressV6 neighborIp(folly::to( firstOctet, ":", secondOctet, ":", thirdOctet, "::2")); + auto portSpeed = i == minPortID + kRemoteSysPortOffset + ? cfg::PortSpeed::HUNDREDG + : numPorts == kNumRdswSysPort ? cfg::PortSpeed::FOURHUNDREDG + : cfg::PortSpeed::EIGHTHUNDREDG; auto remoteSysPort = makeRemoteSysPort( remoteSysPortId, SwitchID(remoteSwitchId), (i - minPortID - kRemoteSysPortOffset) / kNumPortPerCore, (i - minPortID) % kNumPortPerCore, - static_cast(cfg::PortSpeed::FOURHUNDREDG)); + static_cast(portSpeed)); remoteSysPorts->addSystemPort(remoteSysPort); auto remoteRif = makeRemoteInterface( @@ -232,35 +352,13 @@ void populateRemoteIntfAndSysPorts( QueueConfig getDefaultVoqConfig() { QueueConfig queueCfg; - - auto defaultQueue = std::make_shared(static_cast(0)); - defaultQueue->setStreamType(cfg::StreamType::UNICAST); - defaultQueue->setScheduling(cfg::QueueScheduling::INTERNAL); - defaultQueue->setName("default"); - defaultQueue->setScalingFactor(cfg::MMUScalingFactor::ONE_32768TH); - queueCfg.push_back(defaultQueue); - - auto rdmaQueue = std::make_shared(static_cast(2)); - rdmaQueue->setStreamType(cfg::StreamType::UNICAST); - rdmaQueue->setScheduling(cfg::QueueScheduling::INTERNAL); - rdmaQueue->setName("rdma"); - defaultQueue->setScalingFactor(cfg::MMUScalingFactor::ONE_32768TH); - queueCfg.push_back(rdmaQueue); - - auto monitoringQueue = std::make_shared(static_cast(6)); - monitoringQueue->setStreamType(cfg::StreamType::UNICAST); - monitoringQueue->setScheduling(cfg::QueueScheduling::INTERNAL); - monitoringQueue->setName("monitoring"); - defaultQueue->setScalingFactor(cfg::MMUScalingFactor::ONE_32768TH); - queueCfg.push_back(monitoringQueue); - - auto ncQueue = std::make_shared(static_cast(7)); - ncQueue->setStreamType(cfg::StreamType::UNICAST); - ncQueue->setScheduling(cfg::QueueScheduling::INTERNAL); - ncQueue->setName("nc"); - defaultQueue->setScalingFactor(cfg::MMUScalingFactor::ONE_32768TH); - queueCfg.push_back(ncQueue); - + // TODO: One port should be mgt port with 2 queues in 3Q2Q mode + auto nameAndDefaultVoq = + getNameAndDefaultVoqCfg(cfg::PortType::INTERFACE_PORT); + CHECK(nameAndDefaultVoq); + for (const auto& cfgQueue : nameAndDefaultVoq.value().queueConfig) { + queueCfg.push_back(makeSwitchStateVoq(cfgQueue)); + } return queueCfg; } @@ -294,4 +392,50 @@ boost::container::flat_set resolveRemoteNhops( return sysPortDescs; } +void setupRemoteIntfAndSysPorts(SwSwitch* swSwitch, bool useEncapIndex) { + auto updateDsfStateFn = + [swSwitch, useEncapIndex](const std::shared_ptr& in) { + std::map> switchId2SystemPorts; + std::map> switchId2Rifs; + utility::populateRemoteIntfAndSysPorts( + switchId2SystemPorts, + switchId2Rifs, + swSwitch->getConfig(), + useEncapIndex); + return DsfStateUpdaterUtil::getUpdatedState( + in, + swSwitch->getScopeResolver(), + swSwitch->getRib(), + switchId2SystemPorts, + switchId2Rifs); + }; + swSwitch->getRib()->updateStateInRibThread([swSwitch, updateDsfStateFn]() { + swSwitch->updateStateWithHwFailureProtection( + folly::sformat("Update state for node: {}", 0), updateDsfStateFn); + }); +} + +std::optional getNameAndDefaultVoqCfg( + cfg::PortType portType) { + switch (portType) { + case cfg::PortType::INTERFACE_PORT: + return QueueConfigAndName{"defaultVoqCofig", getDefaultNifVoqCfg()}; + case cfg::PortType::CPU_PORT: + if (isDualStage3Q2QMode()) { + return QueueConfigAndName{"3VoqConfig", get3VoqCfg()}; + } + break; + case cfg::PortType::MANAGEMENT_PORT: + case cfg::PortType::RECYCLE_PORT: + case cfg::PortType::EVENTOR_PORT: + if (isDualStage3Q2QMode()) { + return QueueConfigAndName{"2VoqConfig", get2VoqCfg()}; + } + break; + case cfg::PortType::FABRIC_PORT: + XLOG(FATAL) << " No VOQ configs for fabric ports"; + break; + } + return std::nullopt; +} } // namespace facebook::fboss::utility diff --git a/fboss/agent/test/utils/VoqTestUtils.h b/fboss/agent/test/utils/VoqTestUtils.h index fdedb0c10894a..008106fe2250d 100644 --- a/fboss/agent/test/utils/VoqTestUtils.h +++ b/fboss/agent/test/utils/VoqTestUtils.h @@ -6,11 +6,11 @@ #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/agent/state/SwitchState.h" #include "fboss/agent/test/EcmpSetupHelper.h" -#include "fboss/agent/test/utils/DsfConfigUtils.h" #include "fboss/agent/types.h" namespace facebook::fboss { class TestEnsembleIf; +class SwSwitch; namespace utility { @@ -59,5 +59,13 @@ void populateRemoteIntfAndSysPorts( const cfg::SwitchConfig& config, bool useEncapIndex); +void setupRemoteIntfAndSysPorts(SwSwitch* swSwitch, bool useEncapIndex); + +struct QueueConfigAndName { + std::string name; + std::vector queueConfig; +}; +std::optional getNameAndDefaultVoqCfg( + cfg::PortType portType); } // namespace utility } // namespace facebook::fboss diff --git a/fboss/agent/tools/fboss_route.py b/fboss/agent/tools/fboss_route.py index caf8d2affc8bf..407fb60fdad03 100644 --- a/fboss/agent/tools/fboss_route.py +++ b/fboss/agent/tools/fboss_route.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 # Copyright (C) 2004-present Facebook. All Rights Reserved +# pyre-unsafe + import contextlib import socket from argparse import ArgumentParser diff --git a/fboss/agent/tools/send_pkt.py b/fboss/agent/tools/send_pkt.py index 605a55a5249b2..0b836b81b4a2e 100644 --- a/fboss/agent/tools/send_pkt.py +++ b/fboss/agent/tools/send_pkt.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 # Copyright 2004-present Facebook. All Rights Reserved. +# pyre-unsafe + import argparse import binascii import re diff --git a/fboss/agent/wiki/static_docs/docs/intro.md b/fboss/agent/wiki/static_docs/docs/intro.md index e3a15271a225f..4a506f170db73 100644 --- a/fboss/agent/wiki/static_docs/docs/intro.md +++ b/fboss/agent/wiki/static_docs/docs/intro.md @@ -37,7 +37,7 @@ Also, now that this is set up with some magic fb internal plugins, there is no n # Static Docs: Contributing ## Contributing through Code -All our wiki pages are hosted under ~/fbsource/fbcode/fboss/agent/wiki/static_docs/docs/. +All our wiki pages are hosted under ~/fbsource/fbcode/fboss/agent/wiki/static_docs/docs/. * Depending on where you want the wiki to be placed under in the sidebar, choose the appropriate folder * Once selected, create a new MDX file under the directory for OSS page or under fb/ for closed source page * Once you created the new MDX page, refer to the instructions below to setup your devserver to view the changes @@ -106,11 +106,6 @@ Compile the documentation and start a local development server: yarn start ``` -If you want to use `npm` to deploy and serve your content instead of `yarn`, run: -```bash -npm run serve -``` - You can preview the pages at http://localhost:3000. Most changes will be reflected live without having to restart this server. diff --git a/fboss/bcm_wrapper/code_gen/BUCK b/fboss/bcm_wrapper/code_gen/BUCK deleted file mode 100644 index 36ce4bc37e992..0000000000000 --- a/fboss/bcm_wrapper/code_gen/BUCK +++ /dev/null @@ -1,34 +0,0 @@ -load("@fbcode_macros//build_defs:cpp_binary.bzl", "cpp_binary") -load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library") - -cpp_library( - name = "libheader_to_thrift", - srcs = [ - "HeaderParser.cpp", - "ThriftIDL.cpp", - ], - exported_deps = [ - "//folly:format", - "//folly:string", - ], - exported_external_deps = [ - ("boost", None, "boost_variant"), - ("llvm-fb", None, "clangASTMatchers"), - ("llvm-fb", None, "clangFrontend"), - ("llvm-fb", None, "clangTooling"), - ], -) - -cpp_binary( - name = "header_to_thrift", - srcs = [ - "HeaderToThrift.cpp", - ], - deps = [ - ":libheader_to_thrift", - ], - external_deps = [ - ("llvm-fb", None, "LLVMSupport"), - ("llvm-fb", None, "clangTooling"), - ], -) diff --git a/fboss/bcm_wrapper/code_gen/HeaderParser.cpp b/fboss/bcm_wrapper/code_gen/HeaderParser.cpp deleted file mode 100644 index c326e7f0c02b4..0000000000000 --- a/fboss/bcm_wrapper/code_gen/HeaderParser.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ -#include "HeaderParser.h" - -#include - -namespace facebook { -namespace fboss { - -const clang::ast_matchers::DeclarationMatcher& -HeaderParser::recordDeclMatcher() { - static const clang::ast_matchers::DeclarationMatcher matcher = - clang::ast_matchers::recordDecl().bind("rd"); - return matcher; -} - -const clang::ast_matchers::DeclarationMatcher& HeaderParser::enumDeclMatcher() { - static const clang::ast_matchers::DeclarationMatcher matcher = - clang::ast_matchers::enumDecl().bind("ed"); - return matcher; -} - -const clang::ast_matchers::DeclarationMatcher& -HeaderParser::functionDeclMatcher() { - static const clang::ast_matchers::DeclarationMatcher matcher = - clang::ast_matchers::functionDecl().bind("fd"); - return matcher; -} - -HeaderParser::HeaderParser() - : file_(std::make_unique("BcmWrapper")) {} - -void HeaderParser::run( - const clang::ast_matchers::MatchFinder::MatchResult& result) { - // Parse structs, unions, and class declarations - const clang::RecordDecl* rd = result.Nodes.getNodeAs("rd"); - if (rd) { - try { - file_->addStruct(std::make_unique(*rd)); - } catch (const std::exception&) { - // TODO(borisb): this case should generate thrift comments calling for - // manual code that needs to be written. - } - return; - } - // Parse enum declarations - const clang::EnumDecl* ed = result.Nodes.getNodeAs("ed"); - if (ed) { - file_->addEnum(std::make_unique(*ed)); - return; - } - // Parse function declarations - const clang::FunctionDecl* fd = - result.Nodes.getNodeAs("fd"); - if (fd) { - try { - auto tm = std::make_unique(*fd); - auto ts = std::make_unique(*fd); - if (ts->hasFields()) { - tm->resultTypeName = ts->name; - file_->addStruct(std::move(ts)); - } - file_->addMethod(std::move(tm)); - } catch (const std::exception&) { - // TODO(borisb): this case should generate thrift comments calling for - // manual code that needs to be written. - } - return; - } -} - -std::string HeaderParser::getThrift() const { - return file_->getThrift(); -}; - -} // namespace fboss -} // namespace facebook diff --git a/fboss/bcm_wrapper/code_gen/HeaderParser.h b/fboss/bcm_wrapper/code_gen/HeaderParser.h deleted file mode 100644 index fe9675095d51d..0000000000000 --- a/fboss/bcm_wrapper/code_gen/HeaderParser.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#pragma once - -#include -#include - -#include -#include -#include -#include - -#include "ThriftIDL.h" - -namespace facebook { -namespace fboss { -/* - * This class implements the visitor function that we run on matching nodes in - * the clang AST. It also owns the matchers we use to determine whether to run - * on a node or not. Currently, we visit record (class, union, struct) - * declarations, enum declarations and function declarations. - * - * As we visit those declarations, we populate objects which represent ThrifIDL - * objects corresponding to those declarations which we can finally use to - * output thrift corresponding to the processed header file. - */ -class HeaderParser : public clang::ast_matchers::MatchFinder::MatchCallback { - public: - HeaderParser(); - void run( - const clang::ast_matchers::MatchFinder::MatchResult& result) override; - // matcher for structs, unions, and classes - static const clang::ast_matchers::DeclarationMatcher& recordDeclMatcher(); - // matcher for enums - static const clang::ast_matchers::DeclarationMatcher& enumDeclMatcher(); - // matcher for functions - static const clang::ast_matchers::DeclarationMatcher& functionDeclMatcher(); - // return the the thrift code we have generated while processing the header - std::string getThrift() const; - - private: - // These will store the generated Thrift IDL objects we parse as we go. - // We need to store because functions will result in methods (the function - // itself) and structs (the return type) so we have to write out the file - // at the end rather than as we go. - std::unique_ptr file_; -}; -} // namespace fboss -} // namespace facebook diff --git a/fboss/bcm_wrapper/code_gen/HeaderToThrift.cpp b/fboss/bcm_wrapper/code_gen/HeaderToThrift.cpp deleted file mode 100644 index ca646e85c344f..0000000000000 --- a/fboss/bcm_wrapper/code_gen/HeaderToThrift.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ -#include "HeaderParser.h" - -#include -#include -#include - -static llvm::cl::extrahelp commonHelp( - clang::tooling::CommonOptionsParser::HelpMessage); -static llvm::cl::OptionCategory headerToThriftCategory( - "HeaderToThrift options"); - -int main(int argc, char** argv) { - clang::tooling::CommonOptionsParser optionsParser( - argc, const_cast(argv), headerToThriftCategory); - clang::tooling::ClangTool tool( - optionsParser.getCompilations(), optionsParser.getSourcePathList()); - facebook::fboss::HeaderParser hp; - clang::ast_matchers::MatchFinder mf; - mf.addMatcher(facebook::fboss::HeaderParser::recordDeclMatcher(), &hp); - mf.addMatcher(facebook::fboss::HeaderParser::enumDeclMatcher(), &hp); - mf.addMatcher(facebook::fboss::HeaderParser::functionDeclMatcher(), &hp); - tool.run(clang::tooling::newFrontendActionFactory(&mf).get()); - llvm::outs() << hp.getThrift() << "\n"; -} diff --git a/fboss/bcm_wrapper/code_gen/ThriftIDL.cpp b/fboss/bcm_wrapper/code_gen/ThriftIDL.cpp deleted file mode 100644 index ef86c55a00a9e..0000000000000 --- a/fboss/bcm_wrapper/code_gen/ThriftIDL.cpp +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ -#include "ThriftIDL.h" - -#include -#include - -#include -#include - -namespace { -// struct_name -> structName -void snakeToCamel(std::string& s) { - int numSeen = 0; - bool shouldCapitalize = false; - for (int i = 0; i < s.size(); ++i) { - int target = i + numSeen; - while (target < s.size() && s.at(target) == '_') { - ++target; - ++numSeen; - shouldCapitalize = true; - } - if (target < s.size() && numSeen) { - std::swap(s.at(i), s.at(target)); - if (shouldCapitalize) { - auto upper = toupper(s.at(i)); - s.at(i) = upper; - shouldCapitalize = false; - } - } - } - s.resize(s.size() - numSeen); -} - -// fooBar -> FooBar -void capitalize(std::string& s) { - if (s.empty()) { - return; - } - auto upper = toupper(s.at(0)); - s.at(0) = upper; -} - -// These various "stripping" functions are a bit of a kludge. I think I can fix -// this by properly handling typedef declarations rather than relying on a -// naming scheme pattern. -void stripPrefix(std::string& s, const std::string& prefix) { - std::string::size_type structLoc = s.find(prefix); - if (structLoc != std::string::npos && structLoc == 0) { - s.erase(0, prefix.size()); - } -} - -// remove leading "struct " -void stripStructPrefix(std::string& s) { - stripPrefix(s, "struct "); -} - -// remove leading "enum " -void stripEnumPrefix(std::string& s) { - stripPrefix(s, "enum "); -} - -bool stripSuffix(std::string& s, const std::string& suffix) { - std::string::size_type loc = s.find_last_of(suffix); - if (loc == s.size() - suffix.size()) { - s.erase(loc, suffix.size()); - return true; - } - return false; -} - -// remove trailing "_t" or "_s" -void stripStructSuffix(std::string& s) { - if (stripSuffix(s, "_t")) { - return; - } - stripSuffix(s, "_s"); -} - -// remove trailing "_t" or "_e" -void stripEnumSuffix(std::string& s) { - if (stripSuffix(s, "_t")) { - return; - } - stripSuffix(s, "_e"); -} - -void normalizeEnumName(std::string& s) { - stripEnumPrefix(s); - stripEnumSuffix(s); - snakeToCamel(s); - capitalize(s); -} - -void normalizeStructName(std::string& s) { - stripStructPrefix(s); - stripStructSuffix(s); - snakeToCamel(s); - capitalize(s); -} -} // namespace - -namespace facebook { -namespace fboss { - -ThriftType::ThriftType(const clang::QualType& qt) { - if (qt->isStructureType()) { - std::string t = qt.getAsString(); - normalizeStructName(t); - type = t; - } else if (qt->isEnumeralType()) { - std::string t = qt.getAsString(); - normalizeEnumName(t); - type = t; - } else if (qt->isPointerType()) { - ThriftType elementType(qt->getPointeeType()); - type = List(elementType.type); - } else if (qt->isIntegerType()) { - std::string t = qt.getAsString(); - if (t == "bool") { - type = ThriftType::Primitive::Bool; - } else if (t == "int") { - type = ThriftType::Primitive::Int32; - } - } else if (qt->isVoidType()) { - type = "void"; - } else { - type = "UNMATCHED_TYPE"; - } - name = boost::apply_visitor(ThriftType::ThriftGenVisitor(), type); -} - -ThriftType::ThriftType() { - type = "void"; - name = boost::apply_visitor(ThriftType::ThriftGenVisitor(), type); -} - -std::string ThriftType::getThrift() const { - return name; -} - -ThriftType::List::List(const ThriftType::Type& elementType) { - this->elementType = elementType; -} - -std::string ThriftType::ThriftGenVisitor::operator()( - const std::string& name) const { - return name; -} - -std::string ThriftType::ThriftGenVisitor::operator()( - const ThriftType::Primitive& primitive) const { - switch (primitive) { - case ThriftType::Primitive::Bool: - return "bool"; - case ThriftType::Primitive::Byte: - return "byte"; - case ThriftType::Primitive::Int16: - return "i16"; - case ThriftType::Primitive::Int32: - return "i32"; - case ThriftType::Primitive::Int64: - return "i64"; - case ThriftType::Primitive::Float: - return "float"; - case ThriftType::Primitive::Double: - return "double"; - case ThriftType::Primitive::Binary: - return "binary"; - case ThriftType::Primitive::String: - return "string"; - default: - return "unknown primitive"; - } -} - -std::string ThriftType::ThriftGenVisitor::operator()( - const ThriftType::List& list) const { - return folly::sformat( - "list<{}>", - boost::apply_visitor(ThriftType::ThriftGenVisitor(), list.elementType)); -} - -ThriftEnumerator::ThriftEnumerator( - const clang::EnumConstantDecl& enumConstant) { - name = enumConstant.getName().str(); - value_ = enumConstant.getInitVal().getExtValue(); -} - -std::string ThriftEnumerator::getThrift() const { - return folly::sformat("{} = {}", name, value_); -} - -ThriftEnum::ThriftEnum(const clang::EnumDecl& en) { - name = en.getName().str(); - normalizeEnumName(name); - for (const clang::EnumConstantDecl* enumConstant : en.enumerators()) { - enumerators_.emplace_back( - std::make_unique(*enumConstant)); - } -} - -std::string ThriftEnum::getThrift() const { - std::stringstream ss; - ss << "enum " << name << "\n{\n"; - for (const auto& enumerator : enumerators_) { - ss << " " << enumerator->getThrift() << ",\n"; - } - ss << "}"; - return ss.str(); -} - -ThriftField::ThriftField(int index, const clang::ValueDecl& decl) - : ThriftField(decl.getName().str(), index, decl.getType()) {} - -ThriftField::ThriftField( - const std::string& name, - int index, - const clang::QualType& qualifiedType) - : index_(index) { - if (qualifiedType->isFunctionPointerType()) { - throw std::runtime_error("can't make a thrift field with fn ptr"); - } - this->name = name; - type_ = ThriftType(qualifiedType); -} - -std::string ThriftField::getThrift() const { - return folly::sformat("{}: {} {}", index_, type_.getThrift(), name); -} - -ThriftStruct::ThriftStruct(const clang::RecordDecl& record) { - name = record.getName().str(); - normalizeStructName(name); - int index = 0; - for (const clang::FieldDecl* field : record.fields()) { - fields_.emplace_back(std::make_unique(index, *field)); - ++index; - } -} - -ThriftStruct::ThriftStruct(const clang::FunctionDecl& function) { - name = folly::sformat( - "{}Result", ThriftMethod::methodName(function.getName().str())); - normalizeStructName(name); - int index = 0; - auto rt = function.getReturnType(); - if (!rt->isVoidType()) { - fields_.emplace_back(std::make_unique("retVal", index, rt)); - ++index; - } - for (const clang::ParmVarDecl* param : function.parameters()) { - if (param->getType()->isPointerType()) { - fields_.emplace_back(std::make_unique( - param->getName().str(), index, param->getType())); - ++index; - } - } -} - -std::string ThriftStruct::getThrift() const { - std::stringstream ss; - ss << "struct " << name << "\n{\n"; - for (const auto& field : fields_) { - ss << " " << field->getThrift() << "\n"; - } - ss << "}"; - return ss.str(); -} - -bool ThriftStruct::hasFields() const { - return not fields_.empty(); -} - -ThriftMethod::ThriftMethod(const clang::FunctionDecl& function) { - name = methodName(function.getName().str()); - resultTypeName = "void"; - int index = 0; - for (const clang::ParmVarDecl* param : function.parameters()) { - parameters_.emplace_back(std::make_unique(index, *param)); - ++index; - } -} - -std::string ThriftMethod::methodName(const std::string& functionName) { - std::string s = functionName; - snakeToCamel(s); - return s; -} - -std::string ThriftMethod::getThrift() const { - std::stringstream ss; - ss << resultTypeName << " "; - ss << name << "("; - int i = 0; - for (const auto& param : parameters_) { - ss << param->getThrift(); - if (++i < parameters_.size()) { - ss << ", "; - } - } - ss << ")"; - return ss.str(); -} - -void ThriftService::addMethod(std::unique_ptr method) { - methods_.push_back(std::move(method)); -} - -std::string ThriftService::getThrift() const { - std::stringstream ss; - ss << "service " << name << "\n{\n"; - for (const auto& method : methods_) { - ss << " " << method->getThrift() << "\n"; - } - ss << "}"; - return ss.str(); -} - -ThriftFile::ThriftFile(const std::string& name) { - this->name = name; - service_.name = folly::sformat("{}Service", name); -} - -void ThriftFile::addEnum(std::unique_ptr en) { - enums_.push_back(std::move(en)); -} - -void ThriftFile::addMethod(std::unique_ptr method) { - service_.addMethod(std::move(method)); -} - -void ThriftFile::addStruct(std::unique_ptr st) { - structs_.push_back(std::move(st)); -} - -std::string ThriftFile::getThrift() const { - std::stringstream ss; - for (const auto& en : enums_) { - ss << en->getThrift() << "\n"; - } - for (const auto& st : structs_) { - ss << st->getThrift() << "\n"; - } - ss << service_.getThrift() << "\n"; - return ss.str(); -} - -} // namespace fboss -} // namespace facebook diff --git a/fboss/bcm_wrapper/code_gen/ThriftIDL.h b/fboss/bcm_wrapper/code_gen/ThriftIDL.h deleted file mode 100644 index f5513cd7e11da..0000000000000 --- a/fboss/bcm_wrapper/code_gen/ThriftIDL.h +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2004-present, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ -#pragma once - -#include -#include -#include -#include - -namespace facebook { -namespace fboss { - -/* - * Abstract base class for all the various Thrift IDL objects we support. - * The concrete classes roughly follow the Thrift IDL grammar defined at - * https://thrift.apache.org/docs/idl - */ -class ThriftIDLObject { - public: - virtual ~ThriftIDLObject() {} - virtual std::string getThrift() const = 0; - std::string name; -}; - -/* - * Represents a thrift type as used in objects which give something - * a type. Specifically this would be types in struct fields or in - * method parameters. - * ie: in a field line like: "0: i32 x", the "i32" portion is a ThriftType. - * - * Implementation Note: - * Since we output list types, I found internally representing things with - * boost::variant to be convenient. That way a type is either a name, a - * primitive, or a list of some other valid type. We can support list> - * rather naturally this way. - * (Lists are needed because all pointer types are treated as list) - */ -class ThriftType : public ThriftIDLObject { - public: - explicit ThriftType(const clang::QualType& qt); - ThriftType(); - std::string getThrift() const override; - enum class Primitive { - Bool = 0, - Byte = 1, - Int16 = 2, - Int32 = 3, - Int64 = 4, - Float = 5, - Double = 6, - Binary = 7, - String = 8, - }; - - class List; - using Type = boost::variant< - std::string, // thrift type name (eg a struct) - Primitive, - boost::recursive_wrapper>; - - class List { - public: - explicit List(const Type& elementType); - Type elementType; - }; - Type type; - - private: - class ThriftGenVisitor : public boost::static_visitor { - public: - std::string operator()(const std::string& name) const; - std::string operator()(const Primitive& primitive) const; - std::string operator()(const List& list) const; - }; -}; - -/* - * Represents an indexed, typed entry in a list of fields. In particular, - * this is used to represent fields in structs/unions and parameters of - * methods. - */ -class ThriftField : public ThriftIDLObject { - public: - ThriftField(int index, const clang::ValueDecl& field); - ThriftField( - const std::string& name, - int index, - const clang::QualType& qualifiedType); - std::string getThrift() const override; - - private: - int index_; - ThriftType type_; -}; - -/* - * Represents a struct. Can be constructed from a clang AST struct declaration - * or directly from a clang ast function declaration in the case of generating a - * struct for the return value of a method. - */ -class ThriftStruct : public ThriftIDLObject { - public: - explicit ThriftStruct(const clang::RecordDecl& record); - explicit ThriftStruct(const clang::FunctionDecl& function); - std::string getThrift() const override; - bool hasFields() const; - - private: - std::vector> fields_; -}; - -/* - * Represents one possible value for an enum - */ -class ThriftEnumerator : public ThriftIDLObject { - public: - explicit ThriftEnumerator(const clang::EnumConstantDecl& enumConstant); - std::string getThrift() const override; - - private: - int value_; -}; - -/* - * Represents an enum. Constructed from enum declarations in the clang AST - */ -class ThriftEnum : public ThriftIDLObject { - public: - explicit ThriftEnum(const clang::EnumDecl& en); - std::string getThrift() const override; - - private: - std::vector> enumerators_; -}; - -/* - * Represents a method inside a service. Constructed from function - * declarations in the clang AST. - */ -class ThriftMethod : public ThriftIDLObject { - public: - explicit ThriftMethod(const clang::FunctionDecl& function); - std::string getThrift() const override; - static std::string methodName(const std::string& functionName); - std::string resultTypeName; - - private: - std::vector> parameters_; -}; - -/* - * Represents a service. Has a list of methods and exposes the ability to - * extract all of their generated return types so that they can be included - * in the file. - */ -class ThriftService : public ThriftIDLObject { - public: - std::string getThrift() const override; - void addMethod(std::unique_ptr method); - - private: - std::vector> methods_; -}; - -/* - * Represents the entire thrift file. This is the top level object which - * will contain all the other IDL objects. - */ -class ThriftFile : public ThriftIDLObject { - public: - explicit ThriftFile(const std::string& name); - std::string getThrift() const override; - void addEnum(std::unique_ptr en); - // Adding a method also adds the struct representing the return value - void addMethod(std::unique_ptr method); - void addStruct(std::unique_ptr st); - - private: - std::vector> enums_; - // While thrift supports multiple services in a file, for now we generate - // just one, so don't bother with the extra complication - ThriftService service_; - std::vector> structs_; -}; - -} // namespace fboss -} // namespace facebook diff --git a/fboss/cli/fboss2/BUCK b/fboss/cli/fboss2/BUCK index bb6f341de392b..98f89e5ed7f60 100644 --- a/fboss/cli/fboss2/BUCK +++ b/fboss/cli/fboss2/BUCK @@ -275,7 +275,9 @@ cpp_library( "commands/show/facebook/environment/power/CmdShowEnvironmentPower.cpp", "commands/show/facebook/environment/sensor/CmdShowEnvironmentSensor.cpp", "commands/show/facebook/fsdb/CmdShowFsdbUtils.cpp", + "commands/show/facebook/state/CmdShowStateDrain.cpp", "commands/show/facebook/techsupport/CmdShowTechSupport.cpp", + "commands/show/port/CmdShowPort.cpp", "commands/show/route/utils.cpp", "facebook/CmdHandlerImpl.cpp", "facebook/CmdList.cpp", diff --git a/fboss/cli/fboss2/commands/show/dsfnodes/CmdShowDsfNodes.h b/fboss/cli/fboss2/commands/show/dsfnodes/CmdShowDsfNodes.h index ff28eb57c8501..03b1f022cf2a4 100644 --- a/fboss/cli/fboss2/commands/show/dsfnodes/CmdShowDsfNodes.h +++ b/fboss/cli/fboss2/commands/show/dsfnodes/CmdShowDsfNodes.h @@ -52,7 +52,7 @@ class CmdShowDsfNodes "Name", "Switch Id", "Type", - "System port range", + "System port ranges", }); for (auto const& entry : model.get_dsfNodes()) { @@ -60,7 +60,7 @@ class CmdShowDsfNodes *entry.name(), folly::to(*entry.switchId()), *entry.type(), - *entry.systemPortRange(), + *entry.systemPortRanges(), }); } out << table << std::endl; @@ -77,13 +77,15 @@ class CmdShowDsfNodes entry.type() = (node.type() == cfg::DsfNodeType::INTERFACE_NODE ? "Intf Node" : "Fabric Node"); - if (node.systemPortRange()) { - entry.systemPortRange() = folly::sformat( - "({}, {})", - *node.systemPortRange()->minimum(), - *node.systemPortRange()->maximum()); + std::vector ranges; + if (node.systemPortRanges()->systemPortRanges()->size()) { + for (const auto& range : *node.systemPortRanges()->systemPortRanges()) { + ranges.push_back( + folly::sformat("({}, {})", *range.minimum(), *range.maximum())); + } + entry.systemPortRanges() = folly::join(", ", ranges); } else { - entry.systemPortRange() = "--"; + entry.systemPortRanges() = "--"; } model.dsfNodes()->push_back(entry); } diff --git a/fboss/cli/fboss2/commands/show/dsfnodes/model.thrift b/fboss/cli/fboss2/commands/show/dsfnodes/model.thrift index ca1f9865bbac9..db284abde94fe 100644 --- a/fboss/cli/fboss2/commands/show/dsfnodes/model.thrift +++ b/fboss/cli/fboss2/commands/show/dsfnodes/model.thrift @@ -8,5 +8,5 @@ struct DsfNodeEntry { 1: string name; 2: i64 switchId; 3: string type; - 4: string systemPortRange; + 4: string systemPortRanges; } diff --git a/fboss/cli/fboss2/commands/show/interface/CmdShowInterface.h b/fboss/cli/fboss2/commands/show/interface/CmdShowInterface.h index 7dc523855abf3..da07fea1d51d6 100644 --- a/fboss/cli/fboss2/commands/show/interface/CmdShowInterface.h +++ b/fboss/cli/fboss2/commands/show/interface/CmdShowInterface.h @@ -115,12 +115,17 @@ class CmdShowInterface populateVlanToMtu(vlanToMtu, intfDetails); populateVlanToPrefixes(vlanToPrefixes, intfDetails); - int32_t minSystemPort = 0; + std::optional localSysPortOffset, globalSysPortOffset; for (const auto& idAndNode : dsfNodes) { const auto& node = idAndNode.second; if (utils::removeFbDomains(hostInfo.getName()) == utils::removeFbDomains(*node.name())) { - minSystemPort = *node.systemPortRange()->minimum(); + if (node.localSystemPortOffset().has_value()) { + localSysPortOffset = *node.localSystemPortOffset(); + } + if (node.globalSystemPortOffset().has_value()) { + globalSysPortOffset = *node.globalSystemPortOffset(); + } break; } } @@ -151,8 +156,13 @@ class CmdShowInterface } } - if (dsfNodes.size() > 0) { - int systemPortId = minSystemPort + portId; + if (localSysPortOffset.has_value() && globalSysPortOffset.has_value()) { + // TODO factor in portId range for this switchId. Needed for + // multi-asic systems + int systemPortId = + (portInfo.scope() == cfg::Scope::GLOBAL ? *globalSysPortOffset + : *localSysPortOffset) + + portId; ifModel.systemPortId() = systemPortId; // Extract IP addresses for DSF switches diff --git a/fboss/cli/fboss2/commands/show/interface/counters/fec/tail/CmdShowInterfaceCountersFecTail.h b/fboss/cli/fboss2/commands/show/interface/counters/fec/tail/CmdShowInterfaceCountersFecTail.h index c859cdf26553a..0272fcd7d275b 100644 --- a/fboss/cli/fboss2/commands/show/interface/counters/fec/tail/CmdShowInterfaceCountersFecTail.h +++ b/fboss/cli/fboss2/commands/show/interface/counters/fec/tail/CmdShowInterfaceCountersFecTail.h @@ -110,14 +110,8 @@ class CmdShowInterfaceCountersFecTail if (sideStats && sideStats->pcs()) { auto& pcsStats = *sideStats->pcs(); if (auto fecStats = pcsStats.rsFec()) { - if (!fecStats->codewordStats()->empty()) { - int fecTail = 0; - for (auto it : *fecStats->codewordStats()) { - if (it.second) { - fecTail = fecTail > it.first ? fecTail : it.first; - } - } - return fecTail; + if (fecStats->fecTail().has_value()) { + return *fecStats->fecTail(); } } } diff --git a/fboss/cli/fboss2/commands/show/interface/phy/CmdShowInterfacePhy.h b/fboss/cli/fboss2/commands/show/interface/phy/CmdShowInterfacePhy.h index ddc6d654926f8..8f8e7abd53316 100644 --- a/fboss/cli/fboss2/commands/show/interface/phy/CmdShowInterfacePhy.h +++ b/fboss/cli/fboss2/commands/show/interface/phy/CmdShowInterfacePhy.h @@ -174,6 +174,11 @@ class CmdShowInterfacePhy std::ostringstream outStringStream; outStringStream << *rsFec->preFECBer(); rsFecTable.addRow({prefix + "Pre-FEC BER", outStringStream.str()}); + if (rsFec->fecTail().has_value()) { + rsFecTable.addRow( + {prefix + "FEC Tail", + std::to_string(rsFec->fecTail().value())}); + } hasRsFecData = true; if (!rsFec->codewordStats()->empty()) { rsFecCodewordStatsTable.setHeader( diff --git a/fboss/cli/fboss2/commands/show/lldp/CmdShowLldp.h b/fboss/cli/fboss2/commands/show/lldp/CmdShowLldp.h index fe6b1207a8573..aa3b8d9e04883 100644 --- a/fboss/cli/fboss2/commands/show/lldp/CmdShowLldp.h +++ b/fboss/cli/fboss2/commands/show/lldp/CmdShowLldp.h @@ -192,7 +192,10 @@ class CmdShowLldp : public CmdHandler { } const RE2 fsw_regex("^fsw.*"); if (RE2::FullMatch(portDescription, fsw_regex)) { - return results[0] + "." + results[1]; + results.clear(); + folly::split(":", portDescription, results); + // Prints as fsw001.p062.f01.vll3 + return results[0]; } const RE2 ctsw_regex("^ctsw.*"); if (RE2::FullMatch(portDescription, ctsw_regex)) { diff --git a/fboss/cli/fboss2/commands/show/port/CmdShowPort.cpp b/fboss/cli/fboss2/commands/show/port/CmdShowPort.cpp new file mode 100644 index 0000000000000..2893449f4227a --- /dev/null +++ b/fboss/cli/fboss2/commands/show/port/CmdShowPort.cpp @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2004-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + */ + +#include "CmdShowPort.h" + +#include +#include +#include "fboss/cli/fboss2/CmdHandler.h" +#include "fboss/cli/fboss2/commands/show/port/gen-cpp2/model_types.h" +#include "fboss/cli/fboss2/commands/show/port/gen-cpp2/model_visitation.h" +#include "fboss/cli/fboss2/utils/CmdClientUtils.h" +#include "fboss/cli/fboss2/utils/CmdUtils.h" +#include "fboss/cli/fboss2/utils/Table.h" +#include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" + +#include +#include + +namespace facebook::fboss { + +using utils::Table; +using ObjectArgType = CmdShowPortTraits::ObjectArgType; +using RetType = CmdShowPortTraits::RetType; + +std::string getAdminStateStr(PortAdminState adminState) { + switch (adminState) { + case PortAdminState::DISABLED: + return "Disabled"; + case PortAdminState::ENABLED: + return "Enabled"; + } + + throw std::runtime_error( + "Unsupported AdminState: " + + std::to_string(static_cast(adminState))); +} +std::string getOptionalIntStr(std::optional val) { + if (val.has_value()) { + return folly::to(*val); + } + return "--"; +} + +std::string getOperStateStr(PortOperState operState) { + switch (operState) { + case PortOperState::DOWN: + return "Down"; + case PortOperState::UP: + return "Up"; + } + + throw std::runtime_error( + "Unsupported LinkState: " + std::to_string(static_cast(operState))); +} + +Table::StyledCell getStyledActiveState(std::string activeState) { + if (activeState == "Inactive") { + return Table::StyledCell("Inactive", Table::Style::ERROR); + } else if (activeState == "Active") { + return Table::StyledCell("Active", Table::Style::GOOD); + } else { + return Table::StyledCell("--", Table::Style::NONE); + } + + throw std::runtime_error("Unsupported ActiveState: " + activeState); +} + +Table::StyledCell getStyledLinkState(std::string linkState) { + if (linkState == "Down") { + return Table::StyledCell("Down", Table::Style::ERROR); + } else { + return Table::StyledCell("Up", Table::Style::GOOD); + } + + throw std::runtime_error("Unsupported LinkState: " + linkState); +} + +std::string getActiveStateStr(PortActiveState* activeState) { + if (activeState) { + switch (*activeState) { + case PortActiveState::INACTIVE: + return "Inactive"; + case PortActiveState::ACTIVE: + return "Active"; + } + + throw std::runtime_error( + "Unsupported ActiveState: " + + std::to_string(static_cast(*activeState))); + } else { + return "--"; + } +} + +std::string getTransceiverStr( + std::map& transceiverEntries, + int32_t transceiverId) { + if (transceiverEntries.count(transceiverId) == 0) { + return ""; + } + auto isPresent = *transceiverEntries[transceiverId].tcvrState()->present(); + if (isPresent) + return "Present"; + return "Absent"; +} + +Table::StyledCell getStyledErrors(std::string errors) { + if (errors == "--") { + return Table::StyledCell(errors, Table::Style::NONE); + } else { + return Table::StyledCell(errors, Table::Style::ERROR); + } +} + +std::unordered_map> +CmdShowPort::getAcceptedFilterValues() { + return { + {"adminState", {"Enabled", "Disabled"}}, + {"linkState", {"Up", "Down"}}, + {"activeState", {"Active", "Inactive", "--"}}, + }; +} + +RetType CmdShowPort::queryClient( + const HostInfo& hostInfo, + const ObjectArgType& queriedPorts) { + std::map portEntries; + std::map transceiverEntries; + std::map portStats; + + std::vector requiredTransceiverEntries; + std::vector bgpDrainedInterfaces; + + auto client = + utils::createClient(hostInfo); + client->sync_getAllPortInfo(portEntries); + + auto opt = CmdGlobalOptions::getInstance(); + if (opt->isDetailed()) { + client->sync_getHwPortStats(portStats); + } + + try { + auto qsfpService = + utils::createClient(hostInfo); + + qsfpService->sync_getTransceiverInfo( + transceiverEntries, requiredTransceiverEntries); + } catch (apache::thrift::transport::TTransportException&) { + std::cerr << "Cannot connect to qsfp_service\n"; + } + + return createModel( + portEntries, + transceiverEntries, + queriedPorts.data(), + portStats, + utils::getBgpDrainedInterafces(hostInfo)); +} + +RetType CmdShowPort::createModel( + std::map portEntries, + std::map transceiverEntries, + const ObjectArgType& queriedPorts, + std::map portStats, + const std::vector& drainedInterfaces) { + RetType model; + std::unordered_set queriedSet( + queriedPorts.begin(), queriedPorts.end()); + + for (const auto& entry : portEntries) { + auto portInfo = entry.second; + auto portName = portInfo.get_name(); + auto operState = getOperStateStr(portInfo.get_operState()); + auto activeState = getActiveStateStr(portInfo.get_activeState()); + + if (queriedPorts.size() == 0 || queriedSet.count(portName)) { + cli::PortEntry portDetails; + portDetails.id() = portInfo.get_portId(); + portDetails.name() = portInfo.get_name(); + portDetails.adminState() = getAdminStateStr(portInfo.get_adminState()); + portDetails.linkState() = operState; + portDetails.activeState() = activeState; + portDetails.speed() = utils::getSpeedGbps(portInfo.get_speedMbps()); + portDetails.profileId() = portInfo.get_profileID(); + portDetails.coreId() = getOptionalIntStr(portInfo.coreId().to_optional()); + portDetails.virtualDeviceId() = + getOptionalIntStr(portInfo.virtualDeviceId().to_optional()); + if (portInfo.activeErrors()->size()) { + std::vector errorStrs; + std::for_each( + portInfo.activeErrors()->begin(), + portInfo.activeErrors()->end(), + [&errorStrs](auto error) { + errorStrs.push_back(apache::thrift::util::enumNameSafe(error)); + }); + portDetails.activeErrors() = folly::join(",", errorStrs); + } else { + portDetails.activeErrors() = "--"; + } + if (auto hwLogicalPortId = portInfo.hwLogicalPortId()) { + portDetails.hwLogicalPortId() = *hwLogicalPortId; + } + portDetails.isDrained() = "No"; + if ((std::find( + drainedInterfaces.begin(), drainedInterfaces.end(), portName) != + drainedInterfaces.end()) || + portInfo.get_isDrained()) { + portDetails.isDrained() = "Yes"; + } + if (auto tcvrId = portInfo.transceiverIdx()) { + const auto transceiverId = tcvrId->get_transceiverId(); + portDetails.tcvrID() = transceiverId; + portDetails.tcvrPresent() = + getTransceiverStr(transceiverEntries, transceiverId); + } + if (auto pfc = portInfo.get_pfc()) { + std::string pfcString = ""; + if (*pfc->tx()) { + pfcString = "TX "; + } + if (*pfc->rx()) { + pfcString += "RX "; + } + if (*pfc->watchdog()) { + pfcString += "WD"; + } + portDetails.pfc() = pfcString; + } else { + std::string pauseString = ""; + if (portInfo.get_txPause()) { + pauseString = "TX "; + } + if (portInfo.get_rxPause()) { + pauseString += "RX"; + } + portDetails.pause() = pauseString; + } + portDetails.numUnicastQueues() = portInfo.get_portQueues().size(); + for (const auto& queue : portInfo.get_portQueues()) { + if (!queue.get_name().empty()) { + portDetails.queueIdToName()->insert( + {queue.get_id(), queue.get_name()}); + } + } + + const auto& iter = portStats.find(portName); + if (iter != portStats.end()) { + auto portHwStatsEntry = iter->second; + cli::PortHwStatsEntry cliPortStats; + cliPortStats.inUnicastPkts() = portHwStatsEntry.get_inUnicastPkts_(); + cliPortStats.inDiscardPkts() = portHwStatsEntry.get_inDiscards_(); + cliPortStats.inErrorPkts() = portHwStatsEntry.get_inErrors_(); + cliPortStats.outDiscardPkts() = portHwStatsEntry.get_outDiscards_(); + cliPortStats.outCongestionDiscardPkts() = + portHwStatsEntry.get_outCongestionDiscardPkts_(); + cliPortStats.queueOutDiscardBytes() = + portHwStatsEntry.get_queueOutDiscardBytes_(); + cliPortStats.inCongestionDiscards() = + portHwStatsEntry.get_inCongestionDiscards_(); + cliPortStats.queueOutBytes() = portHwStatsEntry.get_queueOutBytes_(); + if (portInfo.get_pfc()) { + cliPortStats.outPfcPriorityPackets() = portHwStatsEntry.get_outPfc_(); + cliPortStats.inPfcPriorityPackets() = portHwStatsEntry.get_inPfc_(); + cliPortStats.outPfcPackets() = portHwStatsEntry.get_outPfcCtrl_(); + cliPortStats.inPfcPackets() = portHwStatsEntry.get_inPfcCtrl_(); + } else { + cliPortStats.outPausePackets() = portHwStatsEntry.get_outPause_(); + cliPortStats.inPausePackets() = portHwStatsEntry.get_inPause_(); + } + cliPortStats.ingressBytes() = portHwStatsEntry.get_inBytes_(); + cliPortStats.egressBytes() = portHwStatsEntry.get_outBytes_(); + portDetails.hwPortStats() = cliPortStats; + } + model.portEntries()->push_back(portDetails); + } + } + + std::sort( + model.portEntries()->begin(), + model.portEntries()->end(), + [&](const cli::PortEntry& a, const cli::PortEntry& b) { + return utils::comparePortName(a.get_name(), b.get_name()); + }); + + return model; +} + +void CmdShowPort::printOutput(const RetType& model, std::ostream& out) { + std::vector detailedOutput; + auto opt = CmdGlobalOptions::getInstance(); + + if (opt->isDetailed()) { + for (auto const& portInfo : model.get_portEntries()) { + std::string hwLogicalPortId; + if (auto portId = portInfo.hwLogicalPortId()) { + hwLogicalPortId = folly::to(*portId); + } + + const auto& portHwStats = portInfo.get_hwPortStats(); + detailedOutput.emplace_back(""); + detailedOutput.emplace_back( + fmt::format("Name: \t\t {}", portInfo.get_name())); + detailedOutput.emplace_back(fmt::format( + "ID: \t\t {}", + folly::to(portInfo.get_id()))); + detailedOutput.emplace_back( + fmt::format("Admin State: \t\t {}", portInfo.get_adminState())); + detailedOutput.emplace_back( + fmt::format("Speed: \t\t {}", portInfo.get_speed())); + detailedOutput.emplace_back( + fmt::format("LinkState: \t\t {}", portInfo.get_linkState())); + detailedOutput.emplace_back(fmt::format( + "TcvrID: \t\t {}", + folly::to(portInfo.get_tcvrID()))); + detailedOutput.emplace_back( + fmt::format("Transceiver: \t\t {}", portInfo.get_tcvrPresent())); + detailedOutput.emplace_back( + fmt::format("ProfileID: \t\t {}", portInfo.get_profileId())); + detailedOutput.emplace_back( + fmt::format("ProfileID: \t\t {}", hwLogicalPortId)); + detailedOutput.emplace_back( + fmt::format("Core ID: \t\t {}", portInfo.get_coreId())); + detailedOutput.emplace_back(fmt::format( + "Virtual device ID: \t\t {}", portInfo.get_virtualDeviceId())); + if (portInfo.get_pause()) { + detailedOutput.emplace_back( + fmt::format("Pause: \t\t {}", *portInfo.get_pause())); + } else if (portInfo.get_pfc()) { + detailedOutput.emplace_back( + fmt::format("PFC: \t\t {}", *portInfo.get_pfc())); + } + detailedOutput.emplace_back(fmt::format( + "Unicast queues: \t\t {}", + folly::to(portInfo.get_numUnicastQueues()))); + detailedOutput.emplace_back(fmt::format( + " Ingress (bytes) \t\t {}", + portHwStats.get_ingressBytes())); + detailedOutput.emplace_back(fmt::format( + " Egress (bytes) \t\t {}", + portHwStats.get_egressBytes())); + for (const auto& queueBytes : portHwStats.get_queueOutBytes()) { + const auto iter = portInfo.get_queueIdToName().find(queueBytes.first); + std::string queueName = ""; + if (iter != portInfo.get_queueIdToName().end()) { + queueName = folly::to("(", iter->second, ")"); + } + // print either if the queue is valid or queue has non zero traffic + if (queueBytes.second || !queueName.empty()) { + detailedOutput.emplace_back(fmt::format( + "\tQueue {} {:12} \t\t {}", + queueBytes.first, + queueName, + queueBytes.second)); + } + } + detailedOutput.emplace_back(fmt::format( + " Received Unicast (pkts) \t\t {}", + portHwStats.get_inUnicastPkts())); + detailedOutput.emplace_back(fmt::format( + " In Errors (pkts) \t\t {}", + portHwStats.get_inErrorPkts())); + detailedOutput.emplace_back(fmt::format( + " In Discards (pkts) \t\t {}", + portHwStats.get_inDiscardPkts())); + detailedOutput.emplace_back(fmt::format( + " Out Discards (pkts) \t\t {}", + portHwStats.get_outDiscardPkts())); + detailedOutput.emplace_back(fmt::format( + " Out Congestion Discards (pkts)\t\t {}", + portHwStats.get_outCongestionDiscardPkts())); + for (const auto& queueDiscardBytes : + portHwStats.get_queueOutDiscardBytes()) { + const auto iter = + portInfo.get_queueIdToName().find(queueDiscardBytes.first); + std::string queueName = ""; + if (iter != portInfo.get_queueIdToName().end()) { + queueName = folly::to("(", iter->second, ")"); + } + // print either if the queue is valid or queue has non zero traffic + if (queueDiscardBytes.second || !queueName.empty()) { + detailedOutput.emplace_back(fmt::format( + "\tQueue {} {:12} \t\t {}", + queueDiscardBytes.first, + queueName, + queueDiscardBytes.second)); + } + } + detailedOutput.emplace_back(fmt::format( + " In Congestion Discards (pkts)\t\t {}", + portHwStats.get_inCongestionDiscards())); + if (portHwStats.get_outPfcPackets()) { + detailedOutput.emplace_back(fmt::format( + " PFC Output (pkts) \t\t {}", + *portHwStats.get_outPfcPackets())); + if (portHwStats.get_outPfcPriorityPackets()) { + for (const auto& pfcPriortyCounter : + *portHwStats.get_outPfcPriorityPackets()) { + detailedOutput.emplace_back(fmt::format( + "\tPriority {} \t\t {}", + pfcPriortyCounter.first, + pfcPriortyCounter.second)); + } + } + } + if (portHwStats.get_inPfcPackets()) { + detailedOutput.emplace_back(fmt::format( + " PFC Input (pkts) \t\t {}", + *portHwStats.get_inPfcPackets())); + if (portHwStats.get_inPfcPriorityPackets()) { + for (const auto& pfcPriortyCounter : + *portHwStats.get_inPfcPriorityPackets()) { + detailedOutput.emplace_back(fmt::format( + "\tPriority {} \t\t {}", + pfcPriortyCounter.first, + pfcPriortyCounter.second)); + } + } + } + if (portHwStats.get_outPausePackets()) { + detailedOutput.emplace_back(fmt::format( + " Pause Output (pkts) \t\t {}", + *portHwStats.get_outPausePackets())); + } + if (portHwStats.get_inPausePackets()) { + detailedOutput.emplace_back(fmt::format( + " Pause Input (pkts) \t\t {}", + *portHwStats.get_inPausePackets())); + } + } + out << folly::join("\n", detailedOutput) << std::endl; + } else { + Table table; + table.setHeader({ + "ID", + "Name", + "AdminState", + "LinkState", + "ActiveState", + "Transceiver", + "TcvrID", + "Speed", + "ProfileID", + "HwLogicalPortId", + "Drained", + "Errors", + "Core Id", + "Virtual device Id", + }); + + for (auto const& portInfo : model.get_portEntries()) { + std::string hwLogicalPortId; + if (auto portId = portInfo.hwLogicalPortId()) { + hwLogicalPortId = folly::to(*portId); + } + table.addRow( + {folly::to(portInfo.get_id()), + portInfo.get_name(), + portInfo.get_adminState(), + getStyledLinkState(portInfo.get_linkState()), + getStyledActiveState(portInfo.get_activeState()), + portInfo.get_tcvrPresent(), + folly::to(portInfo.get_tcvrID()), + portInfo.get_speed(), + portInfo.get_profileId(), + hwLogicalPortId, + portInfo.get_isDrained(), + getStyledErrors(portInfo.get_activeErrors()), + portInfo.get_coreId(), + portInfo.get_virtualDeviceId()}); + } + out << table << std::endl; + } +} + +} // namespace facebook::fboss diff --git a/fboss/cli/fboss2/commands/show/port/CmdShowPort.h b/fboss/cli/fboss2/commands/show/port/CmdShowPort.h index f73c880ad247f..f3e0577f90aa4 100644 --- a/fboss/cli/fboss2/commands/show/port/CmdShowPort.h +++ b/fboss/cli/fboss2/commands/show/port/CmdShowPort.h @@ -41,460 +41,21 @@ class CmdShowPort : public CmdHandler { using ObjectArgType = CmdShowPortTraits::ObjectArgType; using RetType = CmdShowPortTraits::RetType; - RetType queryClient( - const HostInfo& hostInfo, - const ObjectArgType& queriedPorts) { - std::map portEntries; - std::map transceiverEntries; - std::map portStats; - - std::vector requiredTransceiverEntries; - std::vector bgpDrainedInterfaces; - - auto client = - utils::createClient(hostInfo); - client->sync_getAllPortInfo(portEntries); - - auto opt = CmdGlobalOptions::getInstance(); - if (opt->isDetailed()) { - client->sync_getHwPortStats(portStats); - } - - try { - auto qsfpService = - utils::createClient( - hostInfo); - - qsfpService->sync_getTransceiverInfo( - transceiverEntries, requiredTransceiverEntries); - } catch (apache::thrift::transport::TTransportException&) { - std::cerr << "Cannot connect to qsfp_service\n"; - } - - return createModel( - portEntries, - transceiverEntries, - queriedPorts.data(), - portStats, - utils::getBgpDrainedInterafces(hostInfo)); - } - std::unordered_map> - getAcceptedFilterValues() { - return { - {"adminState", {"Enabled", "Disabled"}}, - {"linkState", {"Up", "Down"}}, - {"activeState", {"Active", "Inactive", "--"}}, - }; - } - - void printOutput(const RetType& model, std::ostream& out = std::cout) { - std::vector detailedOutput; - auto opt = CmdGlobalOptions::getInstance(); - - if (opt->isDetailed()) { - for (auto const& portInfo : model.get_portEntries()) { - std::string hwLogicalPortId; - if (auto portId = portInfo.hwLogicalPortId()) { - hwLogicalPortId = folly::to(*portId); - } - - const auto& portHwStats = portInfo.get_hwPortStats(); - detailedOutput.emplace_back(""); - detailedOutput.emplace_back( - fmt::format("Name: \t\t {}", portInfo.get_name())); - detailedOutput.emplace_back(fmt::format( - "ID: \t\t {}", - folly::to(portInfo.get_id()))); - detailedOutput.emplace_back( - fmt::format("Admin State: \t\t {}", portInfo.get_adminState())); - detailedOutput.emplace_back( - fmt::format("Speed: \t\t {}", portInfo.get_speed())); - detailedOutput.emplace_back( - fmt::format("LinkState: \t\t {}", portInfo.get_linkState())); - detailedOutput.emplace_back(fmt::format( - "TcvrID: \t\t {}", - folly::to(portInfo.get_tcvrID()))); - detailedOutput.emplace_back( - fmt::format("Transceiver: \t\t {}", portInfo.get_tcvrPresent())); - detailedOutput.emplace_back( - fmt::format("ProfileID: \t\t {}", portInfo.get_profileId())); - detailedOutput.emplace_back( - fmt::format("ProfileID: \t\t {}", hwLogicalPortId)); - detailedOutput.emplace_back( - fmt::format("Core ID: \t\t {}", portInfo.get_coreId())); - detailedOutput.emplace_back(fmt::format( - "Virtual device ID: \t\t {}", portInfo.get_virtualDeviceId())); - if (portInfo.get_pause()) { - detailedOutput.emplace_back( - fmt::format("Pause: \t\t {}", *portInfo.get_pause())); - } else if (portInfo.get_pfc()) { - detailedOutput.emplace_back( - fmt::format("PFC: \t\t {}", *portInfo.get_pfc())); - } - detailedOutput.emplace_back(fmt::format( - "Unicast queues: \t\t {}", - folly::to(portInfo.get_numUnicastQueues()))); - detailedOutput.emplace_back(fmt::format( - " Ingress (bytes) \t\t {}", - portHwStats.get_ingressBytes())); - detailedOutput.emplace_back(fmt::format( - " Egress (bytes) \t\t {}", - portHwStats.get_egressBytes())); - for (const auto& queueBytes : portHwStats.get_queueOutBytes()) { - const auto iter = portInfo.get_queueIdToName().find(queueBytes.first); - std::string queueName = ""; - if (iter != portInfo.get_queueIdToName().end()) { - queueName = folly::to("(", iter->second, ")"); - } - // print either if the queue is valid or queue has non zero traffic - if (queueBytes.second || !queueName.empty()) { - detailedOutput.emplace_back(fmt::format( - "\tQueue {} {:12} \t\t {}", - queueBytes.first, - queueName, - queueBytes.second)); - } - } - detailedOutput.emplace_back(fmt::format( - " Received Unicast (pkts) \t\t {}", - portHwStats.get_inUnicastPkts())); - detailedOutput.emplace_back(fmt::format( - " In Errors (pkts) \t\t {}", - portHwStats.get_inErrorPkts())); - detailedOutput.emplace_back(fmt::format( - " In Discards (pkts) \t\t {}", - portHwStats.get_inDiscardPkts())); - detailedOutput.emplace_back(fmt::format( - " Out Discards (pkts) \t\t {}", - portHwStats.get_outDiscardPkts())); - detailedOutput.emplace_back(fmt::format( - " Out Congestion Discards (pkts)\t\t {}", - portHwStats.get_outCongestionDiscardPkts())); - for (const auto& queueDiscardBytes : - portHwStats.get_queueOutDiscardBytes()) { - const auto iter = - portInfo.get_queueIdToName().find(queueDiscardBytes.first); - std::string queueName = ""; - if (iter != portInfo.get_queueIdToName().end()) { - queueName = folly::to("(", iter->second, ")"); - } - // print either if the queue is valid or queue has non zero traffic - if (queueDiscardBytes.second || !queueName.empty()) { - detailedOutput.emplace_back(fmt::format( - "\tQueue {} {:12} \t\t {}", - queueDiscardBytes.first, - queueName, - queueDiscardBytes.second)); - } - } - detailedOutput.emplace_back(fmt::format( - " In Congestion Discards (pkts)\t\t {}", - portHwStats.get_inCongestionDiscards())); - if (portHwStats.get_outPfcPackets()) { - detailedOutput.emplace_back(fmt::format( - " PFC Output (pkts) \t\t {}", - *portHwStats.get_outPfcPackets())); - if (portHwStats.get_outPfcPriorityPackets()) { - for (const auto& pfcPriortyCounter : - *portHwStats.get_outPfcPriorityPackets()) { - detailedOutput.emplace_back(fmt::format( - "\tPriority {} \t\t {}", - pfcPriortyCounter.first, - pfcPriortyCounter.second)); - } - } - } - if (portHwStats.get_inPfcPackets()) { - detailedOutput.emplace_back(fmt::format( - " PFC Input (pkts) \t\t {}", - *portHwStats.get_inPfcPackets())); - if (portHwStats.get_inPfcPriorityPackets()) { - for (const auto& pfcPriortyCounter : - *portHwStats.get_inPfcPriorityPackets()) { - detailedOutput.emplace_back(fmt::format( - "\tPriority {} \t\t {}", - pfcPriortyCounter.first, - pfcPriortyCounter.second)); - } - } - } - if (portHwStats.get_outPausePackets()) { - detailedOutput.emplace_back(fmt::format( - " Pause Output (pkts) \t\t {}", - *portHwStats.get_outPausePackets())); - } - if (portHwStats.get_inPausePackets()) { - detailedOutput.emplace_back(fmt::format( - " Pause Input (pkts) \t\t {}", - *portHwStats.get_inPausePackets())); - } - } - out << folly::join("\n", detailedOutput) << std::endl; - } else { - Table table; - table.setHeader({ - "ID", - "Name", - "AdminState", - "LinkState", - "ActiveState", - "Transceiver", - "TcvrID", - "Speed", - "ProfileID", - "HwLogicalPortId", - "Drained", - "Errors", - "Core Id", - "Virtual device Id", - }); - - for (auto const& portInfo : model.get_portEntries()) { - std::string hwLogicalPortId; - if (auto portId = portInfo.hwLogicalPortId()) { - hwLogicalPortId = folly::to(*portId); - } - table.addRow( - {folly::to(portInfo.get_id()), - portInfo.get_name(), - portInfo.get_adminState(), - getStyledLinkState(portInfo.get_linkState()), - getStyledActiveState(portInfo.get_activeState()), - portInfo.get_tcvrPresent(), - folly::to(portInfo.get_tcvrID()), - portInfo.get_speed(), - portInfo.get_profileId(), - hwLogicalPortId, - portInfo.get_isDrained(), - getStyledErrors(portInfo.get_activeErrors()), - portInfo.get_coreId(), - portInfo.get_virtualDeviceId()}); - } - out << table << std::endl; - } - } - - std::string getAdminStateStr(PortAdminState adminState) { - switch (adminState) { - case PortAdminState::DISABLED: - return "Disabled"; - case PortAdminState::ENABLED: - return "Enabled"; - } - - throw std::runtime_error( - "Unsupported AdminState: " + - std::to_string(static_cast(adminState))); - } - std::string getOptionalIntStr(std::optional val) { - if (val.has_value()) { - return folly::to(*val); - } - return "--"; - } + getAcceptedFilterValues(); - Table::StyledCell getStyledLinkState(std::string linkState) { - if (linkState == "Down") { - return Table::StyledCell("Down", Table::Style::ERROR); - } else { - return Table::StyledCell("Up", Table::Style::GOOD); - } - - throw std::runtime_error("Unsupported LinkState: " + linkState); - } - - std::string getOperStateStr(PortOperState operState) { - switch (operState) { - case PortOperState::DOWN: - return "Down"; - case PortOperState::UP: - return "Up"; - } - - throw std::runtime_error( - "Unsupported LinkState: " + - std::to_string(static_cast(operState))); - } - - Table::StyledCell getStyledActiveState(std::string activeState) { - if (activeState == "Inactive") { - return Table::StyledCell("Inactive", Table::Style::ERROR); - } else if (activeState == "Active") { - return Table::StyledCell("Active", Table::Style::GOOD); - } else { - return Table::StyledCell("--", Table::Style::NONE); - } - - throw std::runtime_error("Unsupported ActiveState: " + activeState); - } - - std::string getActiveStateStr(PortActiveState* activeState) { - if (activeState) { - switch (*activeState) { - case PortActiveState::INACTIVE: - return "Inactive"; - case PortActiveState::ACTIVE: - return "Active"; - } - - throw std::runtime_error( - "Unsupported ActiveState: " + - std::to_string(static_cast(*activeState))); - } else { - return "--"; - } - } - - std::string getTransceiverStr( - std::map& transceiverEntries, - int32_t transceiverId) { - if (transceiverEntries.count(transceiverId) == 0) { - return ""; - } - auto isPresent = *transceiverEntries[transceiverId].tcvrState()->present(); - if (isPresent) - return "Present"; - return "Absent"; - } - Table::StyledCell getStyledErrors(std::string errors) { - if (errors == "--") { - return Table::StyledCell(errors, Table::Style::NONE); - } else { - return Table::StyledCell(errors, Table::Style::ERROR); - } - } + RetType queryClient( + const HostInfo& hostInfo, + const ObjectArgType& queriedPorts); RetType createModel( std::map portEntries, std::map transceiverEntries, const ObjectArgType& queriedPorts, std::map portStats, - const std::vector& drainedInterfaces) { - RetType model; - std::unordered_set queriedSet( - queriedPorts.begin(), queriedPorts.end()); - - for (const auto& entry : portEntries) { - auto portInfo = entry.second; - auto portName = portInfo.get_name(); - auto operState = getOperStateStr(portInfo.get_operState()); - auto activeState = getActiveStateStr(portInfo.get_activeState()); - - if (queriedPorts.size() == 0 || queriedSet.count(portName)) { - cli::PortEntry portDetails; - portDetails.id() = portInfo.get_portId(); - portDetails.name() = portInfo.get_name(); - portDetails.adminState() = getAdminStateStr(portInfo.get_adminState()); - portDetails.linkState() = operState; - portDetails.activeState() = activeState; - portDetails.speed() = utils::getSpeedGbps(portInfo.get_speedMbps()); - portDetails.profileId() = portInfo.get_profileID(); - portDetails.coreId() = - getOptionalIntStr(portInfo.coreId().to_optional()); - portDetails.virtualDeviceId() = - getOptionalIntStr(portInfo.virtualDeviceId().to_optional()); - if (portInfo.activeErrors()->size()) { - std::vector errorStrs; - std::for_each( - portInfo.activeErrors()->begin(), - portInfo.activeErrors()->end(), - [&errorStrs](auto error) { - errorStrs.push_back(apache::thrift::util::enumNameSafe(error)); - }); - portDetails.activeErrors() = folly::join(",", errorStrs); - } else { - portDetails.activeErrors() = "--"; - } - if (auto hwLogicalPortId = portInfo.hwLogicalPortId()) { - portDetails.hwLogicalPortId() = *hwLogicalPortId; - } - portDetails.isDrained() = "No"; - if ((std::find( - drainedInterfaces.begin(), - drainedInterfaces.end(), - portName) != drainedInterfaces.end()) || - portInfo.get_isDrained()) { - portDetails.isDrained() = "Yes"; - } - if (auto tcvrId = portInfo.transceiverIdx()) { - const auto transceiverId = tcvrId->get_transceiverId(); - portDetails.tcvrID() = transceiverId; - portDetails.tcvrPresent() = - getTransceiverStr(transceiverEntries, transceiverId); - } - if (auto pfc = portInfo.get_pfc()) { - std::string pfcString = ""; - if (*pfc->tx()) { - pfcString = "TX "; - } - if (*pfc->rx()) { - pfcString += "RX "; - } - if (*pfc->watchdog()) { - pfcString += "WD"; - } - portDetails.pfc() = pfcString; - } else { - std::string pauseString = ""; - if (portInfo.get_txPause()) { - pauseString = "TX "; - } - if (portInfo.get_rxPause()) { - pauseString += "RX"; - } - portDetails.pause() = pauseString; - } - portDetails.numUnicastQueues() = portInfo.get_portQueues().size(); - for (const auto& queue : portInfo.get_portQueues()) { - if (!queue.get_name().empty()) { - portDetails.queueIdToName()->insert( - {queue.get_id(), queue.get_name()}); - } - } - - const auto& iter = portStats.find(portName); - if (iter != portStats.end()) { - auto portHwStatsEntry = iter->second; - cli::PortHwStatsEntry cliPortStats; - cliPortStats.inUnicastPkts() = portHwStatsEntry.get_inUnicastPkts_(); - cliPortStats.inDiscardPkts() = portHwStatsEntry.get_inDiscards_(); - cliPortStats.inErrorPkts() = portHwStatsEntry.get_inErrors_(); - cliPortStats.outDiscardPkts() = portHwStatsEntry.get_outDiscards_(); - cliPortStats.outCongestionDiscardPkts() = - portHwStatsEntry.get_outCongestionDiscardPkts_(); - cliPortStats.queueOutDiscardBytes() = - portHwStatsEntry.get_queueOutDiscardBytes_(); - cliPortStats.inCongestionDiscards() = - portHwStatsEntry.get_inCongestionDiscards_(); - cliPortStats.queueOutBytes() = portHwStatsEntry.get_queueOutBytes_(); - if (portInfo.get_pfc()) { - cliPortStats.outPfcPriorityPackets() = - portHwStatsEntry.get_outPfc_(); - cliPortStats.inPfcPriorityPackets() = portHwStatsEntry.get_inPfc_(); - cliPortStats.outPfcPackets() = portHwStatsEntry.get_outPfcCtrl_(); - cliPortStats.inPfcPackets() = portHwStatsEntry.get_inPfcCtrl_(); - } else { - cliPortStats.outPausePackets() = portHwStatsEntry.get_outPause_(); - cliPortStats.inPausePackets() = portHwStatsEntry.get_inPause_(); - } - cliPortStats.ingressBytes() = portHwStatsEntry.get_inBytes_(); - cliPortStats.egressBytes() = portHwStatsEntry.get_outBytes_(); - portDetails.hwPortStats() = cliPortStats; - } - model.portEntries()->push_back(portDetails); - } - } - - std::sort( - model.portEntries()->begin(), - model.portEntries()->end(), - [&](const cli::PortEntry& a, const cli::PortEntry& b) { - return utils::comparePortName(a.get_name(), b.get_name()); - }); + const std::vector& drainedInterfaces); - return model; - } + void printOutput(const RetType& model, std::ostream& out = std::cout); }; } // namespace facebook::fboss diff --git a/fboss/cli/fboss2/test/AggregationParsingTest.cpp b/fboss/cli/fboss2/test/AggregationParsingTest.cpp index 16dc832bbc887..8c262c14534c1 100644 --- a/fboss/cli/fboss2/test/AggregationParsingTest.cpp +++ b/fboss/cli/fboss2/test/AggregationParsingTest.cpp @@ -4,11 +4,9 @@ #include #include -#include #include "fboss/cli/fboss2/commands/show/port/CmdShowPort.h" #include "fboss/cli/fboss2/gen-cpp2/cli_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; namespace facebook::fboss { diff --git a/fboss/cli/fboss2/test/AggregationTest.cpp b/fboss/cli/fboss2/test/AggregationTest.cpp index c48fcb3aef95e..14932977231c8 100644 --- a/fboss/cli/fboss2/test/AggregationTest.cpp +++ b/fboss/cli/fboss2/test/AggregationTest.cpp @@ -4,10 +4,8 @@ #include #include -#include #include #include "fboss/cli/fboss2/commands/show/port/CmdShowPort.h" -#include "fboss/cli/fboss2/gen-cpp2/cli_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" #include "nettools/common/TestUtils.h" diff --git a/fboss/cli/fboss2/test/AggregationValidationTest.cpp b/fboss/cli/fboss2/test/AggregationValidationTest.cpp index 782042c505959..93ef77a9a6972 100644 --- a/fboss/cli/fboss2/test/AggregationValidationTest.cpp +++ b/fboss/cli/fboss2/test/AggregationValidationTest.cpp @@ -4,12 +4,9 @@ #include #include -#include -#include #include "fboss/cli/fboss2/commands/show/port/CmdShowPort.h" #include "fboss/cli/fboss2/gen-cpp2/cli_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; namespace facebook::fboss { diff --git a/fboss/cli/fboss2/test/BUCK b/fboss/cli/fboss2/test/BUCK index 71322f2195cac..31cd83d5247be 100644 --- a/fboss/cli/fboss2/test/BUCK +++ b/fboss/cli/fboss2/test/BUCK @@ -119,7 +119,6 @@ cpp_unittest( "//folly:network_address", "//folly/json:dynamic", "//neteng/fboss/bgp/if:bgp_thrift-cpp2-services", - "//neteng/fboss/bgp/if:bgp_thrift-cpp2-types", "//nettools/common:TestUtils", ], external_deps = [("boost", None, "boost_algorithm")], diff --git a/fboss/cli/fboss2/test/CmdArgsTest.cpp b/fboss/cli/fboss2/test/CmdArgsTest.cpp index 40506d1dc2d39..e263eb936994c 100644 --- a/fboss/cli/fboss2/test/CmdArgsTest.cpp +++ b/fboss/cli/fboss2/test/CmdArgsTest.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdHelpTest.cpp b/fboss/cli/fboss2/test/CmdHelpTest.cpp index a2f237ab67909..f45ab08dffe80 100644 --- a/fboss/cli/fboss2/test/CmdHelpTest.cpp +++ b/fboss/cli/fboss2/test/CmdHelpTest.cpp @@ -8,7 +8,6 @@ #include "fboss/cli/fboss2/utils/CmdClientUtils.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdSetPortStateTest.cpp b/fboss/cli/fboss2/test/CmdSetPortStateTest.cpp index f5e9f4093000e..d21f813eece43 100644 --- a/fboss/cli/fboss2/test/CmdSetPortStateTest.cpp +++ b/fboss/cli/fboss2/test/CmdSetPortStateTest.cpp @@ -11,7 +11,6 @@ #include "fboss/cli/fboss2/commands/set/port/state/CmdSetPortState.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowArpTest.cpp b/fboss/cli/fboss2/test/CmdShowArpTest.cpp index aeb500543d46b..73b63c3555774 100644 --- a/fboss/cli/fboss2/test/CmdShowArpTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowArpTest.cpp @@ -11,7 +11,6 @@ #include "fboss/cli/fboss2/commands/show/arp/CmdShowArp.h" #include "fboss/cli/fboss2/commands/show/arp/gen-cpp2/model_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowHardwareTest.cpp b/fboss/cli/fboss2/test/CmdShowHardwareTest.cpp index a4d0dd65000ce..27224513dac63 100644 --- a/fboss/cli/fboss2/test/CmdShowHardwareTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowHardwareTest.cpp @@ -5,9 +5,7 @@ #include "fboss/cli/fboss2/commands/show/hardware/CmdShowHardware.h" #include "fboss/cli/fboss2/commands/show/hardware/gen-cpp2/model_types.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" #include "folly/json/dynamic.h" -#include "folly/json/json.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowInterfaceFlapsTest.cpp b/fboss/cli/fboss2/test/CmdShowInterfaceFlapsTest.cpp index 8f82db548bc86..db13d6447cad0 100644 --- a/fboss/cli/fboss2/test/CmdShowInterfaceFlapsTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowInterfaceFlapsTest.cpp @@ -7,7 +7,6 @@ #include "fboss/cli/fboss2/commands/show/interface/flaps/CmdShowInterfaceFlaps.h" #include "fboss/cli/fboss2/commands/show/interface/flaps/gen-cpp2/model_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" #include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowInterfaceStatusTest.cpp b/fboss/cli/fboss2/test/CmdShowInterfaceStatusTest.cpp index 8bfbee8e88b75..ad78c5a5e3706 100644 --- a/fboss/cli/fboss2/test/CmdShowInterfaceStatusTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowInterfaceStatusTest.cpp @@ -6,8 +6,6 @@ #include "fboss/cli/fboss2/commands/show/interface/status/CmdShowInterfaceStatus.h" #include "fboss/cli/fboss2/commands/show/interface/status/gen-cpp2/model_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowInterfaceTrafficTest.cpp b/fboss/cli/fboss2/test/CmdShowInterfaceTrafficTest.cpp index 6b647e58bed8c..05a5dcee49a5c 100644 --- a/fboss/cli/fboss2/test/CmdShowInterfaceTrafficTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowInterfaceTrafficTest.cpp @@ -13,7 +13,6 @@ #include "fboss/cli/fboss2/commands/show/interface/traffic/CmdShowInterfaceTraffic.h" #include "fboss/cli/fboss2/commands/show/interface/traffic/gen-cpp2/model_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowMirrorTest.cpp b/fboss/cli/fboss2/test/CmdShowMirrorTest.cpp index daf24f28b9ef6..3814ec2fdd8ff 100644 --- a/fboss/cli/fboss2/test/CmdShowMirrorTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowMirrorTest.cpp @@ -6,7 +6,6 @@ #include "fboss/cli/fboss2/commands/show/mirror/CmdShowMirror.h" #include "fboss/cli/fboss2/commands/show/mirror/gen-cpp2/model_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" #include "nettools/common/TestUtils.h" using namespace ::testing; diff --git a/fboss/cli/fboss2/test/CmdShowNdpTest.cpp b/fboss/cli/fboss2/test/CmdShowNdpTest.cpp index 760c9895409cb..ae7f569defbd0 100644 --- a/fboss/cli/fboss2/test/CmdShowNdpTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowNdpTest.cpp @@ -8,7 +8,6 @@ #include #include "fboss/agent/AddressUtil.h" -#include "fboss/cli/fboss2/utils/CmdClientUtils.h" #include "fboss/cli/fboss2/commands/show/ndp/CmdShowNdp.h" #include "fboss/cli/fboss2/commands/show/ndp/gen-cpp2/model_types.h" diff --git a/fboss/cli/fboss2/test/CmdShowPortTest.cpp b/fboss/cli/fboss2/test/CmdShowPortTest.cpp index ba1d49d625fd6..f3d2ba4fc9a03 100644 --- a/fboss/cli/fboss2/test/CmdShowPortTest.cpp +++ b/fboss/cli/fboss2/test/CmdShowPortTest.cpp @@ -16,7 +16,6 @@ #include "configerator/structs/neteng/fboss/bgp/gen-cpp2/bgp_config_types.h" #include "neteng/fboss/bgp/if/gen-cpp2/TBgpService.h" -#include "neteng/fboss/bgp/if/gen-cpp2/bgp_thrift_types.h" using namespace ::testing; using namespace facebook::neteng::fboss::bgp::thrift; diff --git a/fboss/cli/fboss2/test/FilterValidationTest.cpp b/fboss/cli/fboss2/test/FilterValidationTest.cpp index aab968d2762fd..eab22036aa267 100644 --- a/fboss/cli/fboss2/test/FilterValidationTest.cpp +++ b/fboss/cli/fboss2/test/FilterValidationTest.cpp @@ -11,7 +11,6 @@ #include "fboss/cli/fboss2/commands/show/port/CmdShowPort.h" #include "fboss/cli/fboss2/gen-cpp2/cli_types.h" #include "fboss/cli/fboss2/test/CmdHandlerTestBase.h" -#include "nettools/common/TestUtils.h" using namespace ::testing; namespace facebook::fboss { diff --git a/fboss/cli/fboss2/utils/NetwhoamiUtils.cpp b/fboss/cli/fboss2/utils/NetwhoamiUtils.cpp index e88bf72942c74..86b77dcb1c4f4 100644 --- a/fboss/cli/fboss2/utils/NetwhoamiUtils.cpp +++ b/fboss/cli/fboss2/utils/NetwhoamiUtils.cpp @@ -5,6 +5,7 @@ #include "neteng/netwhoami/lib/cpp/Recover.h" namespace facebook::fboss { + std::optional getNetWhoAmI( const HostInfo& hostInfo) { try { @@ -21,4 +22,10 @@ std::optional getNetWhoAmI( return std::nullopt; } } + +bool isDsfRole(Role role) { + return role == Role::FDSW || role == Role::SDSW || role == Role::EDSW || + role == Role::RDSW; +} + } // namespace facebook::fboss diff --git a/fboss/cli/fboss2/utils/NetwhoamiUtils.h b/fboss/cli/fboss2/utils/NetwhoamiUtils.h index da1b5dcb1d007..ada2e32f98965 100644 --- a/fboss/cli/fboss2/utils/NetwhoamiUtils.h +++ b/fboss/cli/fboss2/utils/NetwhoamiUtils.h @@ -6,6 +6,12 @@ #include "fboss/cli/fboss2/utils/HostInfo.h" namespace facebook::fboss { + +using facebook::netwhoami::Role; + std::optional getNetWhoAmI( const HostInfo& hostInfo); + +bool isDsfRole(Role role); + } // namespace facebook::fboss diff --git a/fboss/docs/bsp_api_specification.md b/fboss/docs/bsp_api_specification.md index b5af56587237c..bd9dbf0539f4c 100644 --- a/fboss/docs/bsp_api_specification.md +++ b/fboss/docs/bsp_api_specification.md @@ -14,9 +14,10 @@ - [2.2.3 SPI Controller (spi\_master)](#223-spi-controller-spi_master) - [2.2.4 GPIO Controller (gpiochip)](#224-gpio-controller-gpiochip) - [2.2.5 HWMON and PMBUS Device](#225-hwmon-and-pmbus-device) - - [2.2.6 Fan Watchdog (watchdog\_fan)](#226-fan-watchdog-watchdog_fan) - - [2.2.7 Transceiver Controller (xcvr\_ctrl)](#227-transceiver-controller-xcvr_ctrl) - - [2.2.8 LED](#228-led) + - [2.2.6 Fan Controller (fan\_ctrl)](#226-fan-controller-fan_ctrl) + - [2.2.7 Fan Watchdog (watchdog\_fan)](#227-fan-watchdog-watchdog_fan) + - [2.2.8 Transceiver Controller (xcvr\_ctrl)](#228-transceiver-controller-xcvr_ctrl) + - [2.2.9 LED](#229-led) # 1. Device References @@ -55,15 +56,11 @@ header file. The FPGA Info driver exports the following sysfs files: -* `fpga_ver` +* `fw_ver` * **Type**: unsigned integer - * **Description**: This file reports the FPGA's major firmware version. + * **Description**: This file reports the FPGA's firmware version in the format `"%u.%u\n", major_ver, minor_ver` * **Read/Write**: RO -* `fpga_sub_ver` - * **Type**: unsigned integer - * **Description**: This file reports the FPGA's minor firmware version. - * **Read/Write**: RO ### 2.2.2 I2C Controller (i2c_master) @@ -143,7 +140,20 @@ defines all the details: * [kernel.org/doc/Documentation/hwmon/sysfs-interface](https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface) -### 2.2.6 Fan Watchdog (watchdog_fan) + +### 2.2.6 Fan Controller (fan_ctrl) + +**Interface:** + +Fan control devices shall be implemented as hwmon devices and as such will follow the hwmon sysfs interface generally. + +**Behavior:** + +In cases where a fan is not present, all writes and reads to/from that fan must fail. For example, reading the RPM from a fan +which is not present should not return 0 or some other "bad" value, but rather the operation must return an error code. + + +### 2.2.7 Fan Watchdog (watchdog_fan) **Interface:** @@ -155,7 +165,7 @@ FBOSS Watchdog devices support `start`, `stop`, `ping` and `set_timeout` operations. -### 2.2.7 Transceiver Controller (xcvr_ctrl) +### 2.2.8 Transceiver Controller (xcvr_ctrl) **Interface:** @@ -177,7 +187,7 @@ The `xcvr_ctrl` driver exports following sysfs entries for each transceiver port * **Read/Write**: RO -### 2.2.8 LED +### 2.2.9 LED LEDs are accessed via their original sysfs paths since they are non-dynamic. No symlinks are created by PlatformManager. All leds are found at `/sys/class/leds/` diff --git a/fboss/docs/meta_eeprom_format_v5.md b/fboss/docs/meta_eeprom_format_v5.md index 99319cf2db2ee..8b590a62c28a4 100644 --- a/fboss/docs/meta_eeprom_format_v5.md +++ b/fboss/docs/meta_eeprom_format_v5.md @@ -1,9 +1,7 @@ # **Meta FBOSS EEPROM Format v5** -All Field Replaceable Unit (FRU) ID EEPROMs must follow the format below. This -replaces the Meta FBOSS EEPROM Format V4. The major changes in this format are -adoption of big-endian format, and flexibility to program multiple MAC addresses -for different purposes. +All Field Replaceable Unit (FRU) ID EEPROMs must follow the format below. EEPROM +Format V5 is replaced by EEPROM Format V6 for all new platforms. ## **Conventions:** @@ -30,9 +28,10 @@ compatible with the past versions. - There must not be any gap between the TLV entries. - The `type` field is always **one byte**. - The `length` field is always **one byte**. It contains the size of the - corresponding `value` field. + corresponding `value` field. The value of the `length` field cannot be 0. - The CRC field must be the **last entry**. The other TLV entries can be in any order. +- Each field can appear no more than once in the content. - The below table only lists the Mandatory fields from the Meta software teams. Please check with Meta Manufacturing & Quality team to ensure other Mandatory fields are taken care of. @@ -99,7 +98,7 @@ and can be used as the reference to check the correctness of the algorithm. **Raw EEPROM BLOB:** ``` -[root@devserver ~]$ hexdump -C Juice=Juice +[root@devserver ~]$ cat eeprom_file | hexdump -C 00000000 fb fb 05 ff 01 0d 46 49 52 53 54 5f 53 51 55 45 |......FIRST_SQUE| 00000010 45 5a 45 02 08 32 30 31 32 33 34 35 36 03 08 53 |EZE..20123456..S| 00000020 59 53 41 31 32 33 34 04 0c 50 43 42 41 31 32 33 |YSA1234..PCBA123| @@ -122,8 +121,8 @@ and can be used as the reference to check the correctness of the algorithm. **Output after parsing :** ``` -[root@devserver ~]# ./weutil --path /v5_eeprom 2>/dev/null -Wedge EEPROM : /v5_eeprom +[root@devserver ~]# ./weutil --path eeprom_file +Version: 5 Product Name: FIRST_SQUEEZE Product Part Number: 20123456 System Assembly Part Number: SYSA1234 diff --git a/fboss/docs/meta_eeprom_format_v6.md b/fboss/docs/meta_eeprom_format_v6.md new file mode 100644 index 0000000000000..ade152cba37e3 --- /dev/null +++ b/fboss/docs/meta_eeprom_format_v6.md @@ -0,0 +1,166 @@ +# **Meta FBOSS EEPROM Format v6** + +All Field Replaceable Unit (FRU) ID EEPROMs must follow the format below. This +replaces the Meta FBOSS EEPROM Format V5. + +## **Conventions:** + +- All fields are **big endian**. +- String terminator `\0` is **not** included in the string field. The parser + will determine the string size by reading the length field of TLV entries. + +## **Header:** + +All Meta EEPROMs must start with the 4-byte header below. This header is +compatible with the past versions. + +| Offset (byte) | Length (bytes) | Value | Description | +| :-----------: | :------------: | ------ | -------------------------- | +| 0 | 2 | 0xFBFB | Magic word | +| 2 | 1 | 0x6 | Meta EEPROM Format Version | +| 3 | 1 | 0XFF | Reserved for future use | + +## **Body:** + +- The body must come after the 4-byte header. +- The body consists of the following well-defined Type-Length-Value (TLV) + entries. +- There must not be any gap between the TLV entries. +- The `type` field is always **one byte**. +- The `length` field is always **one byte**. It contains the size of the + corresponding `value` field. The value of the `length` field cannot be 0. +- The CRC field must be the **last entry**. The other TLV entries can be in any + order. +- Each field can appear no more than once in the content. +- The below table only lists the Mandatory fields from the Meta software teams. + Please check with Meta Manufacturing & Quality team to ensure other Mandatory + fields are taken care of. + +| Type | Length (bytes) | Value | Mandatory (Y/N) | Description | +| ---- | -------------- | ------------------------------------------------------------------------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0 | N/A | N/A | N/A | Reserved | +| 1 | Variable | ASCII String | Y | Product Name | +| 2 | Variable | ASCII String | N | Top Level 20- Product Part Number | +| 3 | 8 | ASCII String | N | System Assembly Part Number | +| 4 | 12 | ASCII String | N | Meta PCBA Part Number | +| 5 | 12 | ASCII String | N | Meta PCB Part Number | +| 6 | Variable | ASCII String | N | ODM/JDM PCBA Part Number | +| 7 | Variable | ASCII String | N | ODM/JDM PCBA Serial Number | +| 8 | 1 | Unsigned Integer | Y | Production State. 1 denotes EVT. 2 denotes DVT, 3 denotes PVT. 4 denotes MP. This field cannot be 0\. | +| 9 | 1 | Unsigned Integer | Y | Production Sub-State. Used to denote sub-phases within EVT, DVT and PVT phases. Example, 1 for EVT1, 2 for EVT2, 1 for DVT1 etc. This field cannot be 0 | +| 10 | 1 | Unsigned Integer | Y | Re-Spin/Variant Indicator. Used to uniquely identify platforms which have second-source or variance in hardware. This is not to be confused with EVT, DVT phase differences. For example, a SKU in MP might use voltage-regulators from two different vendors. But everything else (including other fields in EEPROM) will be the same across the two variants of the SKU. In this case, we assign a unique number in this field to uniquely identify the SKU with different voltage regulators. This field can be 0 if there are no respins or variants. | +| 11 | Variable | ASCII String | Y | Product Serial Number | +| 12 | Variable | ASCII String | N | System Manufacturer | +| 13 | 8 | ASCII String | N | System Manufacturing Date, in “YYYYMMDD” format. | +| 14 | Variable | ASCII String | N | PCB Manufacturer | +| 15 | Variable | ASCII String | N | Assembled at | +| 16 | Variable | ASCII String | N | EEPROM location on Fabric | +| 17 | 8 | 48 bits of Base MAC Address in the first six bytes. Unsigned Integer in the last two bytes. | N | X86 CPU MAC Addresses. The first six bytes represent the Base MAC Address, and the last two bytes represent the number of MAC Addresses from the Base. | +| 18 | 8 | 48 bits of Base MAC Address in the first six bytes. Unsigned Integer in the last two bytes. | N | BMC MAC Addresses. The first six bytes represent the Base MAC Address, and the last two bytes represent the number of MAC Addresses from the Base. | +| 19 | 8 | 48 bits of Base MAC Address in the first six bytes. Unsigned Integer in the last two bytes. | N | Switch ASIC MAC Addresses. The first six bytes represent the Base MAC Address, and the last two bytes represent the number of MAC Addresses from the Base. | +| 20 | 8 | 48 bits of Base MAC Address in the first six bytes. Unsigned Integer in the last two bytes. | N | Meta Reserved MAC Addresses. The first six bytes represent the Base MAC Address, and the last two bytes represent the number of MAC Addresses from the Base. | +| 21 | 1 | Unsigned Integer | N | A value of 1 indicates whether the unit has gone through RMA. Otherwise this field can be omitted or left with value 0 | +| 101 | Variable | Vendor Defined | N | Vendors can use this field for their own purposes. Meta EEPROM parsing tools (weutil) will just dump the contents of this field. The value will not be interpreted and used in any way. | +| 102 | Variable | Vendor Defined | N | Vendors can use this field for their own purposes. Meta EEPROM parsing tools (weutil) will just dump the contents of this field. The value will not be interpreted and used in any way. | +| 103 | Variable | Vendor Defined | N | Vendors can use this field for their own purposes. Meta EEPROM parsing tools (weutil) will just dump the contents of this field. The value will not be interpreted and used in any way. | +| 250 | 2 | Unsigned Integer | Y | CRC16. Refer to the “Checksum” section for details | + +## **Checksum:** + +We use the 16 bits CRC-CCITT-AUG specification with the following key +attributes: + +- Width \= 16 bits +- Truncated polynomial \= 0x1021 +- Initial value \= 0x1D0F +- Input data is NOT reflected +- Output CRC is NOT reflected +- No XOR is performed on the output CRC + +All EEPROM content bytes (starting from Meta EEPROM header up to the CRC16 TLV, +but NOT including the CRC16 TLV field) are included for this CRC16 calculation. +Be aware there is a 16 bits argument for CRC16 calculation. For example, if +CRC16 Type field is located at offset 63, CRC16 calculation will include bytes +from offset 0 to offset 62, inclusively. + +Check +https://github.com/facebook/fboss/blob/main/fboss/platform/weutil/Crc16CcittAug.cpp +for CRC16 CCITT AUG implementation. + +The below list shows the CRC16 output values for corner cases of byte streams +and can be used as the reference to check the correctness of the algorithm. + +| Byte Stream | Length | CRC16 (per CRC-CCITT) | +| :------------------------------------------------------------ | :----- | :-------------------- | +| NULL | 0 | 0x1D0F | +| A | 1 | 0x9479 | +| 123456789 | 9 | 0xE5CC | +| A string of 256 upper case “A” characters with no line breaks | 256 | 0XE938 | + +## **Example:** + +**Raw EEPROM BLOB:** + +``` +> cat eeprom_file | hexdump -C +00000000 fb fb 06 ff 01 0d 46 49 52 53 54 5f 53 51 55 45 |......FIRST_SQUE| +00000010 45 5a 45 02 08 32 30 31 32 33 34 35 36 03 08 53 |EZE..20123456..S| +00000020 59 53 41 31 32 33 34 04 0c 50 43 42 41 31 32 33 |YSA1234..PCBA123| +00000030 34 35 36 37 20 05 0c 50 43 42 31 32 33 34 35 36 |4567 ..PCB123456| +00000040 37 38 20 06 0c 4d 59 4f 44 4d 31 32 33 34 35 36 |78 ..MYODM123456| +00000050 37 07 0d 4f 53 31 32 33 34 35 36 37 38 39 41 42 |7..OS123456789AB| +00000060 08 01 01 09 01 00 0a 01 01 0b 0d 50 53 31 32 33 |...........PS123| +00000070 34 35 36 37 38 39 30 41 0c 07 55 4e 41 5f 4d 41 |4567890A..UNA_MA| +00000080 53 0d 08 32 30 31 33 30 32 30 33 0e 05 54 45 52 |S..20130203..TER| +00000090 5a 4f 0f 09 4a 55 49 43 45 54 4f 52 59 10 07 42 |ZO..JUICETORY..B| +000000a0 55 44 4f 4b 41 4e 11 08 11 22 33 44 55 66 01 02 |UDOKAN..."3DUf..| +000000b0 12 08 12 34 56 78 9a bc 03 04 13 08 66 55 44 33 |...4Vx......fUD3| +000000c0 22 11 02 00 14 08 fe dc ba 98 76 54 00 02 15 01 |".........vT....| +000000d0 01 65 05 01 01 01 01 01 66 05 48 65 6c 6c 6f fa |.e......f.Hello.| +000000e0 02 4a 05 ff ff ff ff ff ff ff ff ff ff ff ff ff |.J..............| +000000f0 ff |.| +``` + +**Output after parsing :** + +``` +> ./weutil --path eeprom_file +Version: 6 +Product Name: FIRST_SQUEEZE +Product Part Number: 20123456 +System Assembly Part Number: SYSA1234 +Meta PCBA Part Number: PCBA1234567 +Meta PCB Part Number: PCB12345678 +ODM/JDM PCBA Part Number: MYODM1234567 +ODM/JDM PCBA Serial Number: OS123456789AB +Product Production State: 1 +Product Version: 0 +Product Sub-Version: 1 +Product Serial Number: PS1234567890A +System Manufacturer: UNA_MAS +System Manufacturing Date: 20130203 +PCB Manufacturer: TERZO +Assembled At: JUICETORY +EEPROM location on Fabric: BUDOKAN +X86 CPU MAC Base: 11:22:33:44:55:66 +X86 CPU MAC Address Size: 258 +BMC MAC Base: 12:34:56:78:9a:bc +BMC MAC Address Size: 772 +Switch ASIC MAC Base: 66:55:44:33:22:11 +Switch ASIC MAC Address Size: 512 +META Reserved MAC Base: fe:dc:ba:98:76:54 +META Reserved MAC Address Size: 2 +RMA: 1 +Vendor Defined Field 1: 0x0101010101 +Vendor Defined Field 2: 0x48656c6c6f +Vendor Defined Field 3: +CRC16: 0x4a05 (CRC Matched) +``` + +**Note:** In case the CRC programmed in the EEPROM mismatches the CRC calculated +by weutil, the last line printing will display the programmed CRC and expected +CRC. + +``` +CRC16: 0xa6b7 (CRC Mismatch. Expected 0x4a05) +``` diff --git a/fboss/fsdb/benchmarks/BUCK b/fboss/fsdb/benchmarks/BUCK new file mode 100644 index 0000000000000..472a7162a0d83 --- /dev/null +++ b/fboss/fsdb/benchmarks/BUCK @@ -0,0 +1,50 @@ +load("@fbcode_macros//build_defs:cpp_benchmark.bzl", "cpp_benchmark") +load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library") + +oncall("fboss_agent_push") + +cpp_library( + name = "state_generator", + srcs = ["StateGenerator.cpp"], + headers = [ + "StateGenerator.h", + ], + exported_deps = [ + "//fboss/agent:agent_stats-cpp2-types", + "//fboss/agent/hw:hardware_stats-cpp2-types", + ], +) + +cpp_library( + name = "fsdb_benchmark_helper", + srcs = ["FsdbBenchmarkTestHelper.cpp"], + headers = [ + "FsdbBenchmarkTestHelper.h", + ], + exported_deps = [ + "//fboss/fsdb/client:fsdb_pub_sub", + "//fboss/fsdb/tests/utils:fsdb_test_server", + "//folly/synchronization:baton", + ], +) + +cpp_benchmark( + name = "fsdb_bench_test", + srcs = [ + "FsdbBenchmarksMain.cpp", + "VoqCounterScaleBench.cpp", + ], + deps = [ + "fbsource//third-party/googletest:gtest", + ":fsdb_benchmark_helper", + ":state_generator", + "//folly:benchmark", + "//folly/init:init", + "//folly/json:dynamic", + "//folly/logging:init", + "//folly/logging:logging", + ], + external_deps = [ + "gflags", + ], +) diff --git a/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.cpp b/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.cpp new file mode 100644 index 0000000000000..b2fc0919d3783 --- /dev/null +++ b/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.cpp @@ -0,0 +1,81 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include "fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.h" + +namespace { + +const thriftpath::RootThriftPath + stateRoot; +const thriftpath::RootThriftPath + statsRoot; +const std::vector kPublishRoot{"agent"}; + +} // anonymous namespace + +namespace facebook::fboss::fsdb::test { + +void FsdbBenchmarkTestHelper::setup() { + fsdbTestServer_ = std::make_unique(); + FLAGS_fsdbPort = fsdbTestServer_->getFsdbPort(); + const std::string clientId = "agent"; + pubsubMgr_ = std::make_unique(clientId); +} + +void FsdbBenchmarkTestHelper::publishPath( + const AgentStats& stats, + uint64_t stamp) { + fsdb::OperState state; + state.set_contents( + apache::thrift::BinarySerializer::serialize(stats)); + state.protocol() = fsdb::OperProtocol::BINARY; + state.metadata() = fsdb::OperMetadata(); + state.metadata()->lastConfirmedAt() = stamp; + pubsubMgr_->publishStat(std::move(state)); +} + +void FsdbBenchmarkTestHelper::startPublisher() { + auto stateChangeCb = [this]( + fsdb::FsdbStreamClient::State /* oldState */, + fsdb::FsdbStreamClient::State newState) { + if (newState == fsdb::FsdbStreamClient::State::CONNECTED) { + publisherConnected_.post(); + readyForPublishing_.store(true); + } else { + readyForPublishing_.store(false); + } + }; + // agent is Path publisher for stats + pubsubMgr_->createStatPathPublisher( + getAgentStatsPath(), std::move(stateChangeCb)); +} + +void FsdbBenchmarkTestHelper::waitForPublisherConnected() { + publisherConnected_.wait(); +} + +void FsdbBenchmarkTestHelper::stopPublisher(bool gr) { + readyForPublishing_.store(false); + pubsubMgr_->removeStatPathPublisher(gr); +} + +void FsdbBenchmarkTestHelper::TearDown() { + fsdbTestServer_.reset(); + if (pubsubMgr_) { + stopPublisher(); + CHECK(!readyForPublishing_.load()); + pubsubMgr_.reset(); + } +} + +std::optional +FsdbBenchmarkTestHelper::getPublisherRootMetadata(bool isStats) { + auto metadata = + fsdbTestServer_->getPublisherRootMetadata(*kPublishRoot.begin(), isStats); + return metadata; +} + +std::vector FsdbBenchmarkTestHelper::getAgentStatsPath() { + return statsRoot.agent().tokens(); +} + +} // namespace facebook::fboss::fsdb::test diff --git a/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.h b/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.h new file mode 100644 index 0000000000000..525db6f9968d2 --- /dev/null +++ b/fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.h @@ -0,0 +1,38 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include + +#include "fboss/fsdb/client/FsdbPubSubManager.h" +#include "fboss/fsdb/tests/utils/FsdbTestServer.h" + +namespace facebook::fboss::fsdb::test { + +class FsdbBenchmarkTestHelper { + public: + void setup(); + void publishPath(const AgentStats& stats, uint64_t stamp); + void startPublisher(); + void stopPublisher(bool gr = false); + void TearDown(); + void waitForPublisherConnected(); + bool isPublisherConnected() { + return readyForPublishing_.load(); + } + std::optional getPublisherRootMetadata( + bool isStats); + fsdb::test::FsdbTestServer& testServer() { + return *fsdbTestServer_; + } + + private: + std::vector getAgentStatsPath(); + + std::unique_ptr fsdbTestServer_; + std::unique_ptr pubsubMgr_; + folly::Baton<> publisherConnected_; + std::atomic_bool readyForPublishing_ = false; +}; + +} // namespace facebook::fboss::fsdb::test diff --git a/fboss/fsdb/benchmarks/FsdbBenchmarksMain.cpp b/fboss/fsdb/benchmarks/FsdbBenchmarksMain.cpp new file mode 100644 index 0000000000000..7197d1ae7b388 --- /dev/null +++ b/fboss/fsdb/benchmarks/FsdbBenchmarksMain.cpp @@ -0,0 +1,59 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +FOLLY_INIT_LOGGING_CONFIG("fboss=DBG3; default:async=true"); + +DECLARE_int64(bm_max_iters); + +inline bool listBenchmarks(int* argc, char** argv) { + for (int i = 0; i < *argc; i++) { + if (strcmp(argv[i], "--bm_list") == 0) { + return true; + } + } + return false; +} + +inline int64_t timevalToUsec(const timeval& tv) { + const int64_t kUsecPerSecond = 1000000; + + return (int64_t(tv.tv_sec) * kUsecPerSecond) + tv.tv_usec; +} + +int main(int argc, char* argv[]) { + struct rusage startUsage, endUsage; + + getrusage(RUSAGE_SELF, &startUsage); + + FLAGS_bm_max_iters = 2; + + if (!listBenchmarks(&argc, argv)) { + testing::InitGoogleTest(&argc, argv); + } + + folly::Init init(&argc, &argv, false); + + folly::runBenchmarks(); + + getrusage(RUSAGE_SELF, &endUsage); + auto cpuTime = + (timevalToUsec(endUsage.ru_stime) - timevalToUsec(startUsage.ru_stime)) + + (timevalToUsec(endUsage.ru_utime) - timevalToUsec(startUsage.ru_utime)); + + folly::dynamic rusageJson = folly::dynamic::object; + rusageJson["cpu_time_usec"] = cpuTime; + rusageJson["max_rss"] = endUsage.ru_maxrss; + std::cout << toPrettyJson(rusageJson) << std::endl; + + return 0; +} diff --git a/fboss/fsdb/benchmarks/StateGenerator.cpp b/fboss/fsdb/benchmarks/StateGenerator.cpp new file mode 100644 index 0000000000000..f1ba0002591b9 --- /dev/null +++ b/fboss/fsdb/benchmarks/StateGenerator.cpp @@ -0,0 +1,70 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include "fboss/fsdb/benchmarks/StateGenerator.h" +#include "fboss/agent/hw/gen-cpp2/hardware_stats_types.h" + +namespace facebook::fboss::fsdb::test { + +void StateGenerator::fillVoqStats( + AgentStats* stats, + int nSysPorts, + int nVoqsPerSysPort, + int value) { + stats->sysPortStatsMap()->emplace(0, std::map()); + for (int portId = 0; portId < nSysPorts; ++portId) { + std::string portName = folly::to(":eth/", portId, "/1"); + HwSysPortStats sysPortStatsEntry; + for (int queueId = 0; queueId < nVoqsPerSysPort; queueId++) { + sysPortStatsEntry.queueOutDiscardBytes_()[queueId] = value; + sysPortStatsEntry.queueOutBytes_()[queueId] = value; + sysPortStatsEntry.queueWatermarkBytes_()[queueId] = value; + sysPortStatsEntry.queueWredDroppedPackets_()[queueId] = value; + sysPortStatsEntry.queueCreditWatchdogDeletedPackets_()[queueId] = value; + sysPortStatsEntry.queueLatencyWatermarkNsec_()[queueId] = value; + } + sysPortStatsEntry.portName_() = portName; + sysPortStatsEntry.timestamp_() = 1; + stats->sysPortStatsMap()->at(0).emplace( + portName, std::move(sysPortStatsEntry)); + } +} + +void StateGenerator::updateVoqStats(AgentStats* stats, int increment) { + for (auto& [switchIdx, sysPortStatsMap] : *stats->sysPortStatsMap()) { + for (auto& [portName, sysPortStatsEntry] : sysPortStatsMap) { + for (int queueId = 0; + queueId < sysPortStatsEntry.queueOutDiscardBytes_()->size(); + queueId++) { + sysPortStatsEntry.queueOutDiscardBytes_()[queueId] += increment; + } + for (int queueId = 0; + queueId < sysPortStatsEntry.queueOutBytes_()->size(); + queueId++) { + sysPortStatsEntry.queueOutBytes_()[queueId] += increment; + } + for (int queueId = 0; + queueId < sysPortStatsEntry.queueWatermarkBytes_()->size(); + queueId++) { + sysPortStatsEntry.queueWatermarkBytes_()[queueId] += increment; + } + for (int queueId = 0; + queueId < sysPortStatsEntry.queueWredDroppedPackets_()->size(); + queueId++) { + sysPortStatsEntry.queueWredDroppedPackets_()[queueId] += increment; + } + for (int queueId = 0; queueId < + sysPortStatsEntry.queueCreditWatchdogDeletedPackets_()->size(); + queueId++) { + sysPortStatsEntry.queueCreditWatchdogDeletedPackets_()[queueId] += + increment; + } + for (int queueId = 0; + queueId < sysPortStatsEntry.queueLatencyWatermarkNsec_()->size(); + queueId++) { + sysPortStatsEntry.queueLatencyWatermarkNsec_()[queueId] += increment; + } + } + } +} + +} // namespace facebook::fboss::fsdb::test diff --git a/fboss/fsdb/benchmarks/StateGenerator.h b/fboss/fsdb/benchmarks/StateGenerator.h new file mode 100644 index 0000000000000..f0f04b9770794 --- /dev/null +++ b/fboss/fsdb/benchmarks/StateGenerator.h @@ -0,0 +1,19 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include "fboss/agent/gen-cpp2/agent_stats_types.h" + +namespace facebook::fboss::fsdb::test { + +class StateGenerator { + public: + static void fillVoqStats( + AgentStats* stats, + int nSysPorts, + int nVoqsPerSysPort, + int value = 1); + static void updateVoqStats(AgentStats* stats, int increment = 1); +}; + +} // namespace facebook::fboss::fsdb::test diff --git a/fboss/fsdb/benchmarks/VoqCounterScaleBench.cpp b/fboss/fsdb/benchmarks/VoqCounterScaleBench.cpp new file mode 100644 index 0000000000000..1237726d995a2 --- /dev/null +++ b/fboss/fsdb/benchmarks/VoqCounterScaleBench.cpp @@ -0,0 +1,58 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include +#include +#include + +#include "fboss/fsdb/benchmarks/FsdbBenchmarkTestHelper.h" +#include "fboss/fsdb/benchmarks/StateGenerator.h" + +DEFINE_int32(n_sysports, 16000, "number of SysPorts"); +DEFINE_int32(n_voqs_per_sysport, 4, "number of VOQs per SysPort"); +DEFINE_int32(n_publish_iters, 1000, "number of iterations for stats publish"); + +namespace facebook::fboss::fsdb::test { + +BENCHMARK(FsdbPublishVoqStats) { + auto n_iterations = FLAGS_n_publish_iters; + + folly::BenchmarkSuspender suspender; + + // setup FsdbTestServer + FsdbBenchmarkTestHelper helper; + helper.setup(); + + // start publisher and publish initial empty stats + helper.startPublisher(); + + auto stats = std::make_shared(); + helper.publishPath(*stats, 0); + + StateGenerator::fillVoqStats( + stats.get(), FLAGS_n_sysports, FLAGS_n_voqs_per_sysport); + + helper.waitForPublisherConnected(); + + // benchmark test: publish N iterations of stats + suspender.dismiss(); + + for (int round = 0; round < n_iterations; round++) { + StateGenerator::updateVoqStats(stats.get()); + helper.publishPath(*stats, round + 1); + } + + // wait for server to process all the updates + while (true) { + auto md = helper.getPublisherRootMetadata(true); + if (*md->operMetadata.get_lastConfirmedAt() == n_iterations) { + break; + } + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + suspender.rehire(); + + helper.TearDown(); +} + +} // namespace facebook::fboss::fsdb::test diff --git a/fboss/fsdb/client/FsdbPubSubManager.cpp b/fboss/fsdb/client/FsdbPubSubManager.cpp index 65f07ec76d3da..920cc91ec57ec 100644 --- a/fboss/fsdb/client/FsdbPubSubManager.cpp +++ b/fboss/fsdb/client/FsdbPubSubManager.cpp @@ -8,7 +8,6 @@ #include "fboss/fsdb/common/PathHelpers.h" #include "fboss/lib/thrift_service_client/ConnectionOptions.h" -#include #include #include diff --git a/fboss/fsdb/client/test/BUCK b/fboss/fsdb/client/test/BUCK index 8a26e854ede2a..6dafe6b5665f6 100644 --- a/fboss/fsdb/client/test/BUCK +++ b/fboss/fsdb/client/test/BUCK @@ -32,7 +32,6 @@ cpp_unittest( "//fboss/fsdb/client:fsdb_cow_state_sub_manager", "//fboss/fsdb/client:fsdb_cow_stats_sub_manager", "//fboss/fsdb/client:fsdb_pub_sub", - "//fboss/fsdb/if:fsdb_model", "//fboss/fsdb/tests/utils:fsdb_test_server", "//fboss/lib:common_utils", "//fboss/lib/thrift_service_client:thrift-service-client", diff --git a/fboss/fsdb/client/test/FsdbPubSubManagerTest.cpp b/fboss/fsdb/client/test/FsdbPubSubManagerTest.cpp index a9ee7ea46d8ca..c9e17747ad1bb 100644 --- a/fboss/fsdb/client/test/FsdbPubSubManagerTest.cpp +++ b/fboss/fsdb/client/test/FsdbPubSubManagerTest.cpp @@ -10,13 +10,10 @@ #include "fboss/lib/CommonUtils.h" #include "fboss/lib/thrift_service_client/ConnectionOptions.h" -#include #include #include -#include #include -#include namespace facebook::fboss::fsdb { void stateChangeCb( diff --git a/fboss/fsdb/client/test/FsdbSubManagerTest.cpp b/fboss/fsdb/client/test/FsdbSubManagerTest.cpp index 3010f7ce7b527..c715c12813768 100644 --- a/fboss/fsdb/client/test/FsdbSubManagerTest.cpp +++ b/fboss/fsdb/client/test/FsdbSubManagerTest.cpp @@ -3,7 +3,6 @@ #include "fboss/fsdb/client/FsdbPatchPublisher.h" #include "fboss/fsdb/client/instantiations/FsdbCowStateSubManager.h" #include "fboss/fsdb/client/instantiations/FsdbCowStatsSubManager.h" -#include "fboss/fsdb/if/FsdbModel.h" #include "fboss/fsdb/tests/utils/FsdbTestServer.h" #include "fboss/lib/CommonUtils.h" #include "fboss/lib/thrift_service_client/ConnectionOptions.h" diff --git a/fboss/fsdb/common/BUCK b/fboss/fsdb/common/BUCK index 07cd9dde1e671..1b07eb4d95653 100644 --- a/fboss/fsdb/common/BUCK +++ b/fboss/fsdb/common/BUCK @@ -30,7 +30,6 @@ cpp_library( "Utils.h", ], exported_deps = [ - "fbsource//third-party/fmt:fmt", "//fboss/fsdb/if:fsdb_common-cpp2-types", "//fboss/fsdb/if:fsdb_oper-cpp2-types", "//fboss/thrift_cow/storage:cow_storage", diff --git a/fboss/fsdb/common/Flags.cpp b/fboss/fsdb/common/Flags.cpp index 6ef83d58095ed..c13b5cc0240ec 100644 --- a/fboss/fsdb/common/Flags.cpp +++ b/fboss/fsdb/common/Flags.cpp @@ -10,6 +10,11 @@ DEFINE_int32( // current default 5908 is in conflict with VNC ports, need to // eventually migrate to 5958 DEFINE_int32(migrated_fsdbPort, 5958, "New FSDB thrift server port migrate to"); +// Only FBOSS DSF subscriber is using this fsdbPort_high_priority port +DEFINE_int32( + fsdbPort_high_priority, + 5957, + "FSDB thrift server port connected using high priority tos=0xc0"); DEFINE_bool(publish_stats_to_fsdb, false, "Whether to publish stats to fsdb"); DEFINE_bool( publish_state_to_fsdb, diff --git a/fboss/fsdb/common/Flags.h b/fboss/fsdb/common/Flags.h index d6c3658a5515b..171eb8c4f2639 100644 --- a/fboss/fsdb/common/Flags.h +++ b/fboss/fsdb/common/Flags.h @@ -6,6 +6,7 @@ DECLARE_int32(fsdbPort); DECLARE_int32(migrated_fsdbPort); +DECLARE_int32(fsdbPort_high_priority); DECLARE_bool(publish_stats_to_fsdb); DECLARE_bool(publish_state_to_fsdb); DECLARE_bool(subscribe_to_stats_from_fsdb); diff --git a/fboss/fsdb/common/Utils.cpp b/fboss/fsdb/common/Utils.cpp index 62cd1ccd4b483..606ab45482283 100644 --- a/fboss/fsdb/common/Utils.cpp +++ b/fboss/fsdb/common/Utils.cpp @@ -1,9 +1,6 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. #include "fboss/fsdb/common/Utils.h" -#include -#include -#include #include #include diff --git a/fboss/fsdb/if/fsdb_common.thrift b/fboss/fsdb/if/fsdb_common.thrift index 5f4f11599944c..8570cf2f62491 100644 --- a/fboss/fsdb/if/fsdb_common.thrift +++ b/fboss/fsdb/if/fsdb_common.thrift @@ -14,6 +14,18 @@ const string kFsdbStatsFanOutNativeStatsPrefix = "fsdb.statsFanOut."; const i32 PORT = 5908; +/** + * Default value sourced from Cfgr "neteng/qosdb/cos_utility_maps" + * dscpToClassOfServiceMap.ClassOfService.NC : 48 + * Rationale: In DSF clusters fsdb is a Tier 0 service required for + * bringing up network control plane and needs to be up with minimal + * dependencies. Therefore, sourcing the const in fbcode instead of + * a runtime configerator read. + * + * 8-bit TOS = 6-bit DSCP followed by 2-bit ECN + */ +const i32 kTosForClassOfServiceNC = 0xc0; + // NOTE: keep in sync with fb303::ExportType enum ExportType { SUM = 0, diff --git a/fboss/fsdb/if/oss/fsdb_model_thriftpath.h b/fboss/fsdb/if/oss/fsdb_model_thriftpath.h index aae3080407156..06885afac9ce2 100755 --- a/fboss/fsdb/if/oss/fsdb_model_thriftpath.h +++ b/fboss/fsdb/if/oss/fsdb_model_thriftpath.h @@ -2639,161 +2639,98 @@ std::pair> } }; - -template -class ChildThriftPath<::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::facebook::fboss::state::SendToQueue, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SendToQueue>, - Parent> { - public: - using Self = Path< - ::facebook::fboss::state::SendToQueue, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SendToQueue>, - Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(action, 1); - STRUCT_CHILD_GETTERS(sendToCPU, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return action(); } - else if constexpr (__id == 2) { return sendToCPU(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - -template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; - -template -class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::std::set<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::AggregatePort>, + ::std::map<::std::int32_t, ::std::set<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::set<::apache::thrift::type::i32_t>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::AggregatePort>, + ::std::map<::std::int32_t, ::std::set<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::set<::apache::thrift::type::i32_t>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::AggregatePort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, + ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, + ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::MirrorOnDropReportFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::string); }; + template -class ChildThriftPath<::std::map<::std::int32_t, ::std::set<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int32_t, ::std::set<::std::int32_t>>, + ::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::set<::apache::thrift::type::i32_t>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>, Parent> { public: using Self = Path< - ::std::map<::std::int32_t, ::std::set<::std::int32_t>>, + ::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::set<::apache::thrift::type::i32_t>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>, Parent>; - using Child = ChildThriftPath<::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(routerID, 1); + STRUCT_CHILD_GETTERS(prefix, 2); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return routerID(); } + else if constexpr (__id == 2) { return prefix(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; @@ -3106,9 +3043,15 @@ std::pair>, std::pair>, std::pair>, -std::pair>, +std::pair>, std::pair>, -std::pair>>; +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::L2LearningMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::L2LearningMode>>>, std::pair, Child>, std::pair, Child>, @@ -3152,7 +3095,13 @@ std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SelfHealingEcmpLagConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template using NameToId = fatal::tuple>, std::pair>, @@ -3195,9 +3144,15 @@ std::pair>, std::pair>, std::pair>, -std::pair>, +std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -3244,9 +3199,15 @@ std::pair auto operator()(const std::integral_constant&) { @@ -3291,9 +3252,15 @@ std::pair @@ -3344,6 +3311,27 @@ class ChildThriftPath<::std::vector<::facebook::fboss::phy::PinConfig>, ::facebo CONTAINER_CHILD_GETTERS(::std::int32_t); }; +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + template class ChildThriftPath<::facebook::fboss::cfg::AclEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -3546,27 +3534,6 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template class ChildThriftPath<::facebook::fboss::state::QosPolicyFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -3747,7 +3714,8 @@ std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair>>, std::pair>>, -std::pair>>>; +std::pair>>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, @@ -3769,7 +3737,8 @@ std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, Child<::facebook::fboss::RemoteInterfaceType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::RemoteInterfaceType>>>, std::pair, Child<::facebook::fboss::LivenessStatus, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::LivenessStatus>>>, - std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>>; + std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template using NameToId = fatal::tuple>, std::pair>, @@ -3792,7 +3761,8 @@ std::pair>, std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -3820,6 +3790,7 @@ std::pair STRUCT_CHILD_GETTERS(remoteIntfType, 20); STRUCT_CHILD_GETTERS(remoteIntfLivenessStatus, 21); STRUCT_CHILD_GETTERS(scope, 22); + STRUCT_CHILD_GETTERS(portId, 23); template auto operator()(const std::integral_constant&) { @@ -3845,6 +3816,7 @@ std::pair else if constexpr (__id == 20) { return remoteIntfType(); } else if constexpr (__id == 21) { return remoteIntfLivenessStatus(); } else if constexpr (__id == 22) { return scope(); } + else if constexpr (__id == 23) { return portId(); } } template @@ -4514,23 +4486,44 @@ class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std:: CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; +template +class ChildThriftPath<::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::AclStage); +}; + template -class ChildThriftPath<::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::SystemPortThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::ActiveQueueManagement, + ::facebook::fboss::SystemPortThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>, + ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::ActiveQueueManagement, + ::facebook::fboss::SystemPortThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>, + ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::ctrl_tags::strings; template using Child = Path< ChildType, @@ -4539,25 +4532,85 @@ class ChildThriftPath<::facebook::fboss::cfg::ActiveQueueManagement, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::QueueCongestionBehavior, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::QueueCongestionBehavior>>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(detection, 1); - STRUCT_CHILD_GETTERS(behavior, 2); + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::RemoteSystemPortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::RemoteSystemPortType>>>, + std::pair, Child<::facebook::fboss::LivenessStatus, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::LivenessStatus>>>, + std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, + std::pair, Child>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(portId, 1); + STRUCT_CHILD_GETTERS(switchId, 2); + STRUCT_CHILD_GETTERS(portName, 3); + STRUCT_CHILD_GETTERS(coreIndex, 4); + STRUCT_CHILD_GETTERS(corePortIndex, 5); + STRUCT_CHILD_GETTERS(speedMbps, 6); + STRUCT_CHILD_GETTERS(numVoqs, 7); + STRUCT_CHILD_GETTERS(enabled_DEPRECATED, 9); + STRUCT_CHILD_GETTERS(qosPolicy, 10); + STRUCT_CHILD_GETTERS(queues, 11); + STRUCT_CHILD_GETTERS(remoteSystemPortType, 12); + STRUCT_CHILD_GETTERS(remoteSystemPortLivenessStatus, 13); + STRUCT_CHILD_GETTERS(scope, 14); + STRUCT_CHILD_GETTERS(shelDestinationEnabled, 15); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return detection(); } - else if constexpr (__id == 2) { return behavior(); } + if constexpr (__id == 1) { return portId(); } + else if constexpr (__id == 2) { return switchId(); } + else if constexpr (__id == 3) { return portName(); } + else if constexpr (__id == 4) { return coreIndex(); } + else if constexpr (__id == 5) { return corePortIndex(); } + else if constexpr (__id == 6) { return speedMbps(); } + else if constexpr (__id == 7) { return numVoqs(); } + else if constexpr (__id == 9) { return enabled_DEPRECATED(); } + else if constexpr (__id == 10) { return qosPolicy(); } + else if constexpr (__id == 11) { return queues(); } + else if constexpr (__id == 12) { return remoteSystemPortType(); } + else if constexpr (__id == 13) { return remoteSystemPortLivenessStatus(); } + else if constexpr (__id == 14) { return scope(); } + else if constexpr (__id == 15) { return shelDestinationEnabled(); } } template @@ -4568,21 +4621,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AsicConfigEntry, + ::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosMap>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AsicConfigEntry, + ::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosMap>, Parent>; - using strings = ::facebook::fboss::cfg::asic_config_v2_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -4591,30 +4644,50 @@ class ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::DscpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(config, 1); - STRUCT_CHILD_GETTERS(jsonConfig, 2); - STRUCT_CHILD_GETTERS(yamlConfig, 3); + STRUCT_CHILD_GETTERS(dscpMaps, 1); + STRUCT_CHILD_GETTERS(expMaps, 2); + STRUCT_CHILD_GETTERS(trafficClassToQueueId, 3); + STRUCT_CHILD_GETTERS(pfcPriorityToQueueId, 4); + STRUCT_CHILD_GETTERS(trafficClassToPgId, 5); + STRUCT_CHILD_GETTERS(pfcPriorityToPgId, 6); + STRUCT_CHILD_GETTERS(trafficClassToVoqId, 7); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return config(); } - else if constexpr (__id == 2) { return jsonConfig(); } - else if constexpr (__id == 3) { return yamlConfig(); } + if constexpr (__id == 1) { return dscpMaps(); } + else if constexpr (__id == 2) { return expMaps(); } + else if constexpr (__id == 3) { return trafficClassToQueueId(); } + else if constexpr (__id == 4) { return pfcPriorityToQueueId(); } + else if constexpr (__id == 5) { return trafficClassToPgId(); } + else if constexpr (__id == 6) { return pfcPriorityToPgId(); } + else if constexpr (__id == 7) { return trafficClassToVoqId(); } } template @@ -4623,44 +4696,23 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::ExpQosMap>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::ExpQosMap>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::ExpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SetTcAction, + ::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetTcAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PortPrbsState>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SetTcAction, + ::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetTcAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PortPrbsState>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -4669,20 +4721,25 @@ class ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(tcValue, 1); + STRUCT_CHILD_GETTERS(enabled, 1); + STRUCT_CHILD_GETTERS(polynominal, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return tcValue(); } + if constexpr (__id == 1) { return enabled(); } + else if constexpr (__id == 2) { return polynominal(); } } template @@ -4693,21 +4750,21 @@ class ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fs template -class ChildThriftPath<::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MinimumCapacity, + ::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::MinimumCapacity>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MinimumCapacity, + ::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::MinimumCapacity>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -4716,25 +4773,40 @@ class ChildThriftPath<::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::Label, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopsMulti, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(linkCount, 1); - STRUCT_CHILD_GETTERS(linkPercentage, 2); + STRUCT_CHILD_GETTERS(label, 1); + STRUCT_CHILD_GETTERS(nexthopsmulti, 2); + STRUCT_CHILD_GETTERS(fwd, 3); + STRUCT_CHILD_GETTERS(flags, 4); + STRUCT_CHILD_GETTERS(classID, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return linkCount(); } - else if constexpr (__id == 2) { return linkPercentage(); } + if constexpr (__id == 1) { return label(); } + else if constexpr (__id == 2) { return nexthopsmulti(); } + else if constexpr (__id == 3) { return fwd(); } + else if constexpr (__id == 4) { return flags(); } + else if constexpr (__id == 5) { return classID(); } } template @@ -4743,310 +4815,121 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SwitchConfig, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SwitchConfig, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::MirrorOnDropReportFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::MirrorOnDropReportFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::state::MirrorOnDropReportFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>, + Parent>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ChildTC, ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::LoadBalancer>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::TrafficCounter>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosPolicy>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(version, 1); - STRUCT_CHILD_GETTERS(ports, 2); - STRUCT_CHILD_GETTERS(vlans, 3); - STRUCT_CHILD_GETTERS(vlanPorts, 4); - STRUCT_CHILD_GETTERS(defaultVlan, 5); - STRUCT_CHILD_GETTERS(interfaces, 6); - STRUCT_CHILD_GETTERS(arpTimeoutSeconds, 7); - STRUCT_CHILD_GETTERS(arpRefreshSeconds, 8); - STRUCT_CHILD_GETTERS(arpAgerInterval, 9); - STRUCT_CHILD_GETTERS(proactiveArp, 10); - STRUCT_CHILD_GETTERS(cpuMAC, 11); - STRUCT_CHILD_GETTERS(staticRoutesWithNhops, 12); - STRUCT_CHILD_GETTERS(staticRoutesToNull, 13); - STRUCT_CHILD_GETTERS(staticRoutesToCPU, 14); - STRUCT_CHILD_GETTERS(acls, 15); - STRUCT_CHILD_GETTERS(maxNeighborProbes, 16); - STRUCT_CHILD_GETTERS(staleEntryInterval, 17); - STRUCT_CHILD_GETTERS(aggregatePorts, 18); - STRUCT_CHILD_GETTERS(clientIdToAdminDistance, 19); - STRUCT_CHILD_GETTERS(dhcpRelaySrcOverrideV4, 20); - STRUCT_CHILD_GETTERS(dhcpRelaySrcOverrideV6, 21); - STRUCT_CHILD_GETTERS(dhcpReplySrcOverrideV4, 22); - STRUCT_CHILD_GETTERS(dhcpReplySrcOverrideV6, 23); - STRUCT_CHILD_GETTERS(globalEgressTrafficPolicy_DEPRECATED, 24); - STRUCT_CHILD_GETTERS(config_version, 25); - STRUCT_CHILD_GETTERS(sFlowCollectors, 26); - STRUCT_CHILD_GETTERS(lacp, 27); - STRUCT_CHILD_GETTERS(cpuQueues, 28); - STRUCT_CHILD_GETTERS(cpuTrafficPolicy, 29); - STRUCT_CHILD_GETTERS(loadBalancers, 30); - STRUCT_CHILD_GETTERS(dataPlaneTrafficPolicy, 31); - STRUCT_CHILD_GETTERS(mirrors, 32); - STRUCT_CHILD_GETTERS(trafficCounters, 33); - STRUCT_CHILD_GETTERS(qosPolicies, 34); - STRUCT_CHILD_GETTERS(defaultPortQueues, 35); - STRUCT_CHILD_GETTERS(staticMplsRoutesWithNhops, 36); - STRUCT_CHILD_GETTERS(staticMplsRoutesToNull, 37); - STRUCT_CHILD_GETTERS(staticMplsRoutesToCPU, 38); - STRUCT_CHILD_GETTERS(staticIp2MplsRoutes, 39); - STRUCT_CHILD_GETTERS(portQueueConfigs, 40); - STRUCT_CHILD_GETTERS(switchSettings, 41); - STRUCT_CHILD_GETTERS(qcmConfig, 42); - STRUCT_CHILD_GETTERS(portPgConfigs, 43); - STRUCT_CHILD_GETTERS(bufferPoolConfigs, 44); - STRUCT_CHILD_GETTERS(aclTableGroup, 45); - STRUCT_CHILD_GETTERS(sdkVersion, 46); - STRUCT_CHILD_GETTERS(ipInIpTunnels, 47); - STRUCT_CHILD_GETTERS(dsfNodes, 48); - STRUCT_CHILD_GETTERS(udfConfig, 49); - STRUCT_CHILD_GETTERS(flowletSwitchingConfig, 50); - STRUCT_CHILD_GETTERS(defaultVoqConfig, 51); - STRUCT_CHILD_GETTERS(portFlowletConfigs, 52); - STRUCT_CHILD_GETTERS(icmpV4UnavailableSrcAddress, 53); - STRUCT_CHILD_GETTERS(hostname, 54); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(mirrorPortId, 2); + STRUCT_CHILD_GETTERS(localSrcIp, 3); + STRUCT_CHILD_GETTERS(localSrcPort, 4); + STRUCT_CHILD_GETTERS(collectorIp, 5); + STRUCT_CHILD_GETTERS(collectorPort, 6); + STRUCT_CHILD_GETTERS(mtu, 7); + STRUCT_CHILD_GETTERS(truncateSize, 8); + STRUCT_CHILD_GETTERS(dscp, 9); + STRUCT_CHILD_GETTERS(agingIntervalUsecs, 10); + STRUCT_CHILD_GETTERS(switchMac, 11); + STRUCT_CHILD_GETTERS(firstInterfaceMac, 12); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return version(); } - else if constexpr (__id == 2) { return ports(); } - else if constexpr (__id == 3) { return vlans(); } - else if constexpr (__id == 4) { return vlanPorts(); } - else if constexpr (__id == 5) { return defaultVlan(); } - else if constexpr (__id == 6) { return interfaces(); } - else if constexpr (__id == 7) { return arpTimeoutSeconds(); } - else if constexpr (__id == 8) { return arpRefreshSeconds(); } - else if constexpr (__id == 9) { return arpAgerInterval(); } - else if constexpr (__id == 10) { return proactiveArp(); } - else if constexpr (__id == 11) { return cpuMAC(); } - else if constexpr (__id == 12) { return staticRoutesWithNhops(); } - else if constexpr (__id == 13) { return staticRoutesToNull(); } - else if constexpr (__id == 14) { return staticRoutesToCPU(); } - else if constexpr (__id == 15) { return acls(); } - else if constexpr (__id == 16) { return maxNeighborProbes(); } - else if constexpr (__id == 17) { return staleEntryInterval(); } - else if constexpr (__id == 18) { return aggregatePorts(); } - else if constexpr (__id == 19) { return clientIdToAdminDistance(); } - else if constexpr (__id == 20) { return dhcpRelaySrcOverrideV4(); } - else if constexpr (__id == 21) { return dhcpRelaySrcOverrideV6(); } - else if constexpr (__id == 22) { return dhcpReplySrcOverrideV4(); } - else if constexpr (__id == 23) { return dhcpReplySrcOverrideV6(); } - else if constexpr (__id == 24) { return globalEgressTrafficPolicy_DEPRECATED(); } - else if constexpr (__id == 25) { return config_version(); } - else if constexpr (__id == 26) { return sFlowCollectors(); } - else if constexpr (__id == 27) { return lacp(); } - else if constexpr (__id == 28) { return cpuQueues(); } - else if constexpr (__id == 29) { return cpuTrafficPolicy(); } - else if constexpr (__id == 30) { return loadBalancers(); } - else if constexpr (__id == 31) { return dataPlaneTrafficPolicy(); } - else if constexpr (__id == 32) { return mirrors(); } - else if constexpr (__id == 33) { return trafficCounters(); } - else if constexpr (__id == 34) { return qosPolicies(); } - else if constexpr (__id == 35) { return defaultPortQueues(); } - else if constexpr (__id == 36) { return staticMplsRoutesWithNhops(); } - else if constexpr (__id == 37) { return staticMplsRoutesToNull(); } - else if constexpr (__id == 38) { return staticMplsRoutesToCPU(); } - else if constexpr (__id == 39) { return staticIp2MplsRoutes(); } - else if constexpr (__id == 40) { return portQueueConfigs(); } - else if constexpr (__id == 41) { return switchSettings(); } - else if constexpr (__id == 42) { return qcmConfig(); } - else if constexpr (__id == 43) { return portPgConfigs(); } - else if constexpr (__id == 44) { return bufferPoolConfigs(); } - else if constexpr (__id == 45) { return aclTableGroup(); } - else if constexpr (__id == 46) { return sdkVersion(); } - else if constexpr (__id == 47) { return ipInIpTunnels(); } - else if constexpr (__id == 48) { return dsfNodes(); } - else if constexpr (__id == 49) { return udfConfig(); } - else if constexpr (__id == 50) { return flowletSwitchingConfig(); } - else if constexpr (__id == 51) { return defaultVoqConfig(); } - else if constexpr (__id == 52) { return portFlowletConfigs(); } - else if constexpr (__id == 53) { return icmpV4UnavailableSrcAddress(); } - else if constexpr (__id == 54) { return hostname(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return mirrorPortId(); } + else if constexpr (__id == 3) { return localSrcIp(); } + else if constexpr (__id == 4) { return localSrcPort(); } + else if constexpr (__id == 5) { return collectorIp(); } + else if constexpr (__id == 6) { return collectorPort(); } + else if constexpr (__id == 7) { return mtu(); } + else if constexpr (__id == 8) { return truncateSize(); } + else if constexpr (__id == 9) { return dscp(); } + else if constexpr (__id == 10) { return agingIntervalUsecs(); } + else if constexpr (__id == 11) { return switchMac(); } + else if constexpr (__id == 12) { return firstInterfaceMac(); } } template @@ -5057,19 +4940,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::RedirectToNextHopAction, + ::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RedirectToNextHopAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::RedirectToNextHopAction, + ::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RedirectToNextHopAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -5080,25 +4963,207 @@ class ChildThriftPath<::facebook::fboss::state::RedirectToNextHopAction, ::faceb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::state::NeighborState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::NeighborState>>>, + std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child>, + std::pair, Child<::facebook::fboss::state::NeighborEntryType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::NeighborEntryType>>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child>, + std::pair, Child>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(ipaddress, 1); + STRUCT_CHILD_GETTERS(mac, 2); + STRUCT_CHILD_GETTERS(portId, 3); + STRUCT_CHILD_GETTERS(interfaceId, 4); + STRUCT_CHILD_GETTERS(state, 5); + STRUCT_CHILD_GETTERS(classID, 6); + STRUCT_CHILD_GETTERS(encapIndex, 7); + STRUCT_CHILD_GETTERS(isLocal, 8); + STRUCT_CHILD_GETTERS(type, 9); + STRUCT_CHILD_GETTERS(resolvedSince, 10); + STRUCT_CHILD_GETTERS(noHostRoute, 11); + STRUCT_CHILD_GETTERS(disableTTLDecrement, 12); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return ipaddress(); } + else if constexpr (__id == 2) { return mac(); } + else if constexpr (__id == 3) { return portId(); } + else if constexpr (__id == 4) { return interfaceId(); } + else if constexpr (__id == 5) { return state(); } + else if constexpr (__id == 6) { return classID(); } + else if constexpr (__id == 7) { return encapIndex(); } + else if constexpr (__id == 8) { return isLocal(); } + else if constexpr (__id == 9) { return type(); } + else if constexpr (__id == 10) { return resolvedSince(); } + else if constexpr (__id == 11) { return noHostRoute(); } + else if constexpr (__id == 12) { return disableTTLDecrement(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + + +template +class ChildThriftPath<::facebook::fboss::PortQueueFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::PortQueueFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::PortQueueFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>, + Parent>; + using strings = ::facebook::fboss::ctrl_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(action, 1); - STRUCT_CHILD_GETTERS(resolvedNexthops, 2); + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(weight, 2); + STRUCT_CHILD_GETTERS(reserved, 3); + STRUCT_CHILD_GETTERS(scalingFactor, 4); + STRUCT_CHILD_GETTERS(scheduling, 5); + STRUCT_CHILD_GETTERS(streamType, 6); + STRUCT_CHILD_GETTERS(aqms, 7); + STRUCT_CHILD_GETTERS(name, 8); + STRUCT_CHILD_GETTERS(packetsPerSec_DEPRECATED, 10); + STRUCT_CHILD_GETTERS(sharedBytes, 11); + STRUCT_CHILD_GETTERS(portQueueRate, 12); + STRUCT_CHILD_GETTERS(bandwidthBurstMinKbits, 13); + STRUCT_CHILD_GETTERS(bandwidthBurstMaxKbits, 14); + STRUCT_CHILD_GETTERS(trafficClass, 15); + STRUCT_CHILD_GETTERS(pfcPriorities, 16); + STRUCT_CHILD_GETTERS(maxDynamicSharedBytes, 17); + STRUCT_CHILD_GETTERS(bufferPoolName, 18); + STRUCT_CHILD_GETTERS(bufferPoolConfig, 19); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return action(); } - else if constexpr (__id == 2) { return resolvedNexthops(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return weight(); } + else if constexpr (__id == 3) { return reserved(); } + else if constexpr (__id == 4) { return scalingFactor(); } + else if constexpr (__id == 5) { return scheduling(); } + else if constexpr (__id == 6) { return streamType(); } + else if constexpr (__id == 7) { return aqms(); } + else if constexpr (__id == 8) { return name(); } + else if constexpr (__id == 10) { return packetsPerSec_DEPRECATED(); } + else if constexpr (__id == 11) { return sharedBytes(); } + else if constexpr (__id == 12) { return portQueueRate(); } + else if constexpr (__id == 13) { return bandwidthBurstMinKbits(); } + else if constexpr (__id == 14) { return bandwidthBurstMaxKbits(); } + else if constexpr (__id == 15) { return trafficClass(); } + else if constexpr (__id == 16) { return pfcPriorities(); } + else if constexpr (__id == 17) { return maxDynamicSharedBytes(); } + else if constexpr (__id == 18) { return bufferPoolName(); } + else if constexpr (__id == 19) { return bufferPoolConfig(); } } template @@ -5109,19 +5174,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::SflowCollectorFields, + ::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::SflowCollectorFields, + ::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -5132,25 +5197,30 @@ class ChildThriftPath<::facebook::fboss::state::SflowCollectorFields, ::facebook ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::state::SocketAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(address, 2); + STRUCT_CHILD_GETTERS(vrf, 1); + STRUCT_CHILD_GETTERS(fibV4, 2); + STRUCT_CHILD_GETTERS(fibV6, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return address(); } + if constexpr (__id == 1) { return vrf(); } + else if constexpr (__id == 2) { return fibV4(); } + else if constexpr (__id == 3) { return fibV6(); } } template @@ -5160,21 +5230,21 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::Vlan>, + ::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::PortError>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::Vlan>, + ::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::PortError>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Vlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::facebook::fboss::PortError, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PortError>, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -5182,19 +5252,19 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::f template -class ChildThriftPath<::facebook::fboss::cfg::PktLenRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PktLenRange, + ::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PktLenRange>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PktLenRange, + ::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PktLenRange>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -5205,30 +5275,75 @@ class ChildThriftPath<::facebook::fboss::cfg::PktLenRange, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child>>; + using Children = fatal::tuple>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::SwitchType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>>, + std::pair, Child<::facebook::fboss::cfg::AsicType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AsicType>>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::FirmwareName, ::facebook::fboss::cfg::FirmwareInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(min, 1); - STRUCT_CHILD_GETTERS(max, 2); - STRUCT_CHILD_GETTERS(invert, 3); + STRUCT_CHILD_GETTERS(switchType, 1); + STRUCT_CHILD_GETTERS(asicType, 2); + STRUCT_CHILD_GETTERS(switchIndex, 3); + STRUCT_CHILD_GETTERS(portIdRange, 4); + STRUCT_CHILD_GETTERS(systemPortRange_DEPRECATED, 5); + STRUCT_CHILD_GETTERS(switchMac, 6); + STRUCT_CHILD_GETTERS(connectionHandle, 7); + STRUCT_CHILD_GETTERS(systemPortRanges, 8); + STRUCT_CHILD_GETTERS(localSystemPortOffset, 9); + STRUCT_CHILD_GETTERS(globalSystemPortOffset, 10); + STRUCT_CHILD_GETTERS(inbandPortId, 11); + STRUCT_CHILD_GETTERS(firmwareNameToFirmwareInfo, 12); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return min(); } - else if constexpr (__id == 2) { return max(); } - else if constexpr (__id == 3) { return invert(); } + if constexpr (__id == 1) { return switchType(); } + else if constexpr (__id == 2) { return asicType(); } + else if constexpr (__id == 3) { return switchIndex(); } + else if constexpr (__id == 4) { return portIdRange(); } + else if constexpr (__id == 5) { return systemPortRange_DEPRECATED(); } + else if constexpr (__id == 6) { return switchMac(); } + else if constexpr (__id == 7) { return connectionHandle(); } + else if constexpr (__id == 8) { return systemPortRanges(); } + else if constexpr (__id == 9) { return localSystemPortOffset(); } + else if constexpr (__id == 10) { return globalSystemPortOffset(); } + else if constexpr (__id == 11) { return inbandPortId(); } + else if constexpr (__id == 12) { return firmwareNameToFirmwareInfo(); } } template @@ -5239,21 +5354,21 @@ std::pair template -class ChildThriftPath<::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::AggregatePortFields, + ::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::state::AggregatePortFields, + ::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfConfig>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -5262,65 +5377,25 @@ class ChildThriftPath<::facebook::fboss::state::AggregatePortFields, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int32_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(name, 2); - STRUCT_CHILD_GETTERS(description, 3); - STRUCT_CHILD_GETTERS(systemPriority, 4); - STRUCT_CHILD_GETTERS(systemID, 5); - STRUCT_CHILD_GETTERS(minimumLinkCount, 6); - STRUCT_CHILD_GETTERS(ports, 7); - STRUCT_CHILD_GETTERS(portToFwdState, 8); - STRUCT_CHILD_GETTERS(portToPartnerState, 9); - STRUCT_CHILD_GETTERS(interfaceIDs, 10); + STRUCT_CHILD_GETTERS(udfGroups, 1); + STRUCT_CHILD_GETTERS(udfPacketMatcher, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return name(); } - else if constexpr (__id == 3) { return description(); } - else if constexpr (__id == 4) { return systemPriority(); } - else if constexpr (__id == 5) { return systemID(); } - else if constexpr (__id == 6) { return minimumLinkCount(); } - else if constexpr (__id == 7) { return ports(); } - else if constexpr (__id == 8) { return portToFwdState(); } - else if constexpr (__id == 9) { return portToPartnerState(); } - else if constexpr (__id == 10) { return interfaceIDs(); } + if constexpr (__id == 1) { return udfGroups(); } + else if constexpr (__id == 2) { return udfPacketMatcher(); } } template @@ -5331,21 +5406,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::StaticRouteNoNextHops, + ::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::TxSettings>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::StaticRouteNoNextHops, + ::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::TxSettings>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -5354,25 +5429,170 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(routerID, 1); - STRUCT_CHILD_GETTERS(prefix, 2); + STRUCT_CHILD_GETTERS(pre, 1); + STRUCT_CHILD_GETTERS(pre2, 2); + STRUCT_CHILD_GETTERS(main, 3); + STRUCT_CHILD_GETTERS(post, 4); + STRUCT_CHILD_GETTERS(post2, 5); + STRUCT_CHILD_GETTERS(post3, 6); + STRUCT_CHILD_GETTERS(lutMode, 7); + STRUCT_CHILD_GETTERS(driveCurrent, 8); + STRUCT_CHILD_GETTERS(diffEncoderEn, 9); + STRUCT_CHILD_GETTERS(digGain, 10); + STRUCT_CHILD_GETTERS(ffeCoeff0, 11); + STRUCT_CHILD_GETTERS(ffeCoeff1, 12); + STRUCT_CHILD_GETTERS(ffeCoeff2, 13); + STRUCT_CHILD_GETTERS(ffeCoeff3, 14); + STRUCT_CHILD_GETTERS(ffeCoeff4, 15); + STRUCT_CHILD_GETTERS(parityEncoderEn, 16); + STRUCT_CHILD_GETTERS(thpEn, 17); + STRUCT_CHILD_GETTERS(setPrecode, 18); + STRUCT_CHILD_GETTERS(pre3, 19); + STRUCT_CHILD_GETTERS(driverSwing, 20); + STRUCT_CHILD_GETTERS(innerEyeNeg, 21); + STRUCT_CHILD_GETTERS(innerEyePos, 22); + STRUCT_CHILD_GETTERS(ffeCoeff5, 23); + STRUCT_CHILD_GETTERS(ldoBypass, 24); + STRUCT_CHILD_GETTERS(firPre1, 25); + STRUCT_CHILD_GETTERS(firPre2, 26); + STRUCT_CHILD_GETTERS(firPre3, 27); + STRUCT_CHILD_GETTERS(firMain, 28); + STRUCT_CHILD_GETTERS(firPost1, 29); + STRUCT_CHILD_GETTERS(firPost2, 30); + STRUCT_CHILD_GETTERS(firPost3, 31); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return routerID(); } - else if constexpr (__id == 2) { return prefix(); } + if constexpr (__id == 1) { return pre(); } + else if constexpr (__id == 2) { return pre2(); } + else if constexpr (__id == 3) { return main(); } + else if constexpr (__id == 4) { return post(); } + else if constexpr (__id == 5) { return post2(); } + else if constexpr (__id == 6) { return post3(); } + else if constexpr (__id == 7) { return lutMode(); } + else if constexpr (__id == 8) { return driveCurrent(); } + else if constexpr (__id == 9) { return diffEncoderEn(); } + else if constexpr (__id == 10) { return digGain(); } + else if constexpr (__id == 11) { return ffeCoeff0(); } + else if constexpr (__id == 12) { return ffeCoeff1(); } + else if constexpr (__id == 13) { return ffeCoeff2(); } + else if constexpr (__id == 14) { return ffeCoeff3(); } + else if constexpr (__id == 15) { return ffeCoeff4(); } + else if constexpr (__id == 16) { return parityEncoderEn(); } + else if constexpr (__id == 17) { return thpEn(); } + else if constexpr (__id == 18) { return setPrecode(); } + else if constexpr (__id == 19) { return pre3(); } + else if constexpr (__id == 20) { return driverSwing(); } + else if constexpr (__id == 21) { return innerEyeNeg(); } + else if constexpr (__id == 22) { return innerEyePos(); } + else if constexpr (__id == 23) { return ffeCoeff5(); } + else if constexpr (__id == 24) { return ldoBypass(); } + else if constexpr (__id == 25) { return firPre1(); } + else if constexpr (__id == 26) { return firPre2(); } + else if constexpr (__id == 27) { return firPre3(); } + else if constexpr (__id == 28) { return firMain(); } + else if constexpr (__id == 29) { return firPost1(); } + else if constexpr (__id == 30) { return firPost2(); } + else if constexpr (__id == 31) { return firPost3(); } } template @@ -5381,6 +5601,27 @@ std::pair } }; +template +class ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::set<::facebook::fboss::cfg::IPv6Field>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>>, + Parent> { + public: + using Self = Path< + ::std::set<::facebook::fboss::cfg::IPv6Field>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::IPv6Field, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::IPv6Field); +}; + template class ChildThriftPath<::facebook::fboss::cfg::PortPgConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -5465,83 +5706,41 @@ std::pair&) { if constexpr (__id == 1) { return id(); } else if constexpr (__id == 2) { return name(); } - else if constexpr (__id == 3) { return scalingFactor(); } - else if constexpr (__id == 4) { return minLimitBytes(); } - else if constexpr (__id == 5) { return headroomLimitBytes(); } - else if constexpr (__id == 6) { return resumeOffsetBytes(); } - else if constexpr (__id == 7) { return bufferPoolName(); } - else if constexpr (__id == 8) { return maxSharedXoffThresholdBytes(); } - else if constexpr (__id == 9) { return minSharedXoffThresholdBytes(); } - else if constexpr (__id == 10) { return maxSramXoffThresholdBytes(); } - else if constexpr (__id == 11) { return minSramXoffThresholdBytes(); } - else if constexpr (__id == 12) { return sramResumeOffsetBytes(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - -template -class ChildThriftPath<::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>>, - Parent>; - using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int16_t); -}; - -template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; + else if constexpr (__id == 3) { return scalingFactor(); } + else if constexpr (__id == 4) { return minLimitBytes(); } + else if constexpr (__id == 5) { return headroomLimitBytes(); } + else if constexpr (__id == 6) { return resumeOffsetBytes(); } + else if constexpr (__id == 7) { return bufferPoolName(); } + else if constexpr (__id == 8) { return maxSharedXoffThresholdBytes(); } + else if constexpr (__id == 9) { return minSharedXoffThresholdBytes(); } + else if constexpr (__id == 10) { return maxSramXoffThresholdBytes(); } + else if constexpr (__id == 11) { return minSramXoffThresholdBytes(); } + else if constexpr (__id == 12) { return sramResumeOffsetBytes(); } + } - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PlatformConfig, + ::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PlatformConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PlatformConfig, + ::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PlatformConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>, Parent>; - using strings = ::facebook::fboss::cfg::platform_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -5550,40 +5749,80 @@ class ChildThriftPath<::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MacEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(chip, 1); - STRUCT_CHILD_GETTERS(platformSettings, 3); - STRUCT_CHILD_GETTERS(switchIndexToSwitchId, 4); - STRUCT_CHILD_GETTERS(switchIndexToChipConfigs, 5); - STRUCT_CHILD_GETTERS(switchIndexToPlatformSettings, 6); + STRUCT_CHILD_GETTERS(vlanId, 1); + STRUCT_CHILD_GETTERS(vlanName, 2); + STRUCT_CHILD_GETTERS(intfID, 3); + STRUCT_CHILD_GETTERS(dhcpV4Relay, 4); + STRUCT_CHILD_GETTERS(dhcpV6Relay, 5); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 6); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 7); + STRUCT_CHILD_GETTERS(ports, 8); + STRUCT_CHILD_GETTERS(arpTable, 9); + STRUCT_CHILD_GETTERS(arpResponseTable, 10); + STRUCT_CHILD_GETTERS(ndpTable, 11); + STRUCT_CHILD_GETTERS(ndpResponseTable, 12); + STRUCT_CHILD_GETTERS(macTable, 13); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return chip(); } - else if constexpr (__id == 3) { return platformSettings(); } - else if constexpr (__id == 4) { return switchIndexToSwitchId(); } - else if constexpr (__id == 5) { return switchIndexToChipConfigs(); } - else if constexpr (__id == 6) { return switchIndexToPlatformSettings(); } + if constexpr (__id == 1) { return vlanId(); } + else if constexpr (__id == 2) { return vlanName(); } + else if constexpr (__id == 3) { return intfID(); } + else if constexpr (__id == 4) { return dhcpV4Relay(); } + else if constexpr (__id == 5) { return dhcpV6Relay(); } + else if constexpr (__id == 6) { return dhcpRelayOverridesV4(); } + else if constexpr (__id == 7) { return dhcpRelayOverridesV6(); } + else if constexpr (__id == 8) { return ports(); } + else if constexpr (__id == 9) { return arpTable(); } + else if constexpr (__id == 10) { return arpResponseTable(); } + else if constexpr (__id == 11) { return ndpTable(); } + else if constexpr (__id == 12) { return ndpResponseTable(); } + else if constexpr (__id == 13) { return macTable(); } } template @@ -5592,240 +5831,112 @@ std::pair +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::PortQueue>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::PortQueue>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; template -class ChildThriftPath<::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::RxSettings, + ::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::RxSettings>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::RxSettings, + ::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::RxSettings>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Child = ChildThriftPath<::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + + +template +class ChildThriftPath<::facebook::fboss::cfg::AggregatePort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::cfg::AggregatePort, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::cfg::AggregatePort, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>, + Parent>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ctlCode, 1); - STRUCT_CHILD_GETTERS(dspMode, 2); - STRUCT_CHILD_GETTERS(afeTrim, 3); - STRUCT_CHILD_GETTERS(acCouplingBypass, 4); - STRUCT_CHILD_GETTERS(channelReach, 5); - STRUCT_CHILD_GETTERS(diffEncoderEn, 6); - STRUCT_CHILD_GETTERS(fbfCoefInitVal, 7); - STRUCT_CHILD_GETTERS(fbfLmsEnable, 8); - STRUCT_CHILD_GETTERS(instgScanOptimize, 9); - STRUCT_CHILD_GETTERS(instgTableEndRow, 10); - STRUCT_CHILD_GETTERS(instgTableStartRow, 11); - STRUCT_CHILD_GETTERS(parityEncoderEn, 12); - STRUCT_CHILD_GETTERS(thpEn, 13); - STRUCT_CHILD_GETTERS(dcTermEn, 14); - STRUCT_CHILD_GETTERS(setPrecode, 15); - STRUCT_CHILD_GETTERS(instgBoost1Start, 16); - STRUCT_CHILD_GETTERS(instgBoost1Step, 17); - STRUCT_CHILD_GETTERS(instgBoost1Stop, 18); - STRUCT_CHILD_GETTERS(instgBoost2OrHrStart, 19); - STRUCT_CHILD_GETTERS(instgBoost2OrHrStep, 20); - STRUCT_CHILD_GETTERS(instgBoost2OrHrStop, 21); - STRUCT_CHILD_GETTERS(instgC1Start1p7, 22); - STRUCT_CHILD_GETTERS(instgC1Step1p7, 23); - STRUCT_CHILD_GETTERS(instgC1Stop1p7, 24); - STRUCT_CHILD_GETTERS(instgDfeStart1p7, 25); - STRUCT_CHILD_GETTERS(instgDfeStep1p7, 26); - STRUCT_CHILD_GETTERS(instgDfeStop1p7, 27); - STRUCT_CHILD_GETTERS(enableScanSelection, 28); - STRUCT_CHILD_GETTERS(instgScanUseSrSettings, 29); - STRUCT_CHILD_GETTERS(cdrCfgOvEn, 30); - STRUCT_CHILD_GETTERS(cdrTdet1stOrdStepOvVal, 31); - STRUCT_CHILD_GETTERS(cdrTdet2ndOrdStepOvVal, 32); - STRUCT_CHILD_GETTERS(cdrTdetFineStepOvVal, 33); - STRUCT_CHILD_GETTERS(ldoBypass, 34); - STRUCT_CHILD_GETTERS(ffeLengthBitmap, 35); - STRUCT_CHILD_GETTERS(instgEnableScan, 36); - STRUCT_CHILD_GETTERS(dcwEn, 37); - STRUCT_CHILD_GETTERS(dcwStepCoarseOvVal, 38); - STRUCT_CHILD_GETTERS(dcwStepFineOvVal, 39); - STRUCT_CHILD_GETTERS(dcwOvEn, 40); + STRUCT_CHILD_GETTERS(key, 1); + STRUCT_CHILD_GETTERS(name, 2); + STRUCT_CHILD_GETTERS(description, 3); + STRUCT_CHILD_GETTERS(memberPorts, 4); + STRUCT_CHILD_GETTERS(minimumCapacity, 5); + STRUCT_CHILD_GETTERS(counterTags, 6); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ctlCode(); } - else if constexpr (__id == 2) { return dspMode(); } - else if constexpr (__id == 3) { return afeTrim(); } - else if constexpr (__id == 4) { return acCouplingBypass(); } - else if constexpr (__id == 5) { return channelReach(); } - else if constexpr (__id == 6) { return diffEncoderEn(); } - else if constexpr (__id == 7) { return fbfCoefInitVal(); } - else if constexpr (__id == 8) { return fbfLmsEnable(); } - else if constexpr (__id == 9) { return instgScanOptimize(); } - else if constexpr (__id == 10) { return instgTableEndRow(); } - else if constexpr (__id == 11) { return instgTableStartRow(); } - else if constexpr (__id == 12) { return parityEncoderEn(); } - else if constexpr (__id == 13) { return thpEn(); } - else if constexpr (__id == 14) { return dcTermEn(); } - else if constexpr (__id == 15) { return setPrecode(); } - else if constexpr (__id == 16) { return instgBoost1Start(); } - else if constexpr (__id == 17) { return instgBoost1Step(); } - else if constexpr (__id == 18) { return instgBoost1Stop(); } - else if constexpr (__id == 19) { return instgBoost2OrHrStart(); } - else if constexpr (__id == 20) { return instgBoost2OrHrStep(); } - else if constexpr (__id == 21) { return instgBoost2OrHrStop(); } - else if constexpr (__id == 22) { return instgC1Start1p7(); } - else if constexpr (__id == 23) { return instgC1Step1p7(); } - else if constexpr (__id == 24) { return instgC1Stop1p7(); } - else if constexpr (__id == 25) { return instgDfeStart1p7(); } - else if constexpr (__id == 26) { return instgDfeStep1p7(); } - else if constexpr (__id == 27) { return instgDfeStop1p7(); } - else if constexpr (__id == 28) { return enableScanSelection(); } - else if constexpr (__id == 29) { return instgScanUseSrSettings(); } - else if constexpr (__id == 30) { return cdrCfgOvEn(); } - else if constexpr (__id == 31) { return cdrTdet1stOrdStepOvVal(); } - else if constexpr (__id == 32) { return cdrTdet2ndOrdStepOvVal(); } - else if constexpr (__id == 33) { return cdrTdetFineStepOvVal(); } - else if constexpr (__id == 34) { return ldoBypass(); } - else if constexpr (__id == 35) { return ffeLengthBitmap(); } - else if constexpr (__id == 36) { return instgEnableScan(); } - else if constexpr (__id == 37) { return dcwEn(); } - else if constexpr (__id == 38) { return dcwStepCoarseOvVal(); } - else if constexpr (__id == 39) { return dcwStepFineOvVal(); } - else if constexpr (__id == 40) { return dcwOvEn(); } + if constexpr (__id == 1) { return key(); } + else if constexpr (__id == 2) { return name(); } + else if constexpr (__id == 3) { return description(); } + else if constexpr (__id == 4) { return memberPorts(); } + else if constexpr (__id == 5) { return minimumCapacity(); } + else if constexpr (__id == 6) { return counterTags(); } } template @@ -5835,41 +5946,41 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortPgConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::PortPgConfig>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::PortPgConfig>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::PortPgConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Fields, + ::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Fields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetTcAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Fields, + ::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Fields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetTcAction>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -5880,40 +5991,112 @@ class ChildThriftPath<::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::F ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(tcValue, 1); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return tcValue(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + + +template +class ChildThriftPath<::facebook::fboss::cfg::Vlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::cfg::Vlan, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::cfg::Vlan, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>, + Parent>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>, + std::pair, Child>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ipv4Fields, 1); - STRUCT_CHILD_GETTERS(ipv6Fields, 2); - STRUCT_CHILD_GETTERS(transportFields, 3); - STRUCT_CHILD_GETTERS(mplsFields, 4); - STRUCT_CHILD_GETTERS(udfGroups, 5); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(id, 2); + STRUCT_CHILD_GETTERS(recordStats, 3); + STRUCT_CHILD_GETTERS(routable, 5); + STRUCT_CHILD_GETTERS(ipAddresses, 6); + STRUCT_CHILD_GETTERS(dhcpRelayAddressV4, 7); + STRUCT_CHILD_GETTERS(dhcpRelayAddressV6, 8); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 9); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 10); + STRUCT_CHILD_GETTERS(intfID, 11); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ipv4Fields(); } - else if constexpr (__id == 2) { return ipv6Fields(); } - else if constexpr (__id == 3) { return transportFields(); } - else if constexpr (__id == 4) { return mplsFields(); } - else if constexpr (__id == 5) { return udfGroups(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return id(); } + else if constexpr (__id == 3) { return recordStats(); } + else if constexpr (__id == 5) { return routable(); } + else if constexpr (__id == 6) { return ipAddresses(); } + else if constexpr (__id == 7) { return dhcpRelayAddressV4(); } + else if constexpr (__id == 8) { return dhcpRelayAddressV6(); } + else if constexpr (__id == 9) { return dhcpRelayOverridesV4(); } + else if constexpr (__id == 10) { return dhcpRelayOverridesV6(); } + else if constexpr (__id == 11) { return intfID(); } } template @@ -5923,21 +6106,21 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, + ::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::byte_t>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, + ::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::byte_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::int8_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -5945,21 +6128,21 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHop template -class ChildThriftPath<::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::FirmwareInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::SetTc, + ::facebook::fboss::cfg::FirmwareInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SetTc>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareInfo>, Parent> { public: using Self = Path< - ::facebook::fboss::state::SetTc, + ::facebook::fboss::cfg::FirmwareInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SetTc>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareInfo>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -5968,25 +6151,35 @@ class ChildThriftPath<::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::FirmwareLoadType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::FirmwareLoadType>>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(action, 1); - STRUCT_CHILD_GETTERS(sendToCPU, 2); + STRUCT_CHILD_GETTERS(coreToUse, 1); + STRUCT_CHILD_GETTERS(path, 2); + STRUCT_CHILD_GETTERS(logPath, 3); + STRUCT_CHILD_GETTERS(firmwareLoadType, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return action(); } - else if constexpr (__id == 2) { return sendToCPU(); } + if constexpr (__id == 1) { return coreToUse(); } + else if constexpr (__id == 2) { return path(); } + else if constexpr (__id == 3) { return logPath(); } + else if constexpr (__id == 4) { return firmwareLoadType(); } } template @@ -5997,21 +6190,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::TrafficCounter, + ::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficCounter>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RedirectToNextHopAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::TrafficCounter, + ::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficCounter>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RedirectToNextHopAction>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -6020,25 +6213,25 @@ class ChildThriftPath<::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(types, 2); + STRUCT_CHILD_GETTERS(action, 1); + STRUCT_CHILD_GETTERS(resolvedNexthops, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return types(); } + if constexpr (__id == 1) { return action(); } + else if constexpr (__id == 2) { return resolvedNexthops(); } } template @@ -6049,21 +6242,21 @@ std::pair> template -class ChildThriftPath<::facebook::fboss::phy::PinConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PinConfig, + ::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PinConfig, + ::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -6072,40 +6265,25 @@ class ChildThriftPath<::facebook::fboss::phy::PinConfig, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::state::SocketAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(tx, 2); - STRUCT_CHILD_GETTERS(rx, 3); - STRUCT_CHILD_GETTERS(laneMap, 4); - STRUCT_CHILD_GETTERS(polaritySwap, 5); + STRUCT_CHILD_GETTERS(address, 2); template auto operator()(const std::integral_constant&) { if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return tx(); } - else if constexpr (__id == 3) { return rx(); } - else if constexpr (__id == 4) { return laneMap(); } - else if constexpr (__id == 5) { return polaritySwap(); } + else if constexpr (__id == 2) { return address(); } } template @@ -6116,19 +6294,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QosRule, + ::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QosRule, + ::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchConfig>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -6139,25 +6317,300 @@ class ChildThriftPath<::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::LoadBalancer>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::TrafficCounter>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosPolicy>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticIp2MplsRoute>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::MirrorOnDropReport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(queueId, 1); - STRUCT_CHILD_GETTERS(dscp, 2); + STRUCT_CHILD_GETTERS(version, 1); + STRUCT_CHILD_GETTERS(ports, 2); + STRUCT_CHILD_GETTERS(vlans, 3); + STRUCT_CHILD_GETTERS(vlanPorts, 4); + STRUCT_CHILD_GETTERS(defaultVlan, 5); + STRUCT_CHILD_GETTERS(interfaces, 6); + STRUCT_CHILD_GETTERS(arpTimeoutSeconds, 7); + STRUCT_CHILD_GETTERS(arpRefreshSeconds, 8); + STRUCT_CHILD_GETTERS(arpAgerInterval, 9); + STRUCT_CHILD_GETTERS(proactiveArp, 10); + STRUCT_CHILD_GETTERS(cpuMAC, 11); + STRUCT_CHILD_GETTERS(staticRoutesWithNhops, 12); + STRUCT_CHILD_GETTERS(staticRoutesToNull, 13); + STRUCT_CHILD_GETTERS(staticRoutesToCPU, 14); + STRUCT_CHILD_GETTERS(acls, 15); + STRUCT_CHILD_GETTERS(maxNeighborProbes, 16); + STRUCT_CHILD_GETTERS(staleEntryInterval, 17); + STRUCT_CHILD_GETTERS(aggregatePorts, 18); + STRUCT_CHILD_GETTERS(clientIdToAdminDistance, 19); + STRUCT_CHILD_GETTERS(dhcpRelaySrcOverrideV4, 20); + STRUCT_CHILD_GETTERS(dhcpRelaySrcOverrideV6, 21); + STRUCT_CHILD_GETTERS(dhcpReplySrcOverrideV4, 22); + STRUCT_CHILD_GETTERS(dhcpReplySrcOverrideV6, 23); + STRUCT_CHILD_GETTERS(globalEgressTrafficPolicy_DEPRECATED, 24); + STRUCT_CHILD_GETTERS(config_version, 25); + STRUCT_CHILD_GETTERS(sFlowCollectors, 26); + STRUCT_CHILD_GETTERS(lacp, 27); + STRUCT_CHILD_GETTERS(cpuQueues, 28); + STRUCT_CHILD_GETTERS(cpuTrafficPolicy, 29); + STRUCT_CHILD_GETTERS(loadBalancers, 30); + STRUCT_CHILD_GETTERS(dataPlaneTrafficPolicy, 31); + STRUCT_CHILD_GETTERS(mirrors, 32); + STRUCT_CHILD_GETTERS(trafficCounters, 33); + STRUCT_CHILD_GETTERS(qosPolicies, 34); + STRUCT_CHILD_GETTERS(defaultPortQueues, 35); + STRUCT_CHILD_GETTERS(staticMplsRoutesWithNhops, 36); + STRUCT_CHILD_GETTERS(staticMplsRoutesToNull, 37); + STRUCT_CHILD_GETTERS(staticMplsRoutesToCPU, 38); + STRUCT_CHILD_GETTERS(staticIp2MplsRoutes, 39); + STRUCT_CHILD_GETTERS(portQueueConfigs, 40); + STRUCT_CHILD_GETTERS(switchSettings, 41); + STRUCT_CHILD_GETTERS(qcmConfig, 42); + STRUCT_CHILD_GETTERS(portPgConfigs, 43); + STRUCT_CHILD_GETTERS(bufferPoolConfigs, 44); + STRUCT_CHILD_GETTERS(aclTableGroup, 45); + STRUCT_CHILD_GETTERS(sdkVersion, 46); + STRUCT_CHILD_GETTERS(ipInIpTunnels, 47); + STRUCT_CHILD_GETTERS(dsfNodes, 48); + STRUCT_CHILD_GETTERS(udfConfig, 49); + STRUCT_CHILD_GETTERS(flowletSwitchingConfig, 50); + STRUCT_CHILD_GETTERS(defaultVoqConfig, 51); + STRUCT_CHILD_GETTERS(portFlowletConfigs, 52); + STRUCT_CHILD_GETTERS(icmpV4UnavailableSrcAddress, 53); + STRUCT_CHILD_GETTERS(hostname, 54); + STRUCT_CHILD_GETTERS(cpuVoqs, 55); + STRUCT_CHILD_GETTERS(aclTableGroups, 56); + STRUCT_CHILD_GETTERS(mirrorOnDropReports, 57); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return queueId(); } - else if constexpr (__id == 2) { return dscp(); } + if constexpr (__id == 1) { return version(); } + else if constexpr (__id == 2) { return ports(); } + else if constexpr (__id == 3) { return vlans(); } + else if constexpr (__id == 4) { return vlanPorts(); } + else if constexpr (__id == 5) { return defaultVlan(); } + else if constexpr (__id == 6) { return interfaces(); } + else if constexpr (__id == 7) { return arpTimeoutSeconds(); } + else if constexpr (__id == 8) { return arpRefreshSeconds(); } + else if constexpr (__id == 9) { return arpAgerInterval(); } + else if constexpr (__id == 10) { return proactiveArp(); } + else if constexpr (__id == 11) { return cpuMAC(); } + else if constexpr (__id == 12) { return staticRoutesWithNhops(); } + else if constexpr (__id == 13) { return staticRoutesToNull(); } + else if constexpr (__id == 14) { return staticRoutesToCPU(); } + else if constexpr (__id == 15) { return acls(); } + else if constexpr (__id == 16) { return maxNeighborProbes(); } + else if constexpr (__id == 17) { return staleEntryInterval(); } + else if constexpr (__id == 18) { return aggregatePorts(); } + else if constexpr (__id == 19) { return clientIdToAdminDistance(); } + else if constexpr (__id == 20) { return dhcpRelaySrcOverrideV4(); } + else if constexpr (__id == 21) { return dhcpRelaySrcOverrideV6(); } + else if constexpr (__id == 22) { return dhcpReplySrcOverrideV4(); } + else if constexpr (__id == 23) { return dhcpReplySrcOverrideV6(); } + else if constexpr (__id == 24) { return globalEgressTrafficPolicy_DEPRECATED(); } + else if constexpr (__id == 25) { return config_version(); } + else if constexpr (__id == 26) { return sFlowCollectors(); } + else if constexpr (__id == 27) { return lacp(); } + else if constexpr (__id == 28) { return cpuQueues(); } + else if constexpr (__id == 29) { return cpuTrafficPolicy(); } + else if constexpr (__id == 30) { return loadBalancers(); } + else if constexpr (__id == 31) { return dataPlaneTrafficPolicy(); } + else if constexpr (__id == 32) { return mirrors(); } + else if constexpr (__id == 33) { return trafficCounters(); } + else if constexpr (__id == 34) { return qosPolicies(); } + else if constexpr (__id == 35) { return defaultPortQueues(); } + else if constexpr (__id == 36) { return staticMplsRoutesWithNhops(); } + else if constexpr (__id == 37) { return staticMplsRoutesToNull(); } + else if constexpr (__id == 38) { return staticMplsRoutesToCPU(); } + else if constexpr (__id == 39) { return staticIp2MplsRoutes(); } + else if constexpr (__id == 40) { return portQueueConfigs(); } + else if constexpr (__id == 41) { return switchSettings(); } + else if constexpr (__id == 42) { return qcmConfig(); } + else if constexpr (__id == 43) { return portPgConfigs(); } + else if constexpr (__id == 44) { return bufferPoolConfigs(); } + else if constexpr (__id == 45) { return aclTableGroup(); } + else if constexpr (__id == 46) { return sdkVersion(); } + else if constexpr (__id == 47) { return ipInIpTunnels(); } + else if constexpr (__id == 48) { return dsfNodes(); } + else if constexpr (__id == 49) { return udfConfig(); } + else if constexpr (__id == 50) { return flowletSwitchingConfig(); } + else if constexpr (__id == 51) { return defaultVoqConfig(); } + else if constexpr (__id == 52) { return portFlowletConfigs(); } + else if constexpr (__id == 53) { return icmpV4UnavailableSrcAddress(); } + else if constexpr (__id == 54) { return hostname(); } + else if constexpr (__id == 55) { return cpuVoqs(); } + else if constexpr (__id == 56) { return aclTableGroups(); } + else if constexpr (__id == 57) { return mirrorOnDropReports(); } } template @@ -6166,65 +6619,23 @@ std::pair>> } }; -template -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>, - Parent>; - using Child = Path<::facebook::fboss::cfg::SwitchType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int64_t); -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::Range64>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::Range64>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::MplsAction, + ::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MplsAction>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::MinimumCapacity>, Parent> { public: using Self = Path< - ::facebook::fboss::MplsAction, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MplsAction>, + ::facebook::fboss::cfg::MinimumCapacity, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::MinimumCapacity>, Parent>; - using strings = ::facebook::fboss::mpls_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -6233,30 +6644,25 @@ class ChildThriftPath<::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::Fs ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::MplsActionCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MplsActionCode>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(action, 1); - STRUCT_CHILD_GETTERS(swapLabel, 2); - STRUCT_CHILD_GETTERS(pushLabels, 3); + STRUCT_CHILD_GETTERS(linkCount, 1); + STRUCT_CHILD_GETTERS(linkPercentage, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return action(); } - else if constexpr (__id == 2) { return swapLabel(); } - else if constexpr (__id == 3) { return pushLabels(); } + if constexpr (__id == 1) { return linkCount(); } + else if constexpr (__id == 2) { return linkPercentage(); } } template @@ -6267,21 +6673,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::RouteNextHopEntry, + ::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficCounter>, Parent> { public: using Self = Path< - ::facebook::fboss::state::RouteNextHopEntry, + ::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficCounter>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -6290,40 +6696,25 @@ class ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::f ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>>, -std::pair>, -std::pair>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::AdminDistance, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::AdminDistance>>>, - std::pair, Child<::facebook::fboss::RouteForwardAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::RouteForwardAction>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(adminDistance, 1); - STRUCT_CHILD_GETTERS(action, 2); - STRUCT_CHILD_GETTERS(counterID, 3); - STRUCT_CHILD_GETTERS(classID, 4); - STRUCT_CHILD_GETTERS(nexthops, 5); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(types, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return adminDistance(); } - else if constexpr (__id == 2) { return action(); } - else if constexpr (__id == 3) { return counterID(); } - else if constexpr (__id == 4) { return classID(); } - else if constexpr (__id == 5) { return nexthops(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return types(); } } template @@ -6334,21 +6725,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::UdfPacketMatcher, + ::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SetTc>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::UdfPacketMatcher, + ::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SetTc>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -6357,40 +6748,25 @@ class ChildThriftPath<::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>, -std::pair>>, -std::pair>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::UdfMatchL2Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL2Type>>>, - std::pair, Child<::facebook::fboss::cfg::UdfMatchL3Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL3Type>>>, - std::pair, Child<::facebook::fboss::cfg::UdfMatchL4Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL4Type>>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(l2PktType, 2); - STRUCT_CHILD_GETTERS(l3pktType, 3); - STRUCT_CHILD_GETTERS(l4PktType, 4); - STRUCT_CHILD_GETTERS(UdfL4DstPort, 5); + STRUCT_CHILD_GETTERS(action, 1); + STRUCT_CHILD_GETTERS(sendToCPU, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return l2PktType(); } - else if constexpr (__id == 3) { return l3pktType(); } - else if constexpr (__id == 4) { return l4PktType(); } - else if constexpr (__id == 5) { return UdfL4DstPort(); } + if constexpr (__id == 1) { return action(); } + else if constexpr (__id == 2) { return sendToCPU(); } } template @@ -6399,44 +6775,23 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::PinConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::bcm::BcmConfig, + ::facebook::fboss::phy::PinConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::bcm::BcmConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::bcm::BcmConfig, + ::facebook::fboss::phy::PinConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::bcm::BcmConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinConfig>, Parent>; - using strings = ::facebook::fboss::bcm::bcm_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -6445,25 +6800,40 @@ class ChildThriftPath<::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(config, 1); - STRUCT_CHILD_GETTERS(yamlConfig, 2); + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(tx, 2); + STRUCT_CHILD_GETTERS(rx, 3); + STRUCT_CHILD_GETTERS(laneMap, 4); + STRUCT_CHILD_GETTERS(polaritySwap, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return config(); } - else if constexpr (__id == 2) { return yamlConfig(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return tx(); } + else if constexpr (__id == 3) { return rx(); } + else if constexpr (__id == 4) { return laneMap(); } + else if constexpr (__id == 5) { return polaritySwap(); } } template @@ -6474,21 +6844,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::MatchAction, + ::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>, Parent> { public: using Self = Path< - ::facebook::fboss::state::MatchAction, + ::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -6497,70 +6867,25 @@ class ChildThriftPath<::facebook::fboss::state::MatchAction, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::ToCpuAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ToCpuAction>>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::FlowletAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::FlowletAction>>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(sendToQueue, 1); - STRUCT_CHILD_GETTERS(trafficCounter, 2); - STRUCT_CHILD_GETTERS(setDscp, 3); - STRUCT_CHILD_GETTERS(ingressMirror, 4); - STRUCT_CHILD_GETTERS(egressMirror, 5); - STRUCT_CHILD_GETTERS(toCpuAction, 6); - STRUCT_CHILD_GETTERS(macsecFlow, 7); - STRUCT_CHILD_GETTERS(redirectToNextHop, 8); - STRUCT_CHILD_GETTERS(setTc, 9); - STRUCT_CHILD_GETTERS(userDefinedTrap, 10); - STRUCT_CHILD_GETTERS(flowletAction, 11); + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(queueId, 1); + STRUCT_CHILD_GETTERS(dscp, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return sendToQueue(); } - else if constexpr (__id == 2) { return trafficCounter(); } - else if constexpr (__id == 3) { return setDscp(); } - else if constexpr (__id == 4) { return ingressMirror(); } - else if constexpr (__id == 5) { return egressMirror(); } - else if constexpr (__id == 6) { return toCpuAction(); } - else if constexpr (__id == 7) { return macsecFlow(); } - else if constexpr (__id == 8) { return redirectToNextHop(); } - else if constexpr (__id == 9) { return setTc(); } - else if constexpr (__id == 10) { return userDefinedTrap(); } - else if constexpr (__id == 11) { return flowletAction(); } + if constexpr (__id == 1) { return queueId(); } + else if constexpr (__id == 2) { return dscp(); } } template @@ -6570,21 +6895,42 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, + ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::SwitchType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int64_t); +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, + ::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -6592,21 +6938,21 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueu template -class ChildThriftPath<::facebook::fboss::cfg::Vlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Vlan, + ::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>, + ::apache::thrift::type::struct_t<::facebook::fboss::MplsAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Vlan, + ::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>, + ::apache::thrift::type::struct_t<::facebook::fboss::MplsAction>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::mpls_tags::strings; template using Child = Path< ChildType, @@ -6615,65 +6961,30 @@ class ChildThriftPath<::facebook::fboss::cfg::Vlan, ::facebook::fboss::fsdb::Fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + using Children = fatal::tuple>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::MplsActionCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MplsActionCode>>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(id, 2); - STRUCT_CHILD_GETTERS(recordStats, 3); - STRUCT_CHILD_GETTERS(routable, 5); - STRUCT_CHILD_GETTERS(ipAddresses, 6); - STRUCT_CHILD_GETTERS(dhcpRelayAddressV4, 7); - STRUCT_CHILD_GETTERS(dhcpRelayAddressV6, 8); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 9); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 10); - STRUCT_CHILD_GETTERS(intfID, 11); + STRUCT_CHILD_GETTERS(action, 1); + STRUCT_CHILD_GETTERS(swapLabel, 2); + STRUCT_CHILD_GETTERS(pushLabels, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return id(); } - else if constexpr (__id == 3) { return recordStats(); } - else if constexpr (__id == 5) { return routable(); } - else if constexpr (__id == 6) { return ipAddresses(); } - else if constexpr (__id == 7) { return dhcpRelayAddressV4(); } - else if constexpr (__id == 8) { return dhcpRelayAddressV6(); } - else if constexpr (__id == 9) { return dhcpRelayOverridesV4(); } - else if constexpr (__id == 10) { return dhcpRelayOverridesV6(); } - else if constexpr (__id == 11) { return intfID(); } + if constexpr (__id == 1) { return action(); } + else if constexpr (__id == 2) { return swapLabel(); } + else if constexpr (__id == 3) { return pushLabels(); } } template @@ -6682,105 +6993,247 @@ std::pair -class ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::std::int8_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::byte_t>, - Parent> { - public: - using Self = Path< - ::std::vector<::std::int8_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::byte_t>, - Parent>; - using Child = Path<::std::int8_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableActionType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::AclTableActionType>, + ::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::AclTableActionType>, + ::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>, Parent>; - using Child = Path<::facebook::fboss::cfg::AclTableActionType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>, +std::pair>>, +std::pair>, +std::pair>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::AdminDistance, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::AdminDistance>>>, + std::pair, Child<::facebook::fboss::RouteForwardAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::RouteForwardAction>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(adminDistance, 1); + STRUCT_CHILD_GETTERS(action, 2); + STRUCT_CHILD_GETTERS(counterID, 3); + STRUCT_CHILD_GETTERS(classID, 4); + STRUCT_CHILD_GETTERS(nexthops, 5); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return adminDistance(); } + else if constexpr (__id == 2) { return action(); } + else if constexpr (__id == 3) { return counterID(); } + else if constexpr (__id == 4) { return classID(); } + else if constexpr (__id == 5) { return nexthops(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; + template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, + ::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, + ::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::LoadBalancerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>>, +std::pair>>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::UdfMatchL2Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL2Type>>>, + std::pair, Child<::facebook::fboss::cfg::UdfMatchL3Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL3Type>>>, + std::pair, Child<::facebook::fboss::cfg::UdfMatchL4Type, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::UdfMatchL4Type>>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(l2PktType, 2); + STRUCT_CHILD_GETTERS(l3pktType, 3); + STRUCT_CHILD_GETTERS(l4PktType, 4); + STRUCT_CHILD_GETTERS(UdfL4DstPort, 5); - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::LoadBalancerID); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return l2PktType(); } + else if constexpr (__id == 3) { return l3pktType(); } + else if constexpr (__id == 4) { return l4PktType(); } + else if constexpr (__id == 5) { return UdfL4DstPort(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; + template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosPolicy>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::QosPolicy>, + ::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::QosPolicy>, + ::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int32_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(name, 2); + STRUCT_CHILD_GETTERS(description, 3); + STRUCT_CHILD_GETTERS(systemPriority, 4); + STRUCT_CHILD_GETTERS(systemID, 5); + STRUCT_CHILD_GETTERS(minimumLinkCount, 6); + STRUCT_CHILD_GETTERS(ports, 7); + STRUCT_CHILD_GETTERS(portToFwdState, 8); + STRUCT_CHILD_GETTERS(portToPartnerState, 9); + STRUCT_CHILD_GETTERS(interfaceIDs, 10); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return name(); } + else if constexpr (__id == 3) { return description(); } + else if constexpr (__id == 4) { return systemPriority(); } + else if constexpr (__id == 5) { return systemID(); } + else if constexpr (__id == 6) { return minimumLinkCount(); } + else if constexpr (__id == 7) { return ports(); } + else if constexpr (__id == 8) { return portToFwdState(); } + else if constexpr (__id == 9) { return portToPartnerState(); } + else if constexpr (__id == 10) { return interfaceIDs(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::FlowletSwitchingConfig, + ::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FlowletSwitchingConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::FlowletSwitchingConfig, + ::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FlowletSwitchingConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -6791,75 +7244,25 @@ class ChildThriftPath<::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::facebook::fboss::cfg::SwitchingMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchingMode>>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(inactivityIntervalUsecs, 1); - STRUCT_CHILD_GETTERS(flowletTableSize, 2); - STRUCT_CHILD_GETTERS(dynamicEgressLoadExponent, 3); - STRUCT_CHILD_GETTERS(dynamicQueueExponent, 4); - STRUCT_CHILD_GETTERS(dynamicQueueMinThresholdBytes, 5); - STRUCT_CHILD_GETTERS(dynamicQueueMaxThresholdBytes, 6); - STRUCT_CHILD_GETTERS(dynamicSampleRate, 7); - STRUCT_CHILD_GETTERS(dynamicEgressMinThresholdBytes, 8); - STRUCT_CHILD_GETTERS(dynamicEgressMaxThresholdBytes, 9); - STRUCT_CHILD_GETTERS(dynamicPhysicalQueueExponent, 10); - STRUCT_CHILD_GETTERS(maxLinks, 11); - STRUCT_CHILD_GETTERS(switchingMode, 12); + STRUCT_CHILD_GETTERS(vlanID, 1); + STRUCT_CHILD_GETTERS(macAddress, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return inactivityIntervalUsecs(); } - else if constexpr (__id == 2) { return flowletTableSize(); } - else if constexpr (__id == 3) { return dynamicEgressLoadExponent(); } - else if constexpr (__id == 4) { return dynamicQueueExponent(); } - else if constexpr (__id == 5) { return dynamicQueueMinThresholdBytes(); } - else if constexpr (__id == 6) { return dynamicQueueMaxThresholdBytes(); } - else if constexpr (__id == 7) { return dynamicSampleRate(); } - else if constexpr (__id == 8) { return dynamicEgressMinThresholdBytes(); } - else if constexpr (__id == 9) { return dynamicEgressMaxThresholdBytes(); } - else if constexpr (__id == 10) { return dynamicPhysicalQueueExponent(); } - else if constexpr (__id == 11) { return maxLinks(); } - else if constexpr (__id == 12) { return switchingMode(); } + if constexpr (__id == 1) { return vlanID(); } + else if constexpr (__id == 2) { return macAddress(); } } template @@ -6868,42 +7271,68 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, + ::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::TransceiverConfigOverride>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QueueMatchAction>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, + ::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::TransceiverConfigOverride>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QueueMatchAction>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::TransceiverConfigOverride, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(queueId, 1); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return queueId(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Ttl, + ::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Ttl>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketCounterMatchAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Ttl, + ::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Ttl>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketCounterMatchAction>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -6914,25 +7343,20 @@ class ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::Fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(value, 1); - STRUCT_CHILD_GETTERS(mask, 2); + STRUCT_CHILD_GETTERS(counterName, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return value(); } - else if constexpr (__id == 2) { return mask(); } + if constexpr (__id == 1) { return counterName(); } } template @@ -6942,41 +7366,41 @@ std::pair>> }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::FirmwareName, ::facebook::fboss::cfg::FirmwareInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, + ::std::map<::facebook::fboss::cfg::FirmwareName, ::facebook::fboss::cfg::FirmwareInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareInfo>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, + ::std::map<::facebook::fboss::cfg::FirmwareName, ::facebook::fboss::cfg::FirmwareInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareInfo>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::FirmwareInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::FirmwareName); }; template -class ChildThriftPath<::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::UdfConfig, + ::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::UdfConfig, + ::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -6987,25 +7411,25 @@ class ChildThriftPath<::facebook::fboss::cfg::UdfConfig, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(udfGroups, 1); - STRUCT_CHILD_GETTERS(udfPacketMatcher, 2); + STRUCT_CHILD_GETTERS(vlanID, 1); + STRUCT_CHILD_GETTERS(ipAddress, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return udfGroups(); } - else if constexpr (__id == 2) { return udfPacketMatcher(); } + if constexpr (__id == 1) { return vlanID(); } + else if constexpr (__id == 2) { return ipAddress(); } } template @@ -7014,239 +7438,63 @@ std::pair -class ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::TxSettings, + ::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::TxSettings>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::TxSettings, + ::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::TxSettings>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(pre, 1); - STRUCT_CHILD_GETTERS(pre2, 2); - STRUCT_CHILD_GETTERS(main, 3); - STRUCT_CHILD_GETTERS(post, 4); - STRUCT_CHILD_GETTERS(post2, 5); - STRUCT_CHILD_GETTERS(post3, 6); - STRUCT_CHILD_GETTERS(lutMode, 7); - STRUCT_CHILD_GETTERS(driveCurrent, 8); - STRUCT_CHILD_GETTERS(diffEncoderEn, 9); - STRUCT_CHILD_GETTERS(digGain, 10); - STRUCT_CHILD_GETTERS(ffeCoeff0, 11); - STRUCT_CHILD_GETTERS(ffeCoeff1, 12); - STRUCT_CHILD_GETTERS(ffeCoeff2, 13); - STRUCT_CHILD_GETTERS(ffeCoeff3, 14); - STRUCT_CHILD_GETTERS(ffeCoeff4, 15); - STRUCT_CHILD_GETTERS(parityEncoderEn, 16); - STRUCT_CHILD_GETTERS(thpEn, 17); - STRUCT_CHILD_GETTERS(setPrecode, 18); - STRUCT_CHILD_GETTERS(pre3, 19); - STRUCT_CHILD_GETTERS(driverSwing, 20); - STRUCT_CHILD_GETTERS(innerEyeNeg, 21); - STRUCT_CHILD_GETTERS(innerEyePos, 22); - STRUCT_CHILD_GETTERS(ffeCoeff5, 23); - STRUCT_CHILD_GETTERS(ldoBypass, 24); - STRUCT_CHILD_GETTERS(firPre1, 25); - STRUCT_CHILD_GETTERS(firPre2, 26); - STRUCT_CHILD_GETTERS(firPre3, 27); - STRUCT_CHILD_GETTERS(firMain, 28); - STRUCT_CHILD_GETTERS(firPost1, 29); - STRUCT_CHILD_GETTERS(firPost2, 30); - STRUCT_CHILD_GETTERS(firPost3, 31); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return pre(); } - else if constexpr (__id == 2) { return pre2(); } - else if constexpr (__id == 3) { return main(); } - else if constexpr (__id == 4) { return post(); } - else if constexpr (__id == 5) { return post2(); } - else if constexpr (__id == 6) { return post3(); } - else if constexpr (__id == 7) { return lutMode(); } - else if constexpr (__id == 8) { return driveCurrent(); } - else if constexpr (__id == 9) { return diffEncoderEn(); } - else if constexpr (__id == 10) { return digGain(); } - else if constexpr (__id == 11) { return ffeCoeff0(); } - else if constexpr (__id == 12) { return ffeCoeff1(); } - else if constexpr (__id == 13) { return ffeCoeff2(); } - else if constexpr (__id == 14) { return ffeCoeff3(); } - else if constexpr (__id == 15) { return ffeCoeff4(); } - else if constexpr (__id == 16) { return parityEncoderEn(); } - else if constexpr (__id == 17) { return thpEn(); } - else if constexpr (__id == 18) { return setPrecode(); } - else if constexpr (__id == 19) { return pre3(); } - else if constexpr (__id == 20) { return driverSwing(); } - else if constexpr (__id == 21) { return innerEyeNeg(); } - else if constexpr (__id == 22) { return innerEyePos(); } - else if constexpr (__id == 23) { return ffeCoeff5(); } - else if constexpr (__id == 24) { return ldoBypass(); } - else if constexpr (__id == 25) { return firPre1(); } - else if constexpr (__id == 26) { return firPre2(); } - else if constexpr (__id == 27) { return firPre3(); } - else if constexpr (__id == 28) { return firMain(); } - else if constexpr (__id == 29) { return firPost1(); } - else if constexpr (__id == 30) { return firPost2(); } - else if constexpr (__id == 31) { return firPost3(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::set<::facebook::fboss::cfg::IPv6Field>, + ::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>>, Parent> { public: using Self = Path< - ::std::set<::facebook::fboss::cfg::IPv6Field>, + ::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>>, Parent>; - using Child = Path<::facebook::fboss::cfg::IPv6Field, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv6Field>, Self>; + using Child = ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortPgConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::IPv6Field); + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortPgConfigName); }; template -class ChildThriftPath<::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::LoadBalancer, + ::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Fields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::LoadBalancer, + ::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Fields>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -7257,35 +7505,40 @@ class ChildThriftPath<::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>, -std::pair>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::LoadBalancerID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::HashingAlgorithm, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::HashingAlgorithm>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(fieldSelection, 2); - STRUCT_CHILD_GETTERS(algorithm, 3); - STRUCT_CHILD_GETTERS(seed, 4); + STRUCT_CHILD_GETTERS(ipv4Fields, 1); + STRUCT_CHILD_GETTERS(ipv6Fields, 2); + STRUCT_CHILD_GETTERS(transportFields, 3); + STRUCT_CHILD_GETTERS(mplsFields, 4); + STRUCT_CHILD_GETTERS(udfGroups, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return fieldSelection(); } - else if constexpr (__id == 3) { return algorithm(); } - else if constexpr (__id == 4) { return seed(); } + if constexpr (__id == 1) { return ipv4Fields(); } + else if constexpr (__id == 2) { return ipv6Fields(); } + else if constexpr (__id == 3) { return transportFields(); } + else if constexpr (__id == 4) { return mplsFields(); } + else if constexpr (__id == 5) { return udfGroups(); } } template @@ -7295,21 +7548,21 @@ std::pair>> }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MatchToAction>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::MatchToAction>, + ::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::MatchToAction>, + ::std::vector<::facebook::fboss::cfg::StaticRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteNoNextHops>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::StaticRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -7317,21 +7570,21 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MatchToAction>, ::fa template -class ChildThriftPath<::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortNeighbor, + ::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>, + ::apache::thrift::type::struct_t<::facebook::fboss::bcm::BcmConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortNeighbor, + ::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>, + ::apache::thrift::type::struct_t<::facebook::fboss::bcm::BcmConfig>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::bcm::bcm_config_tags::strings; template using Child = Path< ChildType, @@ -7340,25 +7593,25 @@ class ChildThriftPath<::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(remoteSystem, 1); - STRUCT_CHILD_GETTERS(remotePort, 2); + STRUCT_CHILD_GETTERS(config, 1); + STRUCT_CHILD_GETTERS(yamlConfig, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return remoteSystem(); } - else if constexpr (__id == 2) { return remotePort(); } + if constexpr (__id == 1) { return config(); } + else if constexpr (__id == 2) { return yamlConfig(); } } template @@ -7367,23 +7620,107 @@ std::pair +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; template -class ChildThriftPath<::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableActionType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PolaritySwap, + ::std::vector<::facebook::fboss::cfg::AclTableActionType>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::AclTableActionType>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::AclTableActionType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableActionType>, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::LoadBalancerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::LoadBalancerID); +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosPolicy>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::QosPolicy>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::QosPolicy>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + + +template +class ChildThriftPath<::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PolaritySwap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FlowletSwitchingConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PolaritySwap, + ::facebook::fboss::cfg::FlowletSwitchingConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PolaritySwap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::FlowletSwitchingConfig>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -7392,25 +7729,75 @@ class ChildThriftPath<::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::facebook::fboss::cfg::SwitchingMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchingMode>>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(rx, 1); - STRUCT_CHILD_GETTERS(tx, 2); + STRUCT_CHILD_GETTERS(inactivityIntervalUsecs, 1); + STRUCT_CHILD_GETTERS(flowletTableSize, 2); + STRUCT_CHILD_GETTERS(dynamicEgressLoadExponent, 3); + STRUCT_CHILD_GETTERS(dynamicQueueExponent, 4); + STRUCT_CHILD_GETTERS(dynamicQueueMinThresholdBytes, 5); + STRUCT_CHILD_GETTERS(dynamicQueueMaxThresholdBytes, 6); + STRUCT_CHILD_GETTERS(dynamicSampleRate, 7); + STRUCT_CHILD_GETTERS(dynamicEgressMinThresholdBytes, 8); + STRUCT_CHILD_GETTERS(dynamicEgressMaxThresholdBytes, 9); + STRUCT_CHILD_GETTERS(dynamicPhysicalQueueExponent, 10); + STRUCT_CHILD_GETTERS(maxLinks, 11); + STRUCT_CHILD_GETTERS(switchingMode, 12); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return rx(); } - else if constexpr (__id == 2) { return tx(); } + if constexpr (__id == 1) { return inactivityIntervalUsecs(); } + else if constexpr (__id == 2) { return flowletTableSize(); } + else if constexpr (__id == 3) { return dynamicEgressLoadExponent(); } + else if constexpr (__id == 4) { return dynamicQueueExponent(); } + else if constexpr (__id == 5) { return dynamicQueueMinThresholdBytes(); } + else if constexpr (__id == 6) { return dynamicQueueMaxThresholdBytes(); } + else if constexpr (__id == 7) { return dynamicSampleRate(); } + else if constexpr (__id == 8) { return dynamicEgressMinThresholdBytes(); } + else if constexpr (__id == 9) { return dynamicEgressMaxThresholdBytes(); } + else if constexpr (__id == 10) { return dynamicPhysicalQueueExponent(); } + else if constexpr (__id == 11) { return maxLinks(); } + else if constexpr (__id == 12) { return switchingMode(); } } template @@ -7419,23 +7806,44 @@ std::pair>>:: } }; +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::TransceiverConfigOverride>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::TransceiverConfigOverride>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::TransceiverConfigOverride>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::TransceiverConfigOverride, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + template -class ChildThriftPath<::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::NeighborResponseEntryFields, + ::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Ttl>, Parent> { public: using Self = Path< - ::facebook::fboss::state::NeighborResponseEntryFields, + ::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Ttl>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -7444,30 +7852,25 @@ class ChildThriftPath<::facebook::fboss::state::NeighborResponseEntryFields, ::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ipAddress, 1); - STRUCT_CHILD_GETTERS(mac, 2); - STRUCT_CHILD_GETTERS(interfaceId, 3); + STRUCT_CHILD_GETTERS(value, 1); + STRUCT_CHILD_GETTERS(mask, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ipAddress(); } - else if constexpr (__id == 2) { return mac(); } - else if constexpr (__id == 3) { return interfaceId(); } + if constexpr (__id == 1) { return value(); } + else if constexpr (__id == 2) { return mask(); } } template @@ -7477,127 +7880,165 @@ std::pair -class ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::set<::facebook::fboss::cfg::TransportField>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>>, Parent> { public: using Self = Path< - ::std::set<::facebook::fboss::cfg::TransportField>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>>, Parent>; - using Child = Path<::facebook::fboss::cfg::TransportField, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>, Self>; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::TransportField); + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; -template -class ChildThriftPath<::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int32_t, ::std::string>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int32_t, ::std::string>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, - Parent>; - using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::AclTable>, + ::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QcmConfig>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::AclTable>, + ::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QcmConfig>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; -template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>, ::apache::thrift::type::i16_t>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>, ::apache::thrift::type::i16_t>, - Parent>; - using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(numFlowSamplesPerView, 1); + STRUCT_CHILD_GETTERS(flowLimit, 2); + STRUCT_CHILD_GETTERS(numFlowsClear, 3); + STRUCT_CHILD_GETTERS(scanIntervalInUsecs, 4); + STRUCT_CHILD_GETTERS(exportThreshold, 5); + STRUCT_CHILD_GETTERS(flowWeights, 6); + STRUCT_CHILD_GETTERS(agingIntervalInMsecs, 7); + STRUCT_CHILD_GETTERS(collectorDstIp, 8); + STRUCT_CHILD_GETTERS(collectorSrcPort, 10); + STRUCT_CHILD_GETTERS(collectorDstPort, 11); + STRUCT_CHILD_GETTERS(collectorDscp, 12); + STRUCT_CHILD_GETTERS(ppsToQcm, 13); + STRUCT_CHILD_GETTERS(collectorSrcIp, 14); + STRUCT_CHILD_GETTERS(monitorQcmPortList, 15); + STRUCT_CHILD_GETTERS(port2QosQueueIds, 16); + STRUCT_CHILD_GETTERS(monitorQcmCfgPortsOnly, 17); - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PacketRxReason); -}; - -template -class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::TcvrState>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::TcvrState>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::TcvrState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return numFlowSamplesPerView(); } + else if constexpr (__id == 2) { return flowLimit(); } + else if constexpr (__id == 3) { return numFlowsClear(); } + else if constexpr (__id == 4) { return scanIntervalInUsecs(); } + else if constexpr (__id == 5) { return exportThreshold(); } + else if constexpr (__id == 6) { return flowWeights(); } + else if constexpr (__id == 7) { return agingIntervalInMsecs(); } + else if constexpr (__id == 8) { return collectorDstIp(); } + else if constexpr (__id == 10) { return collectorSrcPort(); } + else if constexpr (__id == 11) { return collectorDstPort(); } + else if constexpr (__id == 12) { return collectorDscp(); } + else if constexpr (__id == 13) { return ppsToQcm(); } + else if constexpr (__id == 14) { return collectorSrcIp(); } + else if constexpr (__id == 15) { return monitorQcmPortList(); } + else if constexpr (__id == 16) { return port2QosQueueIds(); } + else if constexpr (__id == 17) { return monitorQcmCfgPortsOnly(); } + } - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AsicConfig, + ::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AsicConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AsicConfig, + ::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AsicConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>, Parent>; - using strings = ::facebook::fboss::cfg::asic_config_v2_tags::strings; + using strings = ::facebook::fboss::common_tags::strings; template using Child = Path< ChildType, @@ -7606,25 +8047,35 @@ class ChildThriftPath<::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(common, 1); - STRUCT_CHILD_GETTERS(npuEntries, 2); + STRUCT_CHILD_GETTERS(address, 1); + STRUCT_CHILD_GETTERS(weight, 2); + STRUCT_CHILD_GETTERS(mplsAction, 3); + STRUCT_CHILD_GETTERS(disableTTLDecrement, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return common(); } - else if constexpr (__id == 2) { return npuEntries(); } + if constexpr (__id == 1) { return address(); } + else if constexpr (__id == 2) { return weight(); } + else if constexpr (__id == 3) { return mplsAction(); } + else if constexpr (__id == 4) { return disableTTLDecrement(); } } template @@ -7633,44 +8084,23 @@ std::pair -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::phy::PhyState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::phy::PhyState>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::phy::PhyState>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::string); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::AgentConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AgentConfig, + ::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AgentConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AgentConfig, + ::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AgentConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>, Parent>; - using strings = ::facebook::fboss::cfg::agent_config_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -7679,30 +8109,25 @@ class ChildThriftPath<::facebook::fboss::cfg::AgentConfig, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(defaultCommandLineArgs, 1); - STRUCT_CHILD_GETTERS(sw, 2); - STRUCT_CHILD_GETTERS(platform, 3); + STRUCT_CHILD_GETTERS(ip, 1); + STRUCT_CHILD_GETTERS(intfID, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return defaultCommandLineArgs(); } - else if constexpr (__id == 2) { return sw(); } - else if constexpr (__id == 3) { return platform(); } + if constexpr (__id == 1) { return ip(); } + else if constexpr (__id == 2) { return intfID(); } } template @@ -7712,42 +8137,42 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MirrorOnDropReport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, + ::std::vector<::facebook::fboss::cfg::MirrorOnDropReport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorOnDropReport>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, + ::std::vector<::facebook::fboss::cfg::MirrorOnDropReport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorOnDropReport>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::MirrorOnDropReport, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, + ::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, + ::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int16_t); @@ -7755,19 +8180,19 @@ class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::Trans template -class ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AclTableGroup, + ::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetDscpMatchAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AclTableGroup, + ::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetDscpMatchAction>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -7778,30 +8203,20 @@ class ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::AclStage, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>>>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(aclTables, 2); - STRUCT_CHILD_GETTERS(stage, 3); + STRUCT_CHILD_GETTERS(dscpValue, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return aclTables(); } - else if constexpr (__id == 3) { return stage(); } + if constexpr (__id == 1) { return dscpValue(); } } template @@ -7811,21 +8226,42 @@ std::pair> }; template -class ChildThriftPath<::std::vector<::facebook::fboss::MediaLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::MediaLaneSettings>, + ::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::MediaLaneSettings>, + ::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::LoadBalancer>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::LoadBalancer>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::LoadBalancer>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -7833,21 +8269,21 @@ class ChildThriftPath<::std::vector<::facebook::fboss::MediaLaneSettings>, ::fac template -class ChildThriftPath<::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SdkVersion, + ::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SdkVersion>, + ::apache::thrift::type::struct_t<::facebook::fboss::IpPrefix>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SdkVersion, + ::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SdkVersion>, + ::apache::thrift::type::struct_t<::facebook::fboss::IpPrefix>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::ctrl_tags::strings; template using Child = Path< ChildType, @@ -7856,30 +8292,25 @@ class ChildThriftPath<::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(asicSdk, 1); - STRUCT_CHILD_GETTERS(saiSdk, 2); - STRUCT_CHILD_GETTERS(firmware, 3); + STRUCT_CHILD_GETTERS(ip, 1); + STRUCT_CHILD_GETTERS(prefixLength, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return asicSdk(); } - else if constexpr (__id == 2) { return saiSdk(); } - else if constexpr (__id == 3) { return firmware(); } + if constexpr (__id == 1) { return ip(); } + else if constexpr (__id == 2) { return prefixLength(); } } template @@ -7890,53 +8321,48 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::RoutePrefix, + ::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RoutePrefix>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>, Parent> { public: using Self = Path< - ::facebook::fboss::state::RoutePrefix, + ::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RoutePrefix>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, - std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(v6, 1); - STRUCT_CHILD_GETTERS(prefix, 2); - STRUCT_CHILD_GETTERS(mask, 3); + STRUCT_CHILD_GETTERS(remoteSystem, 1); + STRUCT_CHILD_GETTERS(remotePort, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return v6(); } - else if constexpr (__id == 2) { return prefix(); } - else if constexpr (__id == 3) { return mask(); } + if constexpr (__id == 1) { return remoteSystem(); } + else if constexpr (__id == 2) { return remotePort(); } } template @@ -7947,21 +8373,21 @@ std::pair>> template -class ChildThriftPath<::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::ControlPlaneFields, + ::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PolaritySwap>, Parent> { public: using Self = Path< - ::facebook::fboss::state::ControlPlaneFields, + ::facebook::fboss::phy::PolaritySwap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PolaritySwap>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -7970,30 +8396,25 @@ class ChildThriftPath<::facebook::fboss::state::ControlPlaneFields, ::facebook:: ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(queues, 1); - STRUCT_CHILD_GETTERS(rxReasonToQueue, 2); - STRUCT_CHILD_GETTERS(defaultQosPolicy, 3); + STRUCT_CHILD_GETTERS(rx, 1); + STRUCT_CHILD_GETTERS(tx, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return queues(); } - else if constexpr (__id == 2) { return rxReasonToQueue(); } - else if constexpr (__id == 3) { return defaultQosPolicy(); } + if constexpr (__id == 1) { return rx(); } + else if constexpr (__id == 2) { return tx(); } } template @@ -8004,19 +8425,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::TransceiverSpecFields, + ::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::TransceiverSpecFields, + ::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -8027,35 +8448,30 @@ class ChildThriftPath<::facebook::fboss::state::TransceiverSpecFields, ::faceboo ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child>, - std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>, - std::pair, Child<::facebook::fboss::TransceiverManagementInterface, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::TransceiverManagementInterface>>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(cableLength, 2); - STRUCT_CHILD_GETTERS(mediaInterface, 3); - STRUCT_CHILD_GETTERS(managementInterface, 4); + STRUCT_CHILD_GETTERS(ipAddress, 1); + STRUCT_CHILD_GETTERS(mac, 2); + STRUCT_CHILD_GETTERS(interfaceId, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return cableLength(); } - else if constexpr (__id == 3) { return mediaInterface(); } - else if constexpr (__id == 4) { return managementInterface(); } + if constexpr (__id == 1) { return ipAddress(); } + else if constexpr (__id == 2) { return mac(); } + else if constexpr (__id == 3) { return interfaceId(); } } template @@ -8064,23 +8480,44 @@ std::pair +class ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::set<::facebook::fboss::cfg::TransportField>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>>, + Parent> { + public: + using Self = Path< + ::std::set<::facebook::fboss::cfg::TransportField>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::TransportField, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TransportField>, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::TransportField); +}; + template -class ChildThriftPath<::facebook::fboss::TransceiverAttributes, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::TeFlow, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::TransceiverAttributes, + ::facebook::fboss::TeFlow, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::TransceiverAttributes>, + ::apache::thrift::type::struct_t<::facebook::fboss::TeFlow>, Parent> { public: using Self = Path< - ::facebook::fboss::TransceiverAttributes, + ::facebook::fboss::TeFlow, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::TransceiverAttributes>, + ::apache::thrift::type::struct_t<::facebook::fboss::TeFlow>, Parent>; - using strings = ::facebook::fboss::transceiver_validation_tags::strings; + using strings = ::facebook::fboss::ctrl_tags::strings; template using Child = Path< ChildType, @@ -8089,30 +8526,25 @@ class ChildThriftPath<::facebook::fboss::TransceiverAttributes, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortProfileID>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(mediaInterfaceCode, 1); - STRUCT_CHILD_GETTERS(supportedFirmwareVersions, 2); - STRUCT_CHILD_GETTERS(supportedPortProfiles, 3); + STRUCT_CHILD_GETTERS(srcPort, 1); + STRUCT_CHILD_GETTERS(dstPrefix, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return mediaInterfaceCode(); } - else if constexpr (__id == 2) { return supportedFirmwareVersions(); } - else if constexpr (__id == 3) { return supportedPortProfiles(); } + if constexpr (__id == 1) { return srcPort(); } + else if constexpr (__id == 2) { return dstPrefix(); } } template @@ -8123,19 +8555,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MatchToAction, + ::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MatchToAction, + ::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -8146,25 +8578,30 @@ class ChildThriftPath<::facebook::fboss::cfg::MatchToAction, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(matcher, 1); - STRUCT_CHILD_GETTERS(action, 2); + STRUCT_CHILD_GETTERS(sharedBytes, 1); + STRUCT_CHILD_GETTERS(headroomBytes, 2); + STRUCT_CHILD_GETTERS(reservedBytes, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return matcher(); } - else if constexpr (__id == 2) { return action(); } + if constexpr (__id == 1) { return sharedBytes(); } + else if constexpr (__id == 2) { return headroomBytes(); } + else if constexpr (__id == 3) { return reservedBytes(); } } template @@ -8174,85 +8611,85 @@ std::pair }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::FirmwareVersion>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, + ::std::vector<::facebook::fboss::cfg::FirmwareVersion>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareVersion>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, + ::std::vector<::facebook::fboss::cfg::FirmwareVersion>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareVersion>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::FirmwareVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::string); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, + ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, + ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>, Parent>; - using Child = Path<::facebook::fboss::fsdb::FsdbSubscriptionState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::string); }; template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, + ::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, + ::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::facebook::fboss::cfg::MPLSField, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int16_t); + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::MPLSField); }; template -class ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::TrafficClassToQosAttributeEntry, + ::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPfc>, Parent> { public: using Self = Path< - ::facebook::fboss::state::TrafficClassToQosAttributeEntry, + ::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPfc>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -8261,25 +8698,35 @@ class ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeEntry, ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, Child>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(trafficClass, 1); - STRUCT_CHILD_GETTERS(attr, 2); + STRUCT_CHILD_GETTERS(tx, 1); + STRUCT_CHILD_GETTERS(rx, 2); + STRUCT_CHILD_GETTERS(portPgConfigName, 3); + STRUCT_CHILD_GETTERS(watchdog, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return trafficClass(); } - else if constexpr (__id == 2) { return attr(); } + if constexpr (__id == 1) { return tx(); } + else if constexpr (__id == 2) { return rx(); } + else if constexpr (__id == 3) { return portPgConfigName(); } + else if constexpr (__id == 4) { return watchdog(); } } template @@ -8289,21 +8736,21 @@ std::pair>> }; template -class ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::HostLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, + ::std::vector<::facebook::fboss::HostLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::HostLaneSettings>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, + ::std::vector<::facebook::fboss::HostLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::HostLaneSettings>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::HostLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -8311,19 +8758,19 @@ class ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosA template -class ChildThriftPath<::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::PmdState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::LaneState, + ::facebook::fboss::phy::PmdState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PmdState>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::LaneState, + ::facebook::fboss::phy::PmdState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PmdState>, Parent>; using strings = ::facebook::fboss::phy::phy_tags::strings; template @@ -8334,50 +8781,20 @@ class ChildThriftPath<::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(lane, 1); - STRUCT_CHILD_GETTERS(signalDetectLive, 2); - STRUCT_CHILD_GETTERS(signalDetectChanged, 3); - STRUCT_CHILD_GETTERS(cdrLockLive, 4); - STRUCT_CHILD_GETTERS(cdrLockChanged, 5); - STRUCT_CHILD_GETTERS(txSettings, 6); - STRUCT_CHILD_GETTERS(rxFrequencyPPM, 7); + STRUCT_CHILD_GETTERS(lanes, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return lane(); } - else if constexpr (__id == 2) { return signalDetectLive(); } - else if constexpr (__id == 3) { return signalDetectChanged(); } - else if constexpr (__id == 4) { return cdrLockLive(); } - else if constexpr (__id == 5) { return cdrLockChanged(); } - else if constexpr (__id == 6) { return txSettings(); } - else if constexpr (__id == 7) { return rxFrequencyPPM(); } + if constexpr (__id == 1) { return lanes(); } } template @@ -8388,21 +8805,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::asic::AsicConfig, + ::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::asic::AsicConfig>, + ::apache::thrift::type::struct_t<::facebook::network::thrift::BinaryAddress>, Parent> { public: using Self = Path< - ::facebook::fboss::asic::AsicConfig, + ::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::asic::AsicConfig>, + ::apache::thrift::type::struct_t<::facebook::network::thrift::BinaryAddress>, Parent>; - using strings = ::facebook::fboss::asic::asic_config_tags::strings; + using strings = ::facebook::network::thrift::Address_tags::strings; template using Child = Path< ChildType, @@ -8411,20 +8828,30 @@ class ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::folly::fbstring, ::apache::thrift::type_class::binary, ::apache::thrift::type::cpp_type<::folly::fbstring, ::apache::thrift::type::binary_t>>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(config, 1); + STRUCT_CHILD_GETTERS(addr, 1); + STRUCT_CHILD_GETTERS(port, 2); + STRUCT_CHILD_GETTERS(ifName, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return config(); } + if constexpr (__id == 1) { return addr(); } + else if constexpr (__id == 2) { return port(); } + else if constexpr (__id == 3) { return ifName(); } } template @@ -8434,85 +8861,132 @@ class ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fs }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::AclTableQualifier>, + ::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::AclTableQualifier>, + ::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>>, Parent>; - using Child = Path<::facebook::fboss::cfg::AclTableQualifier, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; + template -class ChildThriftPath<::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::Subport>, + ::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::Subport>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UserDefinedTrapAction>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::Subport>, + ::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::Subport>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UserDefinedTrapAction>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::Subport, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(queueId, 1); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return queueId(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>>, Parent>; - using Child = ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortQueueConfigName); + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + +template +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int16_t); }; template -class ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::PortFlowletFields, + ::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>, Parent> { public: using Self = Path< - ::facebook::fboss::state::PortFlowletFields, + ::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -8521,35 +8995,30 @@ class ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::AclStage, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(scalingFactor, 2); - STRUCT_CHILD_GETTERS(loadWeight, 3); - STRUCT_CHILD_GETTERS(queueWeight, 4); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(aclTables, 2); + STRUCT_CHILD_GETTERS(stage, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return scalingFactor(); } - else if constexpr (__id == 3) { return loadWeight(); } - else if constexpr (__id == 4) { return queueWeight(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return aclTables(); } + else if constexpr (__id == 3) { return stage(); } } template @@ -8560,19 +9029,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::BlockedMacAddress, + ::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::BlockedMacAddress, + ::facebook::fboss::state::TransceiverSpecFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -8583,25 +9052,35 @@ class ChildThriftPath<::facebook::fboss::state::BlockedMacAddress, ::facebook::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>, +std::pair>>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + std::pair, Child>, + std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>, + std::pair, Child<::facebook::fboss::TransceiverManagementInterface, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::TransceiverManagementInterface>>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(macAddrToBlockVlanID, 1); - STRUCT_CHILD_GETTERS(macAddrToBlockAddr, 2); + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(cableLength, 2); + STRUCT_CHILD_GETTERS(mediaInterface, 3); + STRUCT_CHILD_GETTERS(managementInterface, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return macAddrToBlockVlanID(); } - else if constexpr (__id == 2) { return macAddrToBlockAddr(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return cableLength(); } + else if constexpr (__id == 3) { return mediaInterface(); } + else if constexpr (__id == 4) { return managementInterface(); } } template @@ -8610,90 +9089,6 @@ std::pair -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::state::RouteFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::RouteFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::string); -}; - -template -class ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::i32_t>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::i32_t>>, - Parent>; - using Child = ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::AggregatePortMember>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::AggregatePortMember>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - -template -class ChildThriftPath<::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::ClientID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::ClientID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::ClientID); -}; - template class ChildThriftPath<::facebook::fboss::cfg::AclUdfEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -8753,21 +9148,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PacketRxReasonToQueue, + ::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PacketRxReasonToQueue, + ::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -8776,25 +9171,128 @@ class ChildThriftPath<::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::PacketRxReason, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>>>, + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(rxReason, 1); - STRUCT_CHILD_GETTERS(queueId, 2); + STRUCT_CHILD_GETTERS(trafficClass, 1); + STRUCT_CHILD_GETTERS(attr, 2); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return trafficClass(); } + else if constexpr (__id == 2) { return attr(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::BufferPoolConfigName); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::LoadBalancerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::LoadBalancerFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::state::LoadBalancerFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>, + Parent>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>, +std::pair>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::LoadBalancerID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>>>, + std::pair, Child<::facebook::fboss::cfg::HashingAlgorithm, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::HashingAlgorithm>>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(algorithm, 2); + STRUCT_CHILD_GETTERS(seed, 3); + STRUCT_CHILD_GETTERS(v4Fields, 4); + STRUCT_CHILD_GETTERS(v6Fields, 5); + STRUCT_CHILD_GETTERS(transportFields, 6); + STRUCT_CHILD_GETTERS(mplsFields, 7); + STRUCT_CHILD_GETTERS(udfGroups, 8); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return rxReason(); } - else if constexpr (__id == 2) { return queueId(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return algorithm(); } + else if constexpr (__id == 3) { return seed(); } + else if constexpr (__id == 4) { return v4Fields(); } + else if constexpr (__id == 5) { return v6Fields(); } + else if constexpr (__id == 6) { return transportFields(); } + else if constexpr (__id == 7) { return mplsFields(); } + else if constexpr (__id == 8) { return udfGroups(); } } template @@ -8803,135 +9301,65 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::MirrorFields, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>>, Parent> { public: using Self = Path< - ::facebook::fboss::state::MirrorFields, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::facebook::fboss::state::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(dscp, 3); - STRUCT_CHILD_GETTERS(truncate, 4); - STRUCT_CHILD_GETTERS(configHasEgressPort, 5); - STRUCT_CHILD_GETTERS(egressPort, 6); - STRUCT_CHILD_GETTERS(destinationIp, 7); - STRUCT_CHILD_GETTERS(srcIp, 8); - STRUCT_CHILD_GETTERS(udpSrcPort, 9); - STRUCT_CHILD_GETTERS(udpDstPort, 10); - STRUCT_CHILD_GETTERS(tunnel, 11); - STRUCT_CHILD_GETTERS(isResolved, 12); - STRUCT_CHILD_GETTERS(switchId, 13); - STRUCT_CHILD_GETTERS(egressPortDesc, 14); - STRUCT_CHILD_GETTERS(samplingRate, 15); - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 3) { return dscp(); } - else if constexpr (__id == 4) { return truncate(); } - else if constexpr (__id == 5) { return configHasEgressPort(); } - else if constexpr (__id == 6) { return egressPort(); } - else if constexpr (__id == 7) { return destinationIp(); } - else if constexpr (__id == 8) { return srcIp(); } - else if constexpr (__id == 9) { return udpSrcPort(); } - else if constexpr (__id == 10) { return udpDstPort(); } - else if constexpr (__id == 11) { return tunnel(); } - else if constexpr (__id == 12) { return isResolved(); } - else if constexpr (__id == 13) { return switchId(); } - else if constexpr (__id == 14) { return egressPortDesc(); } - else if constexpr (__id == 15) { return samplingRate(); } - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } +template +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int16_t); }; template -class ChildThriftPath<::facebook::fboss::state::SwitchState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::SwitchState, + ::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchState>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PfcWatchdog>, Parent> { public: using Self = Path< - ::facebook::fboss::state::SwitchState, + ::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchState>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PfcWatchdog>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -8940,130 +9368,30 @@ class ChildThriftPath<::facebook::fboss::state::SwitchState, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::QosPolicyFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::PfcWatchdogRecoveryAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PfcWatchdogRecoveryAction>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(portMaps, 100); - STRUCT_CHILD_GETTERS(vlanMaps, 101); - STRUCT_CHILD_GETTERS(aclMaps, 102); - STRUCT_CHILD_GETTERS(transceiverMaps, 103); - STRUCT_CHILD_GETTERS(bufferPoolCfgMaps, 104); - STRUCT_CHILD_GETTERS(mirrorMaps, 105); - STRUCT_CHILD_GETTERS(controlPlaneMap, 106); - STRUCT_CHILD_GETTERS(switchSettingsMap, 107); - STRUCT_CHILD_GETTERS(systemPortMaps, 108); - STRUCT_CHILD_GETTERS(fibsMap, 109); - STRUCT_CHILD_GETTERS(labelFibMap, 110); - STRUCT_CHILD_GETTERS(qosPolicyMaps, 111); - STRUCT_CHILD_GETTERS(sflowCollectorMaps, 112); - STRUCT_CHILD_GETTERS(ipTunnelMaps, 113); - STRUCT_CHILD_GETTERS(teFlowTables, 114); - STRUCT_CHILD_GETTERS(aggregatePortMaps, 115); - STRUCT_CHILD_GETTERS(loadBalancerMaps, 116); - STRUCT_CHILD_GETTERS(aclTableGroupMaps, 117); - STRUCT_CHILD_GETTERS(interfaceMaps, 118); - STRUCT_CHILD_GETTERS(dsfNodesMap, 119); - STRUCT_CHILD_GETTERS(portFlowletCfgMaps, 120); - STRUCT_CHILD_GETTERS(remoteSystemPortMaps, 600); - STRUCT_CHILD_GETTERS(remoteInterfaceMaps, 601); + STRUCT_CHILD_GETTERS(detectionTimeMsecs, 1); + STRUCT_CHILD_GETTERS(recoveryTimeMsecs, 2); + STRUCT_CHILD_GETTERS(recoveryAction, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 100) { return portMaps(); } - else if constexpr (__id == 101) { return vlanMaps(); } - else if constexpr (__id == 102) { return aclMaps(); } - else if constexpr (__id == 103) { return transceiverMaps(); } - else if constexpr (__id == 104) { return bufferPoolCfgMaps(); } - else if constexpr (__id == 105) { return mirrorMaps(); } - else if constexpr (__id == 106) { return controlPlaneMap(); } - else if constexpr (__id == 107) { return switchSettingsMap(); } - else if constexpr (__id == 108) { return systemPortMaps(); } - else if constexpr (__id == 109) { return fibsMap(); } - else if constexpr (__id == 110) { return labelFibMap(); } - else if constexpr (__id == 111) { return qosPolicyMaps(); } - else if constexpr (__id == 112) { return sflowCollectorMaps(); } - else if constexpr (__id == 113) { return ipTunnelMaps(); } - else if constexpr (__id == 114) { return teFlowTables(); } - else if constexpr (__id == 115) { return aggregatePortMaps(); } - else if constexpr (__id == 116) { return loadBalancerMaps(); } - else if constexpr (__id == 117) { return aclTableGroupMaps(); } - else if constexpr (__id == 118) { return interfaceMaps(); } - else if constexpr (__id == 119) { return dsfNodesMap(); } - else if constexpr (__id == 120) { return portFlowletCfgMaps(); } - else if constexpr (__id == 600) { return remoteSystemPortMaps(); } - else if constexpr (__id == 601) { return remoteInterfaceMaps(); } + if constexpr (__id == 1) { return detectionTimeMsecs(); } + else if constexpr (__id == 2) { return recoveryTimeMsecs(); } + else if constexpr (__id == 3) { return recoveryAction(); } } template @@ -9073,42 +9401,42 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, + ::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, + ::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>>, Parent>; - using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PlatformAttributes); + CONTAINER_CHILD_GETTERS(::std::int64_t); }; template -class ChildThriftPath<::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::set<::std::int32_t>, + ::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>, - ::apache::thrift::type::set<::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>>, Parent> { public: using Self = Path< - ::std::set<::std::int32_t>, + ::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>, - ::apache::thrift::type::set<::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>>, Parent>; - using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; + using Child = Path<::facebook::fboss::cfg::AclTableQualifier, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclTableQualifier>, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -9116,21 +9444,21 @@ class ChildThriftPath<::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbO template -class ChildThriftPath<::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::switch_reachability::SwitchReachability, + ::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>, Parent> { public: using Self = Path< - ::facebook::fboss::switch_reachability::SwitchReachability, + ::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>, Parent>; - using strings = ::facebook::fboss::switch_reachability::switch_reachability_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -9139,25 +9467,50 @@ class ChildThriftPath<::facebook::fboss::switch_reachability::SwitchReachability ChildTag, Self >; - using Children = fatal::tuple>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int64_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, ChildThriftPath<::facebook::fboss::phy::TxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(fabricPortGroupMap, 1); - STRUCT_CHILD_GETTERS(switchIdToFabricPortGroupMap, 2); + STRUCT_CHILD_GETTERS(lane, 1); + STRUCT_CHILD_GETTERS(signalDetectLive, 2); + STRUCT_CHILD_GETTERS(signalDetectChanged, 3); + STRUCT_CHILD_GETTERS(cdrLockLive, 4); + STRUCT_CHILD_GETTERS(cdrLockChanged, 5); + STRUCT_CHILD_GETTERS(txSettings, 6); + STRUCT_CHILD_GETTERS(rxFrequencyPPM, 7); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return fabricPortGroupMap(); } - else if constexpr (__id == 2) { return switchIdToFabricPortGroupMap(); } + if constexpr (__id == 1) { return lane(); } + else if constexpr (__id == 2) { return signalDetectLive(); } + else if constexpr (__id == 3) { return signalDetectChanged(); } + else if constexpr (__id == 4) { return cdrLockLive(); } + else if constexpr (__id == 5) { return cdrLockChanged(); } + else if constexpr (__id == 6) { return txSettings(); } + else if constexpr (__id == 7) { return rxFrequencyPPM(); } } template @@ -9168,21 +9521,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::MediaLaneSignals, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::MediaLaneSignals, + ::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSignals>, + ::apache::thrift::type::struct_t<::facebook::fboss::asic::AsicConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::MediaLaneSignals, + ::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSignals>, + ::apache::thrift::type::struct_t<::facebook::fboss::asic::AsicConfig>, Parent>; - using strings = ::facebook::fboss::transceiver_tags::strings; + using strings = ::facebook::fboss::asic::asic_config_tags::strings; template using Child = Path< ChildType, @@ -9191,50 +9544,20 @@ class ChildThriftPath<::facebook::fboss::MediaLaneSignals, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(lane, 1); - STRUCT_CHILD_GETTERS(txLos, 2); - STRUCT_CHILD_GETTERS(rxLos, 3); - STRUCT_CHILD_GETTERS(txLol, 4); - STRUCT_CHILD_GETTERS(rxLol, 5); - STRUCT_CHILD_GETTERS(txFault, 6); - STRUCT_CHILD_GETTERS(txAdaptEqFault, 7); + STRUCT_CHILD_GETTERS(config, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return lane(); } - else if constexpr (__id == 2) { return txLos(); } - else if constexpr (__id == 3) { return rxLos(); } - else if constexpr (__id == 4) { return txLol(); } - else if constexpr (__id == 5) { return rxLol(); } - else if constexpr (__id == 6) { return txFault(); } - else if constexpr (__id == 7) { return txAdaptEqFault(); } + if constexpr (__id == 1) { return config(); } } template @@ -9244,43 +9567,126 @@ std::pair -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, + ::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclEntryFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::Subport>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, + ::std::vector<::facebook::fboss::state::Subport>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclEntryFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::Subport>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::AclEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::Subport, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::cfg::PortQueueConfigName, ::std::vector<::facebook::fboss::cfg::PortQueue>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>>, + Parent>; + using Child = ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortQueueConfigName); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::PortFlowletFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::state::PortFlowletFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>, + Parent>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(scalingFactor, 2); + STRUCT_CHILD_GETTERS(loadWeight, 3); + STRUCT_CHILD_GETTERS(queueWeight, 4); - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return scalingFactor(); } + else if constexpr (__id == 3) { return loadWeight(); } + else if constexpr (__id == 4) { return queueWeight(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MirrorOnDropReport, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PinID, + ::facebook::fboss::cfg::MirrorOnDropReport, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinID>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorOnDropReport>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PinID, + ::facebook::fboss::cfg::MirrorOnDropReport, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinID>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorOnDropReport>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -9289,25 +9695,60 @@ class ChildThriftPath<::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::Fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(chip, 1); - STRUCT_CHILD_GETTERS(lane, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(mirrorPortId, 2); + STRUCT_CHILD_GETTERS(localSrcPort, 3); + STRUCT_CHILD_GETTERS(collectorIp, 4); + STRUCT_CHILD_GETTERS(collectorPort, 5); + STRUCT_CHILD_GETTERS(mtu, 6); + STRUCT_CHILD_GETTERS(truncateSize, 7); + STRUCT_CHILD_GETTERS(dscp, 8); + STRUCT_CHILD_GETTERS(agingIntervalUsecs, 9); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return chip(); } - else if constexpr (__id == 2) { return lane(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return mirrorPortId(); } + else if constexpr (__id == 3) { return localSrcPort(); } + else if constexpr (__id == 4) { return collectorIp(); } + else if constexpr (__id == 5) { return collectorPort(); } + else if constexpr (__id == 6) { return mtu(); } + else if constexpr (__id == 7) { return truncateSize(); } + else if constexpr (__id == 8) { return dscp(); } + else if constexpr (__id == 9) { return agingIntervalUsecs(); } } template @@ -9317,64 +9758,43 @@ std::pair>> }; template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::BurstMonitorWeight>, ::apache::thrift::type::i16_t>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::BurstMonitorWeight>, ::apache::thrift::type::i16_t>, - Parent>; - using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::BurstMonitorWeight); -}; - -template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, + ::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, + ::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeEntry>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int16_t); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::DataPlanePhyChip, + ::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::DataPlanePhyChip>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::DataPlanePhyChip, + ::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::DataPlanePhyChip>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -9383,30 +9803,25 @@ class ChildThriftPath<::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::phy::DataPlanePhyChipType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::phy::DataPlanePhyChipType>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(type, 2); - STRUCT_CHILD_GETTERS(physicalID, 3); + STRUCT_CHILD_GETTERS(macAddrToBlockVlanID, 1); + STRUCT_CHILD_GETTERS(macAddrToBlockAddr, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return type(); } - else if constexpr (__id == 3) { return physicalID(); } + if constexpr (__id == 1) { return macAddrToBlockVlanID(); } + else if constexpr (__id == 2) { return macAddrToBlockAddr(); } } template @@ -9415,21 +9830,42 @@ std::pair +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::state::RouteFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::RouteFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::string); +}; + template -class ChildThriftPath<::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::IpTunnelFields, + ::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::IpTunnelFields, + ::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -9440,75 +9876,35 @@ class ChildThriftPath<::facebook::fboss::state::IpTunnelFields, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ipTunnelId, 1); - STRUCT_CHILD_GETTERS(underlayIntfId, 2); - STRUCT_CHILD_GETTERS(mode, 3); - STRUCT_CHILD_GETTERS(dstIp, 4); - STRUCT_CHILD_GETTERS(type, 5); - STRUCT_CHILD_GETTERS(tunnelTermType, 6); - STRUCT_CHILD_GETTERS(ttlMode, 7); - STRUCT_CHILD_GETTERS(dscpMode, 8); - STRUCT_CHILD_GETTERS(ecnMode, 9); - STRUCT_CHILD_GETTERS(srcIp, 10); - STRUCT_CHILD_GETTERS(dstIpMask, 11); - STRUCT_CHILD_GETTERS(srcIpMask, 12); + STRUCT_CHILD_GETTERS(queues, 1); + STRUCT_CHILD_GETTERS(rxReasonToQueue, 2); + STRUCT_CHILD_GETTERS(defaultQosPolicy, 3); + STRUCT_CHILD_GETTERS(voqs, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ipTunnelId(); } - else if constexpr (__id == 2) { return underlayIntfId(); } - else if constexpr (__id == 3) { return mode(); } - else if constexpr (__id == 4) { return dstIp(); } - else if constexpr (__id == 5) { return type(); } - else if constexpr (__id == 6) { return tunnelTermType(); } - else if constexpr (__id == 7) { return ttlMode(); } - else if constexpr (__id == 8) { return dscpMode(); } - else if constexpr (__id == 9) { return ecnMode(); } - else if constexpr (__id == 10) { return srcIp(); } - else if constexpr (__id == 11) { return dstIpMask(); } - else if constexpr (__id == 12) { return srcIpMask(); } + if constexpr (__id == 1) { return queues(); } + else if constexpr (__id == 2) { return rxReasonToQueue(); } + else if constexpr (__id == 3) { return defaultQosPolicy(); } + else if constexpr (__id == 4) { return voqs(); } } template @@ -9517,23 +9913,44 @@ std::pair +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MatchToAction>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::MatchToAction>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::MatchToAction>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + template -class ChildThriftPath<::facebook::fboss::MediaInterfaceId, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::MediaInterfaceId, + ::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaInterfaceId>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>, Parent> { public: using Self = Path< - ::facebook::fboss::MediaInterfaceId, + ::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaInterfaceId>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>, Parent>; - using strings = ::facebook::fboss::transceiver_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -9542,30 +9959,35 @@ class ChildThriftPath<::facebook::fboss::MediaInterfaceId, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::MediaInterfaceUnion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>>; + using Children = fatal::tuple>>, +std::pair>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::LoadBalancerID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Fields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::HashingAlgorithm, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::HashingAlgorithm>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(lane, 1); - STRUCT_CHILD_GETTERS(media, 2); - STRUCT_CHILD_GETTERS(code, 3); + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(fieldSelection, 2); + STRUCT_CHILD_GETTERS(algorithm, 3); + STRUCT_CHILD_GETTERS(seed, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return lane(); } - else if constexpr (__id == 2) { return media(); } - else if constexpr (__id == 3) { return code(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return fieldSelection(); } + else if constexpr (__id == 3) { return algorithm(); } + else if constexpr (__id == 4) { return seed(); } } template @@ -9575,43 +9997,43 @@ std::pair>> }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::MediaLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, + ::std::vector<::facebook::fboss::MediaLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, + ::std::vector<::facebook::fboss::MediaLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::TeFlow, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::TeFlow, + ::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::TeFlow>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RoutePrefix>, Parent> { public: using Self = Path< - ::facebook::fboss::TeFlow, + ::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::TeFlow>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RoutePrefix>, Parent>; - using strings = ::facebook::fboss::ctrl_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -9620,25 +10042,30 @@ class ChildThriftPath<::facebook::fboss::TeFlow, ::facebook::fboss::fsdb::FsdbOp ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(srcPort, 1); - STRUCT_CHILD_GETTERS(dstPrefix, 2); + STRUCT_CHILD_GETTERS(v6, 1); + STRUCT_CHILD_GETTERS(prefix, 2); + STRUCT_CHILD_GETTERS(mask, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return srcPort(); } - else if constexpr (__id == 2) { return dstPrefix(); } + if constexpr (__id == 1) { return v6(); } + else if constexpr (__id == 2) { return prefix(); } + else if constexpr (__id == 3) { return mask(); } } template @@ -9649,19 +10076,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::BufferPoolConfig, + ::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SdkVersion>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::BufferPoolConfig, + ::facebook::fboss::cfg::SdkVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SdkVersion>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -9672,30 +10099,30 @@ class ChildThriftPath<::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(sharedBytes, 1); - STRUCT_CHILD_GETTERS(headroomBytes, 2); - STRUCT_CHILD_GETTERS(reservedBytes, 3); + STRUCT_CHILD_GETTERS(asicSdk, 1); + STRUCT_CHILD_GETTERS(saiSdk, 2); + STRUCT_CHILD_GETTERS(firmware, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return sharedBytes(); } - else if constexpr (__id == 2) { return headroomBytes(); } - else if constexpr (__id == 3) { return reservedBytes(); } + if constexpr (__id == 1) { return asicSdk(); } + else if constexpr (__id == 2) { return saiSdk(); } + else if constexpr (__id == 3) { return firmware(); } } template @@ -9704,44 +10131,23 @@ std::pair -class ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::std::string>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::std::string>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>, - Parent>; - using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::string); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortFlowletConfig, + ::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortFlowletConfig, + ::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::switch_reachability::switch_reachability_tags::strings; template using Child = Path< ChildType, @@ -9750,30 +10156,25 @@ class ChildThriftPath<::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fbo ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int64_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(scalingFactor, 1); - STRUCT_CHILD_GETTERS(loadWeight, 2); - STRUCT_CHILD_GETTERS(queueWeight, 3); + STRUCT_CHILD_GETTERS(fabricPortGroupMap, 1); + STRUCT_CHILD_GETTERS(switchIdToFabricPortGroupMap, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return scalingFactor(); } - else if constexpr (__id == 2) { return loadWeight(); } - else if constexpr (__id == 3) { return queueWeight(); } + if constexpr (__id == 1) { return fabricPortGroupMap(); } + else if constexpr (__id == 2) { return switchIdToFabricPortGroupMap(); } } template @@ -9782,65 +10183,23 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; - -template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::MediaLaneSignals, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::VlanPort, + ::facebook::fboss::MediaLaneSignals, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSignals>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::VlanPort, + ::facebook::fboss::MediaLaneSignals, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSignals>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::transceiver_tags::strings; template using Child = Path< ChildType, @@ -9849,35 +10208,50 @@ class ChildThriftPath<::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::SpanningTreeState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SpanningTreeState>>>, - std::pair, Child>>; + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(vlanID, 1); - STRUCT_CHILD_GETTERS(logicalPort, 2); - STRUCT_CHILD_GETTERS(spanningTreeState, 3); - STRUCT_CHILD_GETTERS(emitTags, 4); + STRUCT_CHILD_GETTERS(lane, 1); + STRUCT_CHILD_GETTERS(txLos, 2); + STRUCT_CHILD_GETTERS(rxLos, 3); + STRUCT_CHILD_GETTERS(txLol, 4); + STRUCT_CHILD_GETTERS(rxLol, 5); + STRUCT_CHILD_GETTERS(txFault, 6); + STRUCT_CHILD_GETTERS(txAdaptEqFault, 7); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vlanID(); } - else if constexpr (__id == 2) { return logicalPort(); } - else if constexpr (__id == 3) { return spanningTreeState(); } - else if constexpr (__id == 4) { return emitTags(); } + if constexpr (__id == 1) { return lane(); } + else if constexpr (__id == 2) { return txLos(); } + else if constexpr (__id == 3) { return rxLos(); } + else if constexpr (__id == 4) { return txLol(); } + else if constexpr (__id == 5) { return rxLol(); } + else if constexpr (__id == 6) { return txFault(); } + else if constexpr (__id == 7) { return txAdaptEqFault(); } } template @@ -9887,111 +10261,64 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::VlanPort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::VlanPort>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::VlanPort>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::HostLaneSettings>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::HostLaneSettings>, + ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::HostLaneSettings>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclEntryFields>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::HostLaneSettings>, + ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::HostLaneSettings>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclEntryFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::HostLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::AclEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::std::string); }; - template -class ChildThriftPath<::facebook::fboss::phy::PmdState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PmdState, + ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PmdState>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PmdState, + ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PmdState>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(lanes, 1); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return lanes(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::network::thrift::BinaryAddress, + ::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::network::thrift::BinaryAddress>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>, Parent> { public: using Self = Path< - ::facebook::network::thrift::BinaryAddress, + ::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::network::thrift::BinaryAddress>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>, Parent>; - using strings = ::facebook::network::thrift::Address_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -10000,30 +10327,40 @@ class ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fb ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::folly::fbstring, ::apache::thrift::type_class::binary, ::apache::thrift::type::cpp_type<::folly::fbstring, ::apache::thrift::type::binary_t>>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::LacpPortRate, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LacpPortRate>>>, + std::pair, Child<::facebook::fboss::cfg::LacpPortActivity, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LacpPortActivity>>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(addr, 1); - STRUCT_CHILD_GETTERS(port, 2); - STRUCT_CHILD_GETTERS(ifName, 3); + STRUCT_CHILD_GETTERS(memberPortID, 1); + STRUCT_CHILD_GETTERS(priority, 2); + STRUCT_CHILD_GETTERS(rate, 3); + STRUCT_CHILD_GETTERS(activity, 4); + STRUCT_CHILD_GETTERS(holdTimerMultiplier, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return addr(); } - else if constexpr (__id == 2) { return port(); } - else if constexpr (__id == 3) { return ifName(); } + if constexpr (__id == 1) { return memberPortID(); } + else if constexpr (__id == 2) { return priority(); } + else if constexpr (__id == 3) { return rate(); } + else if constexpr (__id == 4) { return activity(); } + else if constexpr (__id == 5) { return holdTimerMultiplier(); } } template @@ -10033,43 +10370,43 @@ std::pair }; template -class ChildThriftPath<::std::vector<::facebook::fboss::state::BlockedNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::phy::PhyState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::BlockedNeighbor>, + ::std::map<::std::string, ::facebook::fboss::phy::PhyState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::BlockedNeighbor>, + ::std::map<::std::string, ::facebook::fboss::phy::PhyState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::std::string); }; template -class ChildThriftPath<::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AgentConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Neighbor, + ::facebook::fboss::cfg::AgentConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AgentConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Neighbor, + ::facebook::fboss::cfg::AgentConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AgentConfig>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::cfg::agent_config_tags::strings; template using Child = Path< ChildType, @@ -10078,25 +10415,30 @@ class ChildThriftPath<::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SwitchConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(vlanID, 1); - STRUCT_CHILD_GETTERS(ipAddress, 2); + STRUCT_CHILD_GETTERS(defaultCommandLineArgs, 1); + STRUCT_CHILD_GETTERS(sw, 2); + STRUCT_CHILD_GETTERS(platform, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vlanID(); } - else if constexpr (__id == 2) { return ipAddress(); } + if constexpr (__id == 1) { return defaultCommandLineArgs(); } + else if constexpr (__id == 2) { return sw(); } + else if constexpr (__id == 3) { return platform(); } } template @@ -10106,85 +10448,85 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::RedirectNextHop>, + ::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::ClientID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::RedirectNextHop>, + ::std::map<::facebook::fboss::ClientID, ::facebook::fboss::state::RouteNextHopEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::ClientID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteNextHopEntry>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::facebook::fboss::ClientID); }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, + ::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, + ::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>, ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>>, Parent>; - using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, + ::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::i32_t>>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>, + ::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::list<::apache::thrift::type::i32_t>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int16_t); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::SwitchState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PfcWatchdog, + ::facebook::fboss::state::SwitchState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PfcWatchdog>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchState>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PfcWatchdog, + ::facebook::fboss::state::SwitchState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PfcWatchdog>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchState>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -10193,30 +10535,135 @@ class ChildThriftPath<::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::PfcWatchdogRecoveryAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PfcWatchdogRecoveryAction>>>>; + using Children = fatal::tuple>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::PortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::QosPolicyFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::LoadBalancerID, ::facebook::fboss::state::LoadBalancerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(detectionTimeMsecs, 1); - STRUCT_CHILD_GETTERS(recoveryTimeMsecs, 2); - STRUCT_CHILD_GETTERS(recoveryAction, 3); + STRUCT_CHILD_GETTERS(portMaps, 100); + STRUCT_CHILD_GETTERS(vlanMaps, 101); + STRUCT_CHILD_GETTERS(aclMaps, 102); + STRUCT_CHILD_GETTERS(transceiverMaps, 103); + STRUCT_CHILD_GETTERS(bufferPoolCfgMaps, 104); + STRUCT_CHILD_GETTERS(mirrorMaps, 105); + STRUCT_CHILD_GETTERS(controlPlaneMap, 106); + STRUCT_CHILD_GETTERS(switchSettingsMap, 107); + STRUCT_CHILD_GETTERS(systemPortMaps, 108); + STRUCT_CHILD_GETTERS(fibsMap, 109); + STRUCT_CHILD_GETTERS(labelFibMap, 110); + STRUCT_CHILD_GETTERS(qosPolicyMaps, 111); + STRUCT_CHILD_GETTERS(sflowCollectorMaps, 112); + STRUCT_CHILD_GETTERS(ipTunnelMaps, 113); + STRUCT_CHILD_GETTERS(teFlowTables, 114); + STRUCT_CHILD_GETTERS(aggregatePortMaps, 115); + STRUCT_CHILD_GETTERS(loadBalancerMaps, 116); + STRUCT_CHILD_GETTERS(aclTableGroupMaps, 117); + STRUCT_CHILD_GETTERS(interfaceMaps, 118); + STRUCT_CHILD_GETTERS(dsfNodesMap, 119); + STRUCT_CHILD_GETTERS(portFlowletCfgMaps, 120); + STRUCT_CHILD_GETTERS(mirrorOnDropReportMaps, 121); + STRUCT_CHILD_GETTERS(remoteSystemPortMaps, 600); + STRUCT_CHILD_GETTERS(remoteInterfaceMaps, 601); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return detectionTimeMsecs(); } - else if constexpr (__id == 2) { return recoveryTimeMsecs(); } - else if constexpr (__id == 3) { return recoveryAction(); } + if constexpr (__id == 100) { return portMaps(); } + else if constexpr (__id == 101) { return vlanMaps(); } + else if constexpr (__id == 102) { return aclMaps(); } + else if constexpr (__id == 103) { return transceiverMaps(); } + else if constexpr (__id == 104) { return bufferPoolCfgMaps(); } + else if constexpr (__id == 105) { return mirrorMaps(); } + else if constexpr (__id == 106) { return controlPlaneMap(); } + else if constexpr (__id == 107) { return switchSettingsMap(); } + else if constexpr (__id == 108) { return systemPortMaps(); } + else if constexpr (__id == 109) { return fibsMap(); } + else if constexpr (__id == 110) { return labelFibMap(); } + else if constexpr (__id == 111) { return qosPolicyMaps(); } + else if constexpr (__id == 112) { return sflowCollectorMaps(); } + else if constexpr (__id == 113) { return ipTunnelMaps(); } + else if constexpr (__id == 114) { return teFlowTables(); } + else if constexpr (__id == 115) { return aggregatePortMaps(); } + else if constexpr (__id == 116) { return loadBalancerMaps(); } + else if constexpr (__id == 117) { return aclTableGroupMaps(); } + else if constexpr (__id == 118) { return interfaceMaps(); } + else if constexpr (__id == 119) { return dsfNodesMap(); } + else if constexpr (__id == 120) { return portFlowletCfgMaps(); } + else if constexpr (__id == 121) { return mirrorOnDropReportMaps(); } + else if constexpr (__id == 600) { return remoteSystemPortMaps(); } + else if constexpr (__id == 601) { return remoteInterfaceMaps(); } } template @@ -10226,64 +10673,64 @@ std::pair -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, + ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>, Parent> { public: using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, + ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PlatformAttributes>, ::apache::thrift::type::string_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int64_t); + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PlatformAttributes); }; template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, + ::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>>, + ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>, + ::apache::thrift::type::set<::apache::thrift::type::i32_t>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::BufferPoolConfigName, ::facebook::fboss::cfg::BufferPoolConfig>, + ::std::set<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::BufferPoolConfig>>, + ::apache::thrift::type_class::set<::apache::thrift::type_class::integral>, + ::apache::thrift::type::set<::apache::thrift::type::i32_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::BufferPoolConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::BufferPoolConfigName); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::state::LoadBalancerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::LoadBalancerFields, + ::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>, Parent> { public: using Self = Path< - ::facebook::fboss::state::LoadBalancerFields, + ::facebook::fboss::cfg::VlanPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::LoadBalancerFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::VlanPort>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -10292,55 +10739,35 @@ class ChildThriftPath<::facebook::fboss::state::LoadBalancerFields, ::facebook:: ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::LoadBalancerID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LoadBalancerID>>>, - std::pair, Child<::facebook::fboss::cfg::HashingAlgorithm, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::HashingAlgorithm>>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv6Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::TransportField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::SpanningTreeState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SpanningTreeState>>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(algorithm, 2); - STRUCT_CHILD_GETTERS(seed, 3); - STRUCT_CHILD_GETTERS(v4Fields, 4); - STRUCT_CHILD_GETTERS(v6Fields, 5); - STRUCT_CHILD_GETTERS(transportFields, 6); - STRUCT_CHILD_GETTERS(mplsFields, 7); - STRUCT_CHILD_GETTERS(udfGroups, 8); + STRUCT_CHILD_GETTERS(vlanID, 1); + STRUCT_CHILD_GETTERS(logicalPort, 2); + STRUCT_CHILD_GETTERS(spanningTreeState, 3); + STRUCT_CHILD_GETTERS(emitTags, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return algorithm(); } - else if constexpr (__id == 3) { return seed(); } - else if constexpr (__id == 4) { return v4Fields(); } - else if constexpr (__id == 5) { return v6Fields(); } - else if constexpr (__id == 6) { return transportFields(); } - else if constexpr (__id == 7) { return mplsFields(); } - else if constexpr (__id == 8) { return udfGroups(); } + if constexpr (__id == 1) { return vlanID(); } + else if constexpr (__id == 2) { return logicalPort(); } + else if constexpr (__id == 3) { return spanningTreeState(); } + else if constexpr (__id == 4) { return emitTags(); } } template @@ -10349,6 +10776,27 @@ std::pair +class ChildThriftPath<::std::vector<::facebook::fboss::state::BlockedNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::state::BlockedNeighbor>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::state::BlockedNeighbor>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + template class ChildThriftPath<::facebook::fboss::fsdb::AgentData, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -10433,220 +10881,45 @@ class ChildThriftPath<::std::map<::std::int64_t, ::std::int32_t>, ::facebook::fb }; template -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::SystemPortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int64_t); -}; - - -template -class ChildThriftPath<::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::facebook::fboss::cfg::NdpConfig, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::NdpConfig>, - Parent> { - public: - using Self = Path< - ::facebook::fboss::cfg::NdpConfig, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::NdpConfig>, - Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(routerAdvertisementSeconds, 1); - STRUCT_CHILD_GETTERS(curHopLimit, 2); - STRUCT_CHILD_GETTERS(routerLifetime, 3); - STRUCT_CHILD_GETTERS(prefixValidLifetimeSeconds, 4); - STRUCT_CHILD_GETTERS(prefixPreferredLifetimeSeconds, 5); - STRUCT_CHILD_GETTERS(routerAdvertisementManagedBit, 6); - STRUCT_CHILD_GETTERS(routerAdvertisementOtherBit, 7); - STRUCT_CHILD_GETTERS(routerAddress, 8); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return routerAdvertisementSeconds(); } - else if constexpr (__id == 2) { return curHopLimit(); } - else if constexpr (__id == 3) { return routerLifetime(); } - else if constexpr (__id == 4) { return prefixValidLifetimeSeconds(); } - else if constexpr (__id == 5) { return prefixPreferredLifetimeSeconds(); } - else if constexpr (__id == 6) { return routerAdvertisementManagedBit(); } - else if constexpr (__id == 7) { return routerAdvertisementOtherBit(); } - else if constexpr (__id == 8) { return routerAddress(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - - -template -class ChildThriftPath<::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QosPolicy, + ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QosPolicy, + ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(rules, 2); - STRUCT_CHILD_GETTERS(qosMap, 3); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return rules(); } - else if constexpr (__id == 3) { return qosMap(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::string); }; - template -class ChildThriftPath<::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::CPUTrafficPolicyConfig, + ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CPUTrafficPolicyConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::CPUTrafficPolicyConfig, + ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CPUTrafficPolicyConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::state::SystemPortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(trafficPolicy, 1); - STRUCT_CHILD_GETTERS(rxReasonToCPUQueue, 2); - STRUCT_CHILD_GETTERS(rxReasonToQueueOrderedList, 3); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return trafficPolicy(); } - else if constexpr (__id == 2) { return rxReasonToCPUQueue(); } - else if constexpr (__id == 3) { return rxReasonToQueueOrderedList(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + + CONTAINER_CHILD_GETTERS(::std::int64_t); }; @@ -10771,6 +11044,27 @@ std::pair +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorOnDropReportFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorOnDropReportFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + template class ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< @@ -10813,310 +11107,105 @@ class ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fb CONTAINER_CHILD_GETTERS(::std::int16_t); }; - -template -class ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::facebook::fboss::state::TrafficClassToQosAttributeMap, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeMap>, - Parent> { - public: - using Self = Path< - ::facebook::fboss::state::TrafficClassToQosAttributeMap, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeMap>, - Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(from, 1); - STRUCT_CHILD_GETTERS(to, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return from(); } - else if constexpr (__id == 2) { return to(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - - -template -class ChildThriftPath<::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::facebook::fboss::state::BlockedNeighbor, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>, - Parent> { - public: - using Self = Path< - ::facebook::fboss::state::BlockedNeighbor, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>, - Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(blockNeighborVlanID, 1); - STRUCT_CHILD_GETTERS(blockNeighborIP, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return blockNeighborVlanID(); } - else if constexpr (__id == 2) { return blockNeighborIP(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::QosRule>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::QosRule>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - - template -class ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortDescriptor, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortDescriptor>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortDescriptor, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortDescriptor>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::facebook::fboss::cfg::PortDescriptorType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDescriptorType>>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(portId, 1); - STRUCT_CHILD_GETTERS(portType, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return portId(); } - else if constexpr (__id == 2) { return portType(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; - template -class ChildThriftPath<::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::DsfNode, + ::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::DsfNode, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>, - Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::facebook::fboss::cfg::DsfNodeType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::DsfNodeType>>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::AsicType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AsicType>>>, - std::pair, Child<::facebook::fboss::PlatformType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PlatformType>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + ::std::map<::std::string, ::facebook::fboss::fsdb::FsdbSubscriptionState>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>>, + Parent>; + using Child = Path<::facebook::fboss::fsdb::FsdbSubscriptionState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::fsdb::FsdbSubscriptionState>, Self>; + using Self::Self; - template - using TypeFor = typename Children::template type_of; + CONTAINER_CHILD_GETTERS(::std::string); +}; + +template +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::MirrorFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(switchId, 2); - STRUCT_CHILD_GETTERS(type, 3); - STRUCT_CHILD_GETTERS(loopbackIps, 4); - STRUCT_CHILD_GETTERS(systemPortRange, 5); - STRUCT_CHILD_GETTERS(nodeMac, 6); - STRUCT_CHILD_GETTERS(asicType, 7); - STRUCT_CHILD_GETTERS(platformType, 8); - STRUCT_CHILD_GETTERS(clusterId, 9); - STRUCT_CHILD_GETTERS(fabricLevel, 10); - STRUCT_CHILD_GETTERS(localSystemPortOffset, 11); - STRUCT_CHILD_GETTERS(globalSystemPortOffset, 12); - STRUCT_CHILD_GETTERS(systemPortRanges, 13); - STRUCT_CHILD_GETTERS(inbandPortId, 14); - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return switchId(); } - else if constexpr (__id == 3) { return type(); } - else if constexpr (__id == 4) { return loopbackIps(); } - else if constexpr (__id == 5) { return systemPortRange(); } - else if constexpr (__id == 6) { return nodeMac(); } - else if constexpr (__id == 7) { return asicType(); } - else if constexpr (__id == 8) { return platformType(); } - else if constexpr (__id == 9) { return clusterId(); } - else if constexpr (__id == 10) { return fabricLevel(); } - else if constexpr (__id == 11) { return localSystemPortOffset(); } - else if constexpr (__id == 12) { return globalSystemPortOffset(); } - else if constexpr (__id == 13) { return systemPortRanges(); } - else if constexpr (__id == 14) { return inbandPortId(); } - } + CONTAINER_CHILD_GETTERS(::std::string); +}; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchSettingsFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchSettingsFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::SwitchSettingsFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SflowCollector, + ::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowTunnel>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SflowCollector, + ::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowTunnel>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -11128,24 +11217,34 @@ class ChildThriftPath<::facebook::fboss::cfg::SflowCollector, ::facebook::fboss: Self >; using Children = fatal::tuple>, -std::pair>>; +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template using NameToId = fatal::tuple>, -std::pair>>::template type_of; +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; STRUCT_CHILD_GETTERS(ip, 1); - STRUCT_CHILD_GETTERS(port, 2); + STRUCT_CHILD_GETTERS(udpSrcPort, 2); + STRUCT_CHILD_GETTERS(udpDstPort, 3); + STRUCT_CHILD_GETTERS(ttl, 4); template auto operator()(const std::integral_constant&) { if constexpr (__id == 1) { return ip(); } - else if constexpr (__id == 2) { return port(); } + else if constexpr (__id == 2) { return udpSrcPort(); } + else if constexpr (__id == 3) { return udpDstPort(); } + else if constexpr (__id == 4) { return ttl(); } } template @@ -11156,21 +11255,21 @@ std::pair>> template -class ChildThriftPath<::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortPause, + ::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPause>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinID>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortPause, + ::facebook::fboss::phy::PinID, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPause>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PinID>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -11179,25 +11278,25 @@ class ChildThriftPath<::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(tx, 1); - STRUCT_CHILD_GETTERS(rx, 2); + STRUCT_CHILD_GETTERS(chip, 1); + STRUCT_CHILD_GETTERS(lane, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return tx(); } - else if constexpr (__id == 2) { return rx(); } + if constexpr (__id == 1) { return chip(); } + else if constexpr (__id == 2) { return lane(); } } template @@ -11207,21 +11306,21 @@ std::pair>>:: }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::PortQueue>, + ::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::PortQueue>, + ::std::vector<::facebook::fboss::cfg::Vlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Vlan>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Vlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -11229,19 +11328,19 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebo template -class ChildThriftPath<::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PktLenRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SflowTunnel, + ::facebook::fboss::cfg::PktLenRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PktLenRange>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SflowTunnel, + ::facebook::fboss::cfg::PktLenRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PktLenRange>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -11252,35 +11351,30 @@ class ChildThriftPath<::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ip, 1); - STRUCT_CHILD_GETTERS(udpSrcPort, 2); - STRUCT_CHILD_GETTERS(udpDstPort, 3); - STRUCT_CHILD_GETTERS(ttl, 4); + STRUCT_CHILD_GETTERS(min, 1); + STRUCT_CHILD_GETTERS(max, 2); + STRUCT_CHILD_GETTERS(invert, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ip(); } - else if constexpr (__id == 2) { return udpSrcPort(); } - else if constexpr (__id == 3) { return udpDstPort(); } - else if constexpr (__id == 4) { return ttl(); } + if constexpr (__id == 1) { return min(); } + else if constexpr (__id == 2) { return max(); } + else if constexpr (__id == 3) { return invert(); } } template @@ -11290,106 +11384,147 @@ std::pair>>: }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, + ::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchSettingsFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::SwitchSettingsFields>, + ::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SwitchSettingsFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosRule>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::SwitchSettingsFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::QosRule, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; -template -class ChildThriftPath<::std::set<::facebook::fboss::cfg::MPLSField>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::set<::facebook::fboss::cfg::MPLSField>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>>, - Parent> { - public: - using Self = Path< - ::std::set<::facebook::fboss::cfg::MPLSField>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>>, - Parent>; - using Child = Path<::facebook::fboss::cfg::MPLSField, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MPLSField>, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::MPLSField); -}; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::FirmwareVersion>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::FirmwareVersion>, + ::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareVersion>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortDescriptor>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::FirmwareVersion>, + ::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::FirmwareVersion>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortDescriptor>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::FirmwareVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::facebook::fboss::cfg::PortDescriptorType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDescriptorType>>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(portId, 1); + STRUCT_CHILD_GETTERS(portType, 2); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return portId(); } + else if constexpr (__id == 2) { return portType(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; + template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::TrafficClassToQosAttributeMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, + ::facebook::fboss::state::TrafficClassToQosAttributeMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeMap>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, + ::facebook::fboss::state::TrafficClassToQosAttributeMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::TrafficClassToQosAttributeMap>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::TrafficClassToQosAttributeEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(from, 1); + STRUCT_CHILD_GETTERS(to, 2); - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return from(); } + else if constexpr (__id == 2) { return to(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortPfc, + ::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPfc>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortPfc, + ::facebook::fboss::state::BlockedNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPfc>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedNeighbor>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -11398,35 +11533,25 @@ class ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, - std::pair, Child>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PfcWatchdog, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(tx, 1); - STRUCT_CHILD_GETTERS(rx, 2); - STRUCT_CHILD_GETTERS(portPgConfigName, 3); - STRUCT_CHILD_GETTERS(watchdog, 4); + STRUCT_CHILD_GETTERS(blockNeighborVlanID, 1); + STRUCT_CHILD_GETTERS(blockNeighborIP, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return tx(); } - else if constexpr (__id == 2) { return rx(); } - else if constexpr (__id == 3) { return portPgConfigName(); } - else if constexpr (__id == 4) { return watchdog(); } + if constexpr (__id == 1) { return blockNeighborVlanID(); } + else if constexpr (__id == 2) { return blockNeighborIP(); } } template @@ -11436,41 +11561,41 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, + ::std::vector<::facebook::fboss::cfg::AclTableGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LLDPTag>, ::apache::thrift::type::string_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, + ::std::vector<::facebook::fboss::cfg::AclTableGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LLDPTag>, ::apache::thrift::type::string_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTableGroup>>, Parent>; - using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::AclTableGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::LLDPTag); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::StaticRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::StaticRouteWithNextHops, + ::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteWithNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectToNextHopAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::StaticRouteWithNextHops, + ::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteWithNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectToNextHopAction>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -11481,30 +11606,25 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticRouteWithNextHops, ::faceboo ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(routerID, 1); - STRUCT_CHILD_GETTERS(prefix, 2); - STRUCT_CHILD_GETTERS(nexthops, 3); + STRUCT_CHILD_GETTERS(nexthops, 1); + STRUCT_CHILD_GETTERS(redirectNextHops, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return routerID(); } - else if constexpr (__id == 2) { return prefix(); } - else if constexpr (__id == 3) { return nexthops(); } + if constexpr (__id == 1) { return nexthops(); } + else if constexpr (__id == 2) { return redirectNextHops(); } } template @@ -11513,23 +11633,44 @@ std::pair +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfGroup>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfGroup>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::UdfGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::string); +}; + template -class ChildThriftPath<::facebook::fboss::cfg::AggregatePortMember, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AggregatePortMember, + ::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SendToQueue>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AggregatePortMember, + ::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePortMember>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::SendToQueue>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -11538,40 +11679,25 @@ class ChildThriftPath<::facebook::fboss::cfg::AggregatePortMember, ::facebook::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::LacpPortRate, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LacpPortRate>>>, - std::pair, Child<::facebook::fboss::cfg::LacpPortActivity, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::LacpPortActivity>>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(memberPortID, 1); - STRUCT_CHILD_GETTERS(priority, 2); - STRUCT_CHILD_GETTERS(rate, 3); - STRUCT_CHILD_GETTERS(activity, 4); - STRUCT_CHILD_GETTERS(holdTimerMultiplier, 5); + STRUCT_CHILD_GETTERS(action, 1); + STRUCT_CHILD_GETTERS(sendToCPU, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return memberPortID(); } - else if constexpr (__id == 2) { return priority(); } - else if constexpr (__id == 3) { return rate(); } - else if constexpr (__id == 4) { return activity(); } - else if constexpr (__id == 5) { return holdTimerMultiplier(); } + if constexpr (__id == 1) { return action(); } + else if constexpr (__id == 2) { return sendToCPU(); } } template @@ -11581,21 +11707,21 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::facebook::fboss::state::ControlPlaneFields>, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ControlPlaneFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::ControlPlaneFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::state::SystemPortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); @@ -11603,19 +11729,19 @@ class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::faceb template -class ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::UserDefinedTrapAction, + ::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UserDefinedTrapAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPause>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::UserDefinedTrapAction, + ::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UserDefinedTrapAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPause>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -11626,20 +11752,25 @@ class ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(queueId, 1); + STRUCT_CHILD_GETTERS(tx, 1); + STRUCT_CHILD_GETTERS(rx, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return queueId(); } + if constexpr (__id == 1) { return tx(); } + else if constexpr (__id == 2) { return rx(); } } template @@ -11650,21 +11781,21 @@ class ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook: template -class ChildThriftPath<::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::TransceiverAttributes, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortQueue, + ::facebook::fboss::TransceiverAttributes, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>, + ::apache::thrift::type::struct_t<::facebook::fboss::TransceiverAttributes>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortQueue, + ::facebook::fboss::TransceiverAttributes, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>, + ::apache::thrift::type::struct_t<::facebook::fboss::TransceiverAttributes>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::transceiver_validation_tags::strings; template using Child = Path< ChildType, @@ -11673,90 +11804,30 @@ class ChildThriftPath<::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::facebook::fboss::cfg::StreamType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::StreamType>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::MMUScalingFactor, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MMUScalingFactor>>>, - std::pair, Child<::facebook::fboss::cfg::QueueScheduling, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::QueueScheduling>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortProfileID>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(streamType, 2); - STRUCT_CHILD_GETTERS(weight, 3); - STRUCT_CHILD_GETTERS(reservedBytes, 4); - STRUCT_CHILD_GETTERS(scalingFactor, 5); - STRUCT_CHILD_GETTERS(scheduling, 6); - STRUCT_CHILD_GETTERS(name, 7); - STRUCT_CHILD_GETTERS(packetsPerSec_DEPRECATED, 9); - STRUCT_CHILD_GETTERS(sharedBytes, 10); - STRUCT_CHILD_GETTERS(aqms, 11); - STRUCT_CHILD_GETTERS(portQueueRate, 12); - STRUCT_CHILD_GETTERS(bandwidthBurstMinKbits, 13); - STRUCT_CHILD_GETTERS(bandwidthBurstMaxKbits, 14); - STRUCT_CHILD_GETTERS(maxDynamicSharedBytes, 15); - STRUCT_CHILD_GETTERS(bufferPoolName, 16); + STRUCT_CHILD_GETTERS(mediaInterfaceCode, 1); + STRUCT_CHILD_GETTERS(supportedFirmwareVersions, 2); + STRUCT_CHILD_GETTERS(supportedPortProfiles, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return streamType(); } - else if constexpr (__id == 3) { return weight(); } - else if constexpr (__id == 4) { return reservedBytes(); } - else if constexpr (__id == 5) { return scalingFactor(); } - else if constexpr (__id == 6) { return scheduling(); } - else if constexpr (__id == 7) { return name(); } - else if constexpr (__id == 9) { return packetsPerSec_DEPRECATED(); } - else if constexpr (__id == 10) { return sharedBytes(); } - else if constexpr (__id == 11) { return aqms(); } - else if constexpr (__id == 12) { return portQueueRate(); } - else if constexpr (__id == 13) { return bandwidthBurstMinKbits(); } - else if constexpr (__id == 14) { return bandwidthBurstMaxKbits(); } - else if constexpr (__id == 15) { return maxDynamicSharedBytes(); } - else if constexpr (__id == 16) { return bufferPoolName(); } + if constexpr (__id == 1) { return mediaInterfaceCode(); } + else if constexpr (__id == 2) { return supportedFirmwareVersions(); } + else if constexpr (__id == 3) { return supportedPortProfiles(); } } template @@ -11765,42 +11836,21 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::AclLookupClass>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::AclLookupClass>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>, - Parent>; - using Child = Path<::facebook::fboss::cfg::AclLookupClass, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::TrafficPolicyConfig, + ::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficPolicyConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::TrafficPolicyConfig, + ::facebook::fboss::cfg::MatchToAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficPolicyConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchToAction>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -11811,30 +11861,25 @@ class ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::f ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::MatchToAction>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(matchToAction, 1); - STRUCT_CHILD_GETTERS(defaultQosPolicy, 2); - STRUCT_CHILD_GETTERS(portIdToQosPolicy, 3); + STRUCT_CHILD_GETTERS(matcher, 1); + STRUCT_CHILD_GETTERS(action, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return matchToAction(); } - else if constexpr (__id == 2) { return defaultQosPolicy(); } - else if constexpr (__id == 3) { return portIdToQosPolicy(); } + if constexpr (__id == 1) { return matcher(); } + else if constexpr (__id == 2) { return action(); } } template @@ -11843,23 +11888,44 @@ std::pair +class ChildThriftPath<::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::BurstMonitorWeight>, ::apache::thrift::type::i16_t>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::BurstMonitorWeight>, ::apache::thrift::type::i16_t>, + Parent>; + using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::BurstMonitorWeight); +}; + template -class ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::MediaInterfaceId, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QueueMatchAction, + ::facebook::fboss::MediaInterfaceId, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QueueMatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaInterfaceId>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QueueMatchAction, + ::facebook::fboss::MediaInterfaceId, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QueueMatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaInterfaceId>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::transceiver_tags::strings; template using Child = Path< ChildType, @@ -11868,20 +11934,30 @@ class ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::MediaInterfaceUnion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::MediaInterfaceCode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::MediaInterfaceCode>>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(queueId, 1); + STRUCT_CHILD_GETTERS(lane, 1); + STRUCT_CHILD_GETTERS(media, 2); + STRUCT_CHILD_GETTERS(code, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return queueId(); } + if constexpr (__id == 1) { return lane(); } + else if constexpr (__id == 2) { return media(); } + else if constexpr (__id == 3) { return code(); } } template @@ -11890,70 +11966,65 @@ class ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fbos } }; +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::BufferPoolFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::BufferPoolFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; template -class ChildThriftPath<::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PacketCounterMatchAction, + ::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketCounterMatchAction>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PacketCounterMatchAction, + ::std::map<::std::int16_t, ::facebook::fboss::phy::LaneState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketCounterMatchAction>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneState>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; - template - using NameToId = fatal::tuple>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::phy::LaneState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(counterName, 1); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return counterName(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int16_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MacAndVlan, + ::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::DataPlanePhyChip>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MacAndVlan, + ::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::DataPlanePhyChip>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -11962,25 +12033,30 @@ class ChildThriftPath<::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + using Children = fatal::tuple>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::phy::DataPlanePhyChipType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::phy::DataPlanePhyChipType>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(vlanID, 1); - STRUCT_CHILD_GETTERS(macAddress, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(type, 2); + STRUCT_CHILD_GETTERS(physicalID, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vlanID(); } - else if constexpr (__id == 2) { return macAddress(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return type(); } + else if constexpr (__id == 3) { return physicalID(); } } template @@ -11991,21 +12067,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QueueCongestionDetection, + ::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::QueueCongestionDetection>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QueueCongestionDetection, + ::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::QueueCongestionDetection>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -12014,20 +12090,75 @@ class ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebo ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(linear, 1); + STRUCT_CHILD_GETTERS(ipTunnelId, 1); + STRUCT_CHILD_GETTERS(underlayIntfId, 2); + STRUCT_CHILD_GETTERS(mode, 3); + STRUCT_CHILD_GETTERS(dstIp, 4); + STRUCT_CHILD_GETTERS(type, 5); + STRUCT_CHILD_GETTERS(tunnelTermType, 6); + STRUCT_CHILD_GETTERS(ttlMode, 7); + STRUCT_CHILD_GETTERS(dscpMode, 8); + STRUCT_CHILD_GETTERS(ecnMode, 9); + STRUCT_CHILD_GETTERS(srcIp, 10); + STRUCT_CHILD_GETTERS(dstIpMask, 11); + STRUCT_CHILD_GETTERS(srcIpMask, 12); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return linear(); } + if constexpr (__id == 1) { return ipTunnelId(); } + else if constexpr (__id == 2) { return underlayIntfId(); } + else if constexpr (__id == 3) { return mode(); } + else if constexpr (__id == 4) { return dstIp(); } + else if constexpr (__id == 5) { return type(); } + else if constexpr (__id == 6) { return tunnelTermType(); } + else if constexpr (__id == 7) { return ttlMode(); } + else if constexpr (__id == 8) { return dscpMode(); } + else if constexpr (__id == 9) { return ecnMode(); } + else if constexpr (__id == 10) { return srcIp(); } + else if constexpr (__id == 11) { return dstIpMask(); } + else if constexpr (__id == 12) { return srcIpMask(); } } template @@ -12036,78 +12167,42 @@ class ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebo } }; - template -class ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::ChipConfig, + ::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LLDPTag>, ::apache::thrift::type::string_t>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::ChipConfig, + ::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::LLDPTag>, ::apache::thrift::type::string_t>, Parent>; - using strings = ::facebook::fboss::cfg::platform_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(bcm, 1); - STRUCT_CHILD_GETTERS(asic, 2); - STRUCT_CHILD_GETTERS(asicConfig, 3); - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return bcm(); } - else if constexpr (__id == 2) { return asic(); } - else if constexpr (__id == 3) { return asicConfig(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::LLDPTag); }; template -class ChildThriftPath<::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::StaticRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QcmConfig, + ::facebook::fboss::cfg::StaticRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QcmConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteWithNextHops>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QcmConfig, + ::facebook::fboss::cfg::StaticRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QcmConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticRouteWithNextHops>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -12118,95 +12213,30 @@ class ChildThriftPath<::facebook::fboss::cfg::QcmConfig, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; + using Children = fatal::tuple>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::BurstMonitorWeight, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::vector<::std::int32_t>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>>; + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(numFlowSamplesPerView, 1); - STRUCT_CHILD_GETTERS(flowLimit, 2); - STRUCT_CHILD_GETTERS(numFlowsClear, 3); - STRUCT_CHILD_GETTERS(scanIntervalInUsecs, 4); - STRUCT_CHILD_GETTERS(exportThreshold, 5); - STRUCT_CHILD_GETTERS(flowWeights, 6); - STRUCT_CHILD_GETTERS(agingIntervalInMsecs, 7); - STRUCT_CHILD_GETTERS(collectorDstIp, 8); - STRUCT_CHILD_GETTERS(collectorSrcPort, 10); - STRUCT_CHILD_GETTERS(collectorDstPort, 11); - STRUCT_CHILD_GETTERS(collectorDscp, 12); - STRUCT_CHILD_GETTERS(ppsToQcm, 13); - STRUCT_CHILD_GETTERS(collectorSrcIp, 14); - STRUCT_CHILD_GETTERS(monitorQcmPortList, 15); - STRUCT_CHILD_GETTERS(port2QosQueueIds, 16); - STRUCT_CHILD_GETTERS(monitorQcmCfgPortsOnly, 17); + STRUCT_CHILD_GETTERS(routerID, 1); + STRUCT_CHILD_GETTERS(prefix, 2); + STRUCT_CHILD_GETTERS(nexthops, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return numFlowSamplesPerView(); } - else if constexpr (__id == 2) { return flowLimit(); } - else if constexpr (__id == 3) { return numFlowsClear(); } - else if constexpr (__id == 4) { return scanIntervalInUsecs(); } - else if constexpr (__id == 5) { return exportThreshold(); } - else if constexpr (__id == 6) { return flowWeights(); } - else if constexpr (__id == 7) { return agingIntervalInMsecs(); } - else if constexpr (__id == 8) { return collectorDstIp(); } - else if constexpr (__id == 10) { return collectorSrcPort(); } - else if constexpr (__id == 11) { return collectorDstPort(); } - else if constexpr (__id == 12) { return collectorDscp(); } - else if constexpr (__id == 13) { return ppsToQcm(); } - else if constexpr (__id == 14) { return collectorSrcIp(); } - else if constexpr (__id == 15) { return monitorQcmPortList(); } - else if constexpr (__id == 16) { return port2QosQueueIds(); } - else if constexpr (__id == 17) { return monitorQcmCfgPortsOnly(); } + if constexpr (__id == 1) { return routerID(); } + else if constexpr (__id == 2) { return prefix(); } + else if constexpr (__id == 3) { return nexthops(); } } template @@ -12217,21 +12247,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MatchAction, + ::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchAction>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MatchAction, + ::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchAction>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::cfg::platform_config_tags::strings; template using Child = Path< ChildType, @@ -12240,75 +12270,30 @@ class ChildThriftPath<::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::ToCpuAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ToCpuAction>>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::FlowletAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::FlowletAction>>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::bcm::BcmConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::asic::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(sendToQueue, 1); - STRUCT_CHILD_GETTERS(packetCounter_DEPRECATED, 2); - STRUCT_CHILD_GETTERS(setDscp, 3); - STRUCT_CHILD_GETTERS(ingressMirror, 4); - STRUCT_CHILD_GETTERS(egressMirror, 5); - STRUCT_CHILD_GETTERS(counter, 6); - STRUCT_CHILD_GETTERS(toCpuAction, 7); - STRUCT_CHILD_GETTERS(macsecFlow, 8); - STRUCT_CHILD_GETTERS(redirectToNextHop, 9); - STRUCT_CHILD_GETTERS(setTc, 10); - STRUCT_CHILD_GETTERS(userDefinedTrap, 11); - STRUCT_CHILD_GETTERS(flowletAction, 12); + STRUCT_CHILD_GETTERS(bcm, 1); + STRUCT_CHILD_GETTERS(asic, 2); + STRUCT_CHILD_GETTERS(asicConfig, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return sendToQueue(); } - else if constexpr (__id == 2) { return packetCounter_DEPRECATED(); } - else if constexpr (__id == 3) { return setDscp(); } - else if constexpr (__id == 4) { return ingressMirror(); } - else if constexpr (__id == 5) { return egressMirror(); } - else if constexpr (__id == 6) { return counter(); } - else if constexpr (__id == 7) { return toCpuAction(); } - else if constexpr (__id == 8) { return macsecFlow(); } - else if constexpr (__id == 9) { return redirectToNextHop(); } - else if constexpr (__id == 10) { return setTc(); } - else if constexpr (__id == 11) { return userDefinedTrap(); } - else if constexpr (__id == 12) { return flowletAction(); } + if constexpr (__id == 1) { return bcm(); } + else if constexpr (__id == 2) { return asic(); } + else if constexpr (__id == 3) { return asicConfig(); } } template @@ -12319,19 +12304,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MacsecFlowAction, + ::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacsecFlowAction>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::QueueCongestionDetection>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MacsecFlowAction, + ::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacsecFlowAction>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::QueueCongestionDetection>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -12342,25 +12327,20 @@ class ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child>>, - std::pair, Child<::facebook::fboss::cfg::MacsecFlowPacketAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MacsecFlowPacketAction>>>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(flowId, 1); - STRUCT_CHILD_GETTERS(action, 2); + STRUCT_CHILD_GETTERS(linear, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return flowId(); } - else if constexpr (__id == 2) { return action(); } + if constexpr (__id == 1) { return linear(); } } template @@ -12371,19 +12351,19 @@ std::pair template -class ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Range64, + ::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Range64, + ::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -12394,25 +12374,85 @@ class ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::facebook::fboss::cfg::DsfNodeType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::DsfNodeType>>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::AsicType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AsicType>>>, + std::pair, Child<::facebook::fboss::PlatformType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PlatformType>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(minimum, 1); - STRUCT_CHILD_GETTERS(maximum, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(switchId, 2); + STRUCT_CHILD_GETTERS(type, 3); + STRUCT_CHILD_GETTERS(loopbackIps, 4); + STRUCT_CHILD_GETTERS(systemPortRange_DEPRECATED, 5); + STRUCT_CHILD_GETTERS(nodeMac, 6); + STRUCT_CHILD_GETTERS(asicType, 7); + STRUCT_CHILD_GETTERS(platformType, 8); + STRUCT_CHILD_GETTERS(clusterId, 9); + STRUCT_CHILD_GETTERS(fabricLevel, 10); + STRUCT_CHILD_GETTERS(localSystemPortOffset, 11); + STRUCT_CHILD_GETTERS(globalSystemPortOffset, 12); + STRUCT_CHILD_GETTERS(systemPortRanges, 13); + STRUCT_CHILD_GETTERS(inbandPortId, 14); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return minimum(); } - else if constexpr (__id == 2) { return maximum(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return switchId(); } + else if constexpr (__id == 3) { return type(); } + else if constexpr (__id == 4) { return loopbackIps(); } + else if constexpr (__id == 5) { return systemPortRange_DEPRECATED(); } + else if constexpr (__id == 6) { return nodeMac(); } + else if constexpr (__id == 7) { return asicType(); } + else if constexpr (__id == 8) { return platformType(); } + else if constexpr (__id == 9) { return clusterId(); } + else if constexpr (__id == 10) { return fabricLevel(); } + else if constexpr (__id == 11) { return localSystemPortOffset(); } + else if constexpr (__id == 12) { return globalSystemPortOffset(); } + else if constexpr (__id == 13) { return systemPortRanges(); } + else if constexpr (__id == 14) { return inbandPortId(); } } template @@ -12421,27 +12461,6 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::SflowCollector>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::SflowCollector>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template class ChildThriftPath<::facebook::fboss::cfg::Range, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : @@ -12608,42 +12627,21 @@ class ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::Fsd CONTAINER_CHILD_GETTERS(::std::int32_t); }; -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::IpInIpTunnel>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::AggregatePort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AggregatePort, + ::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AggregatePort, + ::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -12654,45 +12652,25 @@ class ChildThriftPath<::facebook::fboss::cfg::AggregatePort, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePortMember>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MinimumCapacity, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::QueueCongestionBehavior, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::QueueCongestionBehavior>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(key, 1); - STRUCT_CHILD_GETTERS(name, 2); - STRUCT_CHILD_GETTERS(description, 3); - STRUCT_CHILD_GETTERS(memberPorts, 4); - STRUCT_CHILD_GETTERS(minimumCapacity, 5); - STRUCT_CHILD_GETTERS(counterTags, 6); + STRUCT_CHILD_GETTERS(detection, 1); + STRUCT_CHILD_GETTERS(behavior, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return key(); } - else if constexpr (__id == 2) { return name(); } - else if constexpr (__id == 3) { return description(); } - else if constexpr (__id == 4) { return memberPorts(); } - else if constexpr (__id == 5) { return minimumCapacity(); } - else if constexpr (__id == 6) { return counterTags(); } + if constexpr (__id == 1) { return detection(); } + else if constexpr (__id == 2) { return behavior(); } } template @@ -12701,65 +12679,23 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TransceiverSpecFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::TransceiverSpecFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; - -template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::cfg::PortPgConfigName, ::std::vector<::facebook::fboss::cfg::PortPgConfig>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>>, - Parent>; - using Child = ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortPgConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortPgConfigName); -}; - template -class ChildThriftPath<::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::VlanFields, + ::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>, Parent> { public: using Self = Path< - ::facebook::fboss::state::VlanFields, + ::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::AsicConfigEntry>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::asic_config_v2_tags::strings; template using Child = Path< ChildType, @@ -12768,103 +12704,95 @@ class ChildThriftPath<::facebook::fboss::state::VlanFields, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::MacEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(vlanId, 1); - STRUCT_CHILD_GETTERS(vlanName, 2); - STRUCT_CHILD_GETTERS(intfID, 3); - STRUCT_CHILD_GETTERS(dhcpV4Relay, 4); - STRUCT_CHILD_GETTERS(dhcpV6Relay, 5); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 6); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 7); - STRUCT_CHILD_GETTERS(ports, 8); - STRUCT_CHILD_GETTERS(arpTable, 9); - STRUCT_CHILD_GETTERS(arpResponseTable, 10); - STRUCT_CHILD_GETTERS(ndpTable, 11); - STRUCT_CHILD_GETTERS(ndpResponseTable, 12); - STRUCT_CHILD_GETTERS(macTable, 13); + STRUCT_CHILD_GETTERS(config, 1); + STRUCT_CHILD_GETTERS(jsonConfig, 2); + STRUCT_CHILD_GETTERS(yamlConfig, 3); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return config(); } + else if constexpr (__id == 2) { return jsonConfig(); } + else if constexpr (__id == 3) { return yamlConfig(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::ExpQosMap>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::ExpQosMap>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::ExpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vlanId(); } - else if constexpr (__id == 2) { return vlanName(); } - else if constexpr (__id == 3) { return intfID(); } - else if constexpr (__id == 4) { return dhcpV4Relay(); } - else if constexpr (__id == 5) { return dhcpV6Relay(); } - else if constexpr (__id == 6) { return dhcpRelayOverridesV4(); } - else if constexpr (__id == 7) { return dhcpRelayOverridesV6(); } - else if constexpr (__id == 8) { return ports(); } - else if constexpr (__id == 9) { return arpTable(); } - else if constexpr (__id == 10) { return arpResponseTable(); } - else if constexpr (__id == 11) { return ndpTable(); } - else if constexpr (__id == 12) { return ndpResponseTable(); } - else if constexpr (__id == 13) { return macTable(); } - } +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::AclLookupClass>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::AclLookupClass>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::AclLookupClass, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>, Self>; + using Self::Self; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::RedirectNextHop, + ::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficPolicyConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::RedirectNextHop, + ::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectNextHop>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::TrafficPolicyConfig>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -12875,25 +12803,30 @@ class ChildThriftPath<::facebook::fboss::cfg::RedirectNextHop, ::facebook::fboss ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::MatchToAction>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ip, 1); - STRUCT_CHILD_GETTERS(intfID, 2); + STRUCT_CHILD_GETTERS(matchToAction, 1); + STRUCT_CHILD_GETTERS(defaultQosPolicy, 2); + STRUCT_CHILD_GETTERS(portIdToQosPolicy, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ip(); } - else if constexpr (__id == 2) { return intfID(); } + if constexpr (__id == 1) { return matchToAction(); } + else if constexpr (__id == 2) { return defaultQosPolicy(); } + else if constexpr (__id == 3) { return portIdToQosPolicy(); } } template @@ -12904,21 +12837,21 @@ std::pair template -class ChildThriftPath<::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::NextHopThrift, + ::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchAction>, Parent> { public: using Self = Path< - ::facebook::fboss::NextHopThrift, + ::facebook::fboss::cfg::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MatchAction>, Parent>; - using strings = ::facebook::fboss::common_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -12927,35 +12860,75 @@ class ChildThriftPath<::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::MplsAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::QueueMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PacketCounterMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::ToCpuAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ToCpuAction>>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SetTcAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::FlowletAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::FlowletAction>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(address, 1); - STRUCT_CHILD_GETTERS(weight, 2); - STRUCT_CHILD_GETTERS(mplsAction, 3); - STRUCT_CHILD_GETTERS(disableTTLDecrement, 4); + STRUCT_CHILD_GETTERS(sendToQueue, 1); + STRUCT_CHILD_GETTERS(packetCounter_DEPRECATED, 2); + STRUCT_CHILD_GETTERS(setDscp, 3); + STRUCT_CHILD_GETTERS(ingressMirror, 4); + STRUCT_CHILD_GETTERS(egressMirror, 5); + STRUCT_CHILD_GETTERS(counter, 6); + STRUCT_CHILD_GETTERS(toCpuAction, 7); + STRUCT_CHILD_GETTERS(macsecFlow, 8); + STRUCT_CHILD_GETTERS(redirectToNextHop, 9); + STRUCT_CHILD_GETTERS(setTc, 10); + STRUCT_CHILD_GETTERS(userDefinedTrap, 11); + STRUCT_CHILD_GETTERS(flowletAction, 12); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return address(); } - else if constexpr (__id == 2) { return weight(); } - else if constexpr (__id == 3) { return mplsAction(); } - else if constexpr (__id == 4) { return disableTTLDecrement(); } + if constexpr (__id == 1) { return sendToQueue(); } + else if constexpr (__id == 2) { return packetCounter_DEPRECATED(); } + else if constexpr (__id == 3) { return setDscp(); } + else if constexpr (__id == 4) { return ingressMirror(); } + else if constexpr (__id == 5) { return egressMirror(); } + else if constexpr (__id == 6) { return counter(); } + else if constexpr (__id == 7) { return toCpuAction(); } + else if constexpr (__id == 8) { return macsecFlow(); } + else if constexpr (__id == 9) { return redirectToNextHop(); } + else if constexpr (__id == 10) { return setTc(); } + else if constexpr (__id == 11) { return userDefinedTrap(); } + else if constexpr (__id == 12) { return flowletAction(); } } template @@ -12964,86 +12937,75 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::Interface>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::Interface>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; template -class ChildThriftPath<::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::RxSak>, + ::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::RxSak>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacsecFlowAction>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::RxSak>, + ::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::RxSak>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacsecFlowAction>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::RxSak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child>>, + std::pair, Child<::facebook::fboss::cfg::MacsecFlowPacketAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MacsecFlowPacketAction>>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::PortNeighbor>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::PortNeighbor>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(flowId, 1); + STRUCT_CHILD_GETTERS(action, 2); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return flowId(); } + else if constexpr (__id == 2) { return action(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SwitchSettings, + ::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchSettings>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::RxSettings>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SwitchSettings, + ::facebook::fboss::phy::RxSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchSettings>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::RxSettings>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -13052,115 +13014,215 @@ class ChildThriftPath<::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss: ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::L2LearningMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::L2LearningMode>>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Neighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::SwitchType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::SwitchDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchDrainState>>>, - std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(l2LearningMode, 1); - STRUCT_CHILD_GETTERS(qcmEnable, 2); - STRUCT_CHILD_GETTERS(ptpTcEnable, 3); - STRUCT_CHILD_GETTERS(l2AgeTimerSeconds, 4); - STRUCT_CHILD_GETTERS(maxRouteCounterIDs, 5); - STRUCT_CHILD_GETTERS(blockNeighbors, 6); - STRUCT_CHILD_GETTERS(macAddrsToBlock, 7); - STRUCT_CHILD_GETTERS(switchType, 8); - STRUCT_CHILD_GETTERS(switchId, 9); - STRUCT_CHILD_GETTERS(exactMatchTableConfigs, 10); - STRUCT_CHILD_GETTERS(switchIdToSwitchType_DEPRECATED, 11); - STRUCT_CHILD_GETTERS(switchDrainState, 12); - STRUCT_CHILD_GETTERS(switchIdToSwitchInfo, 13); - STRUCT_CHILD_GETTERS(minLinksToRemainInVOQDomain, 14); - STRUCT_CHILD_GETTERS(minLinksToJoinVOQDomain, 15); - STRUCT_CHILD_GETTERS(vendorMacOuis, 16); - STRUCT_CHILD_GETTERS(metaMacOuis, 17); - STRUCT_CHILD_GETTERS(needL2EntryForNeighbor, 18); - STRUCT_CHILD_GETTERS(sramGlobalFreePercentXoffThreshold, 19); - STRUCT_CHILD_GETTERS(sramGlobalFreePercentXonThreshold, 20); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return l2LearningMode(); } - else if constexpr (__id == 2) { return qcmEnable(); } - else if constexpr (__id == 3) { return ptpTcEnable(); } - else if constexpr (__id == 4) { return l2AgeTimerSeconds(); } - else if constexpr (__id == 5) { return maxRouteCounterIDs(); } - else if constexpr (__id == 6) { return blockNeighbors(); } - else if constexpr (__id == 7) { return macAddrsToBlock(); } - else if constexpr (__id == 8) { return switchType(); } - else if constexpr (__id == 9) { return switchId(); } - else if constexpr (__id == 10) { return exactMatchTableConfigs(); } - else if constexpr (__id == 11) { return switchIdToSwitchType_DEPRECATED(); } - else if constexpr (__id == 12) { return switchDrainState(); } - else if constexpr (__id == 13) { return switchIdToSwitchInfo(); } - else if constexpr (__id == 14) { return minLinksToRemainInVOQDomain(); } - else if constexpr (__id == 15) { return minLinksToJoinVOQDomain(); } - else if constexpr (__id == 16) { return vendorMacOuis(); } - else if constexpr (__id == 17) { return metaMacOuis(); } - else if constexpr (__id == 18) { return needL2EntryForNeighbor(); } - else if constexpr (__id == 19) { return sramGlobalFreePercentXoffThreshold(); } - else if constexpr (__id == 20) { return sramGlobalFreePercentXonThreshold(); } + STRUCT_CHILD_GETTERS(ctlCode, 1); + STRUCT_CHILD_GETTERS(dspMode, 2); + STRUCT_CHILD_GETTERS(afeTrim, 3); + STRUCT_CHILD_GETTERS(acCouplingBypass, 4); + STRUCT_CHILD_GETTERS(channelReach, 5); + STRUCT_CHILD_GETTERS(diffEncoderEn, 6); + STRUCT_CHILD_GETTERS(fbfCoefInitVal, 7); + STRUCT_CHILD_GETTERS(fbfLmsEnable, 8); + STRUCT_CHILD_GETTERS(instgScanOptimize, 9); + STRUCT_CHILD_GETTERS(instgTableEndRow, 10); + STRUCT_CHILD_GETTERS(instgTableStartRow, 11); + STRUCT_CHILD_GETTERS(parityEncoderEn, 12); + STRUCT_CHILD_GETTERS(thpEn, 13); + STRUCT_CHILD_GETTERS(dcTermEn, 14); + STRUCT_CHILD_GETTERS(setPrecode, 15); + STRUCT_CHILD_GETTERS(instgBoost1Start, 16); + STRUCT_CHILD_GETTERS(instgBoost1Step, 17); + STRUCT_CHILD_GETTERS(instgBoost1Stop, 18); + STRUCT_CHILD_GETTERS(instgBoost2OrHrStart, 19); + STRUCT_CHILD_GETTERS(instgBoost2OrHrStep, 20); + STRUCT_CHILD_GETTERS(instgBoost2OrHrStop, 21); + STRUCT_CHILD_GETTERS(instgC1Start1p7, 22); + STRUCT_CHILD_GETTERS(instgC1Step1p7, 23); + STRUCT_CHILD_GETTERS(instgC1Stop1p7, 24); + STRUCT_CHILD_GETTERS(instgDfeStart1p7, 25); + STRUCT_CHILD_GETTERS(instgDfeStep1p7, 26); + STRUCT_CHILD_GETTERS(instgDfeStop1p7, 27); + STRUCT_CHILD_GETTERS(enableScanSelection, 28); + STRUCT_CHILD_GETTERS(instgScanUseSrSettings, 29); + STRUCT_CHILD_GETTERS(cdrCfgOvEn, 30); + STRUCT_CHILD_GETTERS(cdrTdet1stOrdStepOvVal, 31); + STRUCT_CHILD_GETTERS(cdrTdet2ndOrdStepOvVal, 32); + STRUCT_CHILD_GETTERS(cdrTdetFineStepOvVal, 33); + STRUCT_CHILD_GETTERS(ldoBypass, 34); + STRUCT_CHILD_GETTERS(ffeLengthBitmap, 35); + STRUCT_CHILD_GETTERS(instgEnableScan, 36); + STRUCT_CHILD_GETTERS(dcwEn, 37); + STRUCT_CHILD_GETTERS(dcwStepCoarseOvVal, 38); + STRUCT_CHILD_GETTERS(dcwStepFineOvVal, 39); + STRUCT_CHILD_GETTERS(dcwOvEn, 40); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return ctlCode(); } + else if constexpr (__id == 2) { return dspMode(); } + else if constexpr (__id == 3) { return afeTrim(); } + else if constexpr (__id == 4) { return acCouplingBypass(); } + else if constexpr (__id == 5) { return channelReach(); } + else if constexpr (__id == 6) { return diffEncoderEn(); } + else if constexpr (__id == 7) { return fbfCoefInitVal(); } + else if constexpr (__id == 8) { return fbfLmsEnable(); } + else if constexpr (__id == 9) { return instgScanOptimize(); } + else if constexpr (__id == 10) { return instgTableEndRow(); } + else if constexpr (__id == 11) { return instgTableStartRow(); } + else if constexpr (__id == 12) { return parityEncoderEn(); } + else if constexpr (__id == 13) { return thpEn(); } + else if constexpr (__id == 14) { return dcTermEn(); } + else if constexpr (__id == 15) { return setPrecode(); } + else if constexpr (__id == 16) { return instgBoost1Start(); } + else if constexpr (__id == 17) { return instgBoost1Step(); } + else if constexpr (__id == 18) { return instgBoost1Stop(); } + else if constexpr (__id == 19) { return instgBoost2OrHrStart(); } + else if constexpr (__id == 20) { return instgBoost2OrHrStep(); } + else if constexpr (__id == 21) { return instgBoost2OrHrStop(); } + else if constexpr (__id == 22) { return instgC1Start1p7(); } + else if constexpr (__id == 23) { return instgC1Step1p7(); } + else if constexpr (__id == 24) { return instgC1Stop1p7(); } + else if constexpr (__id == 25) { return instgDfeStart1p7(); } + else if constexpr (__id == 26) { return instgDfeStep1p7(); } + else if constexpr (__id == 27) { return instgDfeStop1p7(); } + else if constexpr (__id == 28) { return enableScanSelection(); } + else if constexpr (__id == 29) { return instgScanUseSrSettings(); } + else if constexpr (__id == 30) { return cdrCfgOvEn(); } + else if constexpr (__id == 31) { return cdrTdet1stOrdStepOvVal(); } + else if constexpr (__id == 32) { return cdrTdet2ndOrdStepOvVal(); } + else if constexpr (__id == 33) { return cdrTdetFineStepOvVal(); } + else if constexpr (__id == 34) { return ldoBypass(); } + else if constexpr (__id == 35) { return ffeLengthBitmap(); } + else if constexpr (__id == 36) { return instgEnableScan(); } + else if constexpr (__id == 37) { return dcwEn(); } + else if constexpr (__id == 38) { return dcwStepCoarseOvVal(); } + else if constexpr (__id == 39) { return dcwStepFineOvVal(); } + else if constexpr (__id == 40) { return dcwOvEn(); } } template @@ -13169,23 +13231,65 @@ std::pair +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortPgConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::PortPgConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::PortPgConfig>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortPgConfig>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::PortPgConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::NeighborResponseEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborResponseEntryFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::NeighborResponseEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::string); +}; + template -class ChildThriftPath<::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::IpInIpTunnel, + ::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PlatformConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::IpInIpTunnel, + ::facebook::fboss::cfg::PlatformConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PlatformConfig>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::cfg::platform_config_tags::strings; template using Child = Path< ChildType, @@ -13194,70 +13298,40 @@ class ChildThriftPath<::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>>, -std::pair>>, -std::pair>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, - std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, - std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, - std::pair, Child<::facebook::fboss::cfg::TunnelTerminationType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TunnelTerminationType>>>, - std::pair, Child<::facebook::fboss::cfg::TunnelType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TunnelType>>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::map<::facebook::fboss::cfg::PlatformAttributes, ::std::string>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ipInIpTunnelId, 1); - STRUCT_CHILD_GETTERS(underlayIntfID, 2); - STRUCT_CHILD_GETTERS(dstIp, 3); - STRUCT_CHILD_GETTERS(srcIp, 4); - STRUCT_CHILD_GETTERS(dstIpMask, 5); - STRUCT_CHILD_GETTERS(srcIpMask, 6); - STRUCT_CHILD_GETTERS(ttlMode, 7); - STRUCT_CHILD_GETTERS(dscpMode, 8); - STRUCT_CHILD_GETTERS(ecnMode, 9); - STRUCT_CHILD_GETTERS(tunnelTermType, 10); - STRUCT_CHILD_GETTERS(tunnelType, 11); + STRUCT_CHILD_GETTERS(chip, 1); + STRUCT_CHILD_GETTERS(platformSettings, 3); + STRUCT_CHILD_GETTERS(switchIndexToSwitchId, 4); + STRUCT_CHILD_GETTERS(switchIndexToChipConfigs, 5); + STRUCT_CHILD_GETTERS(switchIndexToPlatformSettings, 6); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ipInIpTunnelId(); } - else if constexpr (__id == 2) { return underlayIntfID(); } - else if constexpr (__id == 3) { return dstIp(); } - else if constexpr (__id == 4) { return srcIp(); } - else if constexpr (__id == 5) { return dstIpMask(); } - else if constexpr (__id == 6) { return srcIpMask(); } - else if constexpr (__id == 7) { return ttlMode(); } - else if constexpr (__id == 8) { return dscpMode(); } - else if constexpr (__id == 9) { return ecnMode(); } - else if constexpr (__id == 10) { return tunnelTermType(); } - else if constexpr (__id == 11) { return tunnelType(); } + if constexpr (__id == 1) { return chip(); } + else if constexpr (__id == 3) { return platformSettings(); } + else if constexpr (__id == 4) { return switchIndexToSwitchId(); } + else if constexpr (__id == 5) { return switchIndexToChipConfigs(); } + else if constexpr (__id == 6) { return switchIndexToPlatformSettings(); } } template @@ -13267,278 +13341,190 @@ std::pair -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, + ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>, Parent> { public: using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, + ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int64_t); + CONTAINER_CHILD_GETTERS(::std::int16_t); }; - template -class ChildThriftPath<::facebook::fboss::cfg::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::RedirectToNextHopAction, + ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectToNextHopAction>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::RedirectToNextHopAction, + ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::RedirectToNextHopAction>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::RedirectNextHop>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(nexthops, 1); - STRUCT_CHILD_GETTERS(redirectNextHops, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return nexthops(); } - else if constexpr (__id == 2) { return redirectNextHops(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int64_t); }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, + ::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfGroup>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::cfg::UdfGroup>, + ::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfGroup>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::UdfGroup, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::string); + CONTAINER_CHILD_GETTERS(::std::int16_t); }; - template -class ChildThriftPath<::facebook::fboss::IpPrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::IpPrefix, + ::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::IpPrefix>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>>, Parent> { public: using Self = Path< - ::facebook::fboss::IpPrefix, + ::std::vector<::facebook::fboss::cfg::AclTable>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::IpPrefix>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>>, Parent>; - using strings = ::facebook::fboss::ctrl_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(ip, 1); - STRUCT_CHILD_GETTERS(prefixLength, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ip(); } - else if constexpr (__id == 2) { return prefixLength(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::LoadBalancer>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::LoadBalancer>, + ::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::LoadBalancer>, + ::std::map<::std::int32_t, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::LoadBalancer>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::string_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::LoadBalancer, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::FirmwarePair>, + ::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::FirmwarePair>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::FirmwarePair>, + ::std::vector<::facebook::fboss::cfg::Interface>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::FirmwarePair>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::FirmwarePair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::set<::facebook::fboss::cfg::IPv4Field>, + ::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::RxSak>>, Parent> { public: using Self = Path< - ::std::set<::facebook::fboss::cfg::IPv4Field>, + ::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::RxSak>>, Parent>; - using Child = Path<::facebook::fboss::cfg::IPv4Field, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::RxSak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::IPv4Field); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; - template -class ChildThriftPath<::facebook::fboss::state::Label, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::Label, + ::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::Label>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>>, Parent> { public: using Self = Path< - ::facebook::fboss::state::Label, + ::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::Label>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortNeighbor>>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::PortNeighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(value, 1); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return value(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::CmisOverrides, + ::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CmisOverrides>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchSettings>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::CmisOverrides, + ::facebook::fboss::cfg::SwitchSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CmisOverrides>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchSettings>, Parent>; - using strings = ::facebook::fboss::cfg::qsfp_service_config_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -13547,20 +13533,140 @@ class ChildThriftPath<::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::RxEqualizerSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::L2LearningMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::L2LearningMode>>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Neighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::SwitchType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExactMatchTableConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::SwitchDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchDrainState>>>, + std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SelfHealingEcmpLagConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(rxEqualizerSettings, 1); + STRUCT_CHILD_GETTERS(l2LearningMode, 1); + STRUCT_CHILD_GETTERS(qcmEnable, 2); + STRUCT_CHILD_GETTERS(ptpTcEnable, 3); + STRUCT_CHILD_GETTERS(l2AgeTimerSeconds, 4); + STRUCT_CHILD_GETTERS(maxRouteCounterIDs, 5); + STRUCT_CHILD_GETTERS(blockNeighbors, 6); + STRUCT_CHILD_GETTERS(macAddrsToBlock, 7); + STRUCT_CHILD_GETTERS(switchType, 8); + STRUCT_CHILD_GETTERS(switchId, 9); + STRUCT_CHILD_GETTERS(exactMatchTableConfigs, 10); + STRUCT_CHILD_GETTERS(switchIdToSwitchType_DEPRECATED, 11); + STRUCT_CHILD_GETTERS(switchDrainState, 12); + STRUCT_CHILD_GETTERS(switchIdToSwitchInfo, 13); + STRUCT_CHILD_GETTERS(minLinksToRemainInVOQDomain, 14); + STRUCT_CHILD_GETTERS(minLinksToJoinVOQDomain, 15); + STRUCT_CHILD_GETTERS(vendorMacOuis, 16); + STRUCT_CHILD_GETTERS(metaMacOuis, 17); + STRUCT_CHILD_GETTERS(needL2EntryForNeighbor, 18); + STRUCT_CHILD_GETTERS(sramGlobalFreePercentXoffThreshold, 19); + STRUCT_CHILD_GETTERS(sramGlobalFreePercentXonThreshold, 20); + STRUCT_CHILD_GETTERS(linkFlowControlCreditThreshold, 21); + STRUCT_CHILD_GETTERS(voqDramBoundThreshold, 22); + STRUCT_CHILD_GETTERS(conditionalEntropyRehashPeriodUS, 23); + STRUCT_CHILD_GETTERS(firmwarePath, 24); + STRUCT_CHILD_GETTERS(selfHealingEcmpLagConfig, 25); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return rxEqualizerSettings(); } + if constexpr (__id == 1) { return l2LearningMode(); } + else if constexpr (__id == 2) { return qcmEnable(); } + else if constexpr (__id == 3) { return ptpTcEnable(); } + else if constexpr (__id == 4) { return l2AgeTimerSeconds(); } + else if constexpr (__id == 5) { return maxRouteCounterIDs(); } + else if constexpr (__id == 6) { return blockNeighbors(); } + else if constexpr (__id == 7) { return macAddrsToBlock(); } + else if constexpr (__id == 8) { return switchType(); } + else if constexpr (__id == 9) { return switchId(); } + else if constexpr (__id == 10) { return exactMatchTableConfigs(); } + else if constexpr (__id == 11) { return switchIdToSwitchType_DEPRECATED(); } + else if constexpr (__id == 12) { return switchDrainState(); } + else if constexpr (__id == 13) { return switchIdToSwitchInfo(); } + else if constexpr (__id == 14) { return minLinksToRemainInVOQDomain(); } + else if constexpr (__id == 15) { return minLinksToJoinVOQDomain(); } + else if constexpr (__id == 16) { return vendorMacOuis(); } + else if constexpr (__id == 17) { return metaMacOuis(); } + else if constexpr (__id == 18) { return needL2EntryForNeighbor(); } + else if constexpr (__id == 19) { return sramGlobalFreePercentXoffThreshold(); } + else if constexpr (__id == 20) { return sramGlobalFreePercentXonThreshold(); } + else if constexpr (__id == 21) { return linkFlowControlCreditThreshold(); } + else if constexpr (__id == 22) { return voqDramBoundThreshold(); } + else if constexpr (__id == 23) { return conditionalEntropyRehashPeriodUS(); } + else if constexpr (__id == 24) { return firmwarePath(); } + else if constexpr (__id == 25) { return selfHealingEcmpLagConfig(); } } template @@ -13571,19 +13677,19 @@ class ChildThriftPath<::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss:: template -class ChildThriftPath<::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::GreTunnel, + ::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::GreTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::GreTunnel, + ::facebook::fboss::cfg::PortQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::GreTunnel>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortQueue>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -13594,25 +13700,90 @@ class ChildThriftPath<::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::facebook::fboss::cfg::StreamType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::StreamType>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::MMUScalingFactor, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::MMUScalingFactor>>>, + std::pair, Child<::facebook::fboss::cfg::QueueScheduling, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::QueueScheduling>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ip, 1); - STRUCT_CHILD_GETTERS(ttl, 2); + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(streamType, 2); + STRUCT_CHILD_GETTERS(weight, 3); + STRUCT_CHILD_GETTERS(reservedBytes, 4); + STRUCT_CHILD_GETTERS(scalingFactor, 5); + STRUCT_CHILD_GETTERS(scheduling, 6); + STRUCT_CHILD_GETTERS(name, 7); + STRUCT_CHILD_GETTERS(packetsPerSec_DEPRECATED, 9); + STRUCT_CHILD_GETTERS(sharedBytes, 10); + STRUCT_CHILD_GETTERS(aqms, 11); + STRUCT_CHILD_GETTERS(portQueueRate, 12); + STRUCT_CHILD_GETTERS(bandwidthBurstMinKbits, 13); + STRUCT_CHILD_GETTERS(bandwidthBurstMaxKbits, 14); + STRUCT_CHILD_GETTERS(maxDynamicSharedBytes, 15); + STRUCT_CHILD_GETTERS(bufferPoolName, 16); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ip(); } - else if constexpr (__id == 2) { return ttl(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return streamType(); } + else if constexpr (__id == 3) { return weight(); } + else if constexpr (__id == 4) { return reservedBytes(); } + else if constexpr (__id == 5) { return scalingFactor(); } + else if constexpr (__id == 6) { return scheduling(); } + else if constexpr (__id == 7) { return name(); } + else if constexpr (__id == 9) { return packetsPerSec_DEPRECATED(); } + else if constexpr (__id == 10) { return sharedBytes(); } + else if constexpr (__id == 11) { return aqms(); } + else if constexpr (__id == 12) { return portQueueRate(); } + else if constexpr (__id == 13) { return bandwidthBurstMinKbits(); } + else if constexpr (__id == 14) { return bandwidthBurstMaxKbits(); } + else if constexpr (__id == 15) { return maxDynamicSharedBytes(); } + else if constexpr (__id == 16) { return bufferPoolName(); } } template @@ -13621,23 +13792,65 @@ std::pair>>: } }; +template +class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; template -class ChildThriftPath<::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AggregatePort>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::LinkFaultStatus, + ::std::vector<::facebook::fboss::cfg::AggregatePort>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::AggregatePort>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AggregatePort>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::AggregatePort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + + +template +class ChildThriftPath<::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LinkFaultStatus>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::LinkFaultStatus, + ::facebook::fboss::cfg::IpInIpTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LinkFaultStatus>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::IpInIpTunnel>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -13646,35 +13859,70 @@ class ChildThriftPath<::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>>, +std::pair>>, +std::pair>>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, + std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, + std::pair, Child<::facebook::fboss::cfg::IpTunnelMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IpTunnelMode>>>, + std::pair, Child<::facebook::fboss::cfg::TunnelTerminationType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TunnelTerminationType>>>, + std::pair, Child<::facebook::fboss::cfg::TunnelType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::TunnelType>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(localFault, 1); - STRUCT_CHILD_GETTERS(remoteFault, 2); - STRUCT_CHILD_GETTERS(highCrcErrorRateLive, 3); - STRUCT_CHILD_GETTERS(highCrcErrorRateChangedCount, 4); + STRUCT_CHILD_GETTERS(ipInIpTunnelId, 1); + STRUCT_CHILD_GETTERS(underlayIntfID, 2); + STRUCT_CHILD_GETTERS(dstIp, 3); + STRUCT_CHILD_GETTERS(srcIp, 4); + STRUCT_CHILD_GETTERS(dstIpMask, 5); + STRUCT_CHILD_GETTERS(srcIpMask, 6); + STRUCT_CHILD_GETTERS(ttlMode, 7); + STRUCT_CHILD_GETTERS(dscpMode, 8); + STRUCT_CHILD_GETTERS(ecnMode, 9); + STRUCT_CHILD_GETTERS(tunnelTermType, 10); + STRUCT_CHILD_GETTERS(tunnelType, 11); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return localFault(); } - else if constexpr (__id == 2) { return remoteFault(); } - else if constexpr (__id == 3) { return highCrcErrorRateLive(); } - else if constexpr (__id == 4) { return highCrcErrorRateChangedCount(); } + if constexpr (__id == 1) { return ipInIpTunnelId(); } + else if constexpr (__id == 2) { return underlayIntfID(); } + else if constexpr (__id == 3) { return dstIp(); } + else if constexpr (__id == 4) { return srcIp(); } + else if constexpr (__id == 5) { return dstIpMask(); } + else if constexpr (__id == 6) { return srcIpMask(); } + else if constexpr (__id == 7) { return ttlMode(); } + else if constexpr (__id == 8) { return dscpMode(); } + else if constexpr (__id == 9) { return ecnMode(); } + else if constexpr (__id == 10) { return tunnelTermType(); } + else if constexpr (__id == 11) { return tunnelType(); } } template @@ -13683,21 +13931,42 @@ std::pair +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::DsfNode, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int64_t); +}; + template -class ChildThriftPath<::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::LinearQueueCongestionDetection, + ::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LinearQueueCongestionDetection>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::LinearQueueCongestionDetection, + ::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LinearQueueCongestionDetection>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -13708,30 +13977,25 @@ class ChildThriftPath<::facebook::fboss::cfg::LinearQueueCongestionDetection, :: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(minimumLength, 1); - STRUCT_CHILD_GETTERS(maximumLength, 2); - STRUCT_CHILD_GETTERS(probability, 3); + STRUCT_CHILD_GETTERS(ip, 1); + STRUCT_CHILD_GETTERS(port, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return minimumLength(); } - else if constexpr (__id == 2) { return maximumLength(); } - else if constexpr (__id == 3) { return probability(); } + if constexpr (__id == 1) { return ip(); } + else if constexpr (__id == 2) { return port(); } } template @@ -13740,78 +14004,42 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MirrorTunnel, + ::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorTunnel>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MirrorTunnel, + ::std::vector<::facebook::fboss::cfg::SflowCollector>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorTunnel>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::SflowCollector>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::SflowCollector, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(greTunnel, 1); - STRUCT_CHILD_GETTERS(sflowTunnel, 2); - STRUCT_CHILD_GETTERS(srcIp, 3); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return greTunnel(); } - else if constexpr (__id == 2) { return sflowTunnel(); } - else if constexpr (__id == 3) { return srcIp(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Mirror, + ::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Mirror, + ::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Range64>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -13822,40 +14050,25 @@ class ChildThriftPath<::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::F ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(destination, 2); - STRUCT_CHILD_GETTERS(dscp, 3); - STRUCT_CHILD_GETTERS(truncate, 4); - STRUCT_CHILD_GETTERS(samplingRate, 5); + STRUCT_CHILD_GETTERS(minimum, 1); + STRUCT_CHILD_GETTERS(maximum, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return destination(); } - else if constexpr (__id == 3) { return dscp(); } - else if constexpr (__id == 4) { return truncate(); } - else if constexpr (__id == 5) { return samplingRate(); } + if constexpr (__id == 1) { return minimum(); } + else if constexpr (__id == 2) { return maximum(); } } template @@ -13866,21 +14079,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::MediaLaneSettings, + ::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CPUTrafficPolicyConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::MediaLaneSettings, + ::facebook::fboss::cfg::CPUTrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CPUTrafficPolicyConfig>, Parent>; - using strings = ::facebook::fboss::transceiver_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -13889,40 +14102,30 @@ class ChildThriftPath<::facebook::fboss::MediaLaneSettings, ::facebook::fboss::f ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficPolicyConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(lane, 1); - STRUCT_CHILD_GETTERS(txDisable, 2); - STRUCT_CHILD_GETTERS(txSquelch, 3); - STRUCT_CHILD_GETTERS(txAdaptiveEqControl, 4); - STRUCT_CHILD_GETTERS(txSquelchForce, 5); + STRUCT_CHILD_GETTERS(trafficPolicy, 1); + STRUCT_CHILD_GETTERS(rxReasonToCPUQueue, 2); + STRUCT_CHILD_GETTERS(rxReasonToQueueOrderedList, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return lane(); } - else if constexpr (__id == 2) { return txDisable(); } - else if constexpr (__id == 3) { return txSquelch(); } - else if constexpr (__id == 4) { return txAdaptiveEqControl(); } - else if constexpr (__id == 5) { return txSquelchForce(); } + if constexpr (__id == 1) { return trafficPolicy(); } + else if constexpr (__id == 2) { return rxReasonToCPUQueue(); } + else if constexpr (__id == 3) { return rxReasonToQueueOrderedList(); } } template @@ -13933,19 +14136,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SystemPortRanges, + ::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SystemPortRanges>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::NdpConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SystemPortRanges, + ::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SystemPortRanges>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::NdpConfig>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -13956,64 +14159,78 @@ class ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(systemPortRanges, 1); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return systemPortRanges(); } - } - - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::CounterType>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::CounterType>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>>, - Parent>; - using Child = Path<::facebook::fboss::cfg::CounterType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>, Self>; - using Self::Self; + STRUCT_CHILD_GETTERS(routerAdvertisementSeconds, 1); + STRUCT_CHILD_GETTERS(curHopLimit, 2); + STRUCT_CHILD_GETTERS(routerLifetime, 3); + STRUCT_CHILD_GETTERS(prefixValidLifetimeSeconds, 4); + STRUCT_CHILD_GETTERS(prefixPreferredLifetimeSeconds, 5); + STRUCT_CHILD_GETTERS(routerAdvertisementManagedBit, 6); + STRUCT_CHILD_GETTERS(routerAdvertisementOtherBit, 7); + STRUCT_CHILD_GETTERS(routerAddress, 8); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return routerAdvertisementSeconds(); } + else if constexpr (__id == 2) { return curHopLimit(); } + else if constexpr (__id == 3) { return routerLifetime(); } + else if constexpr (__id == 4) { return prefixValidLifetimeSeconds(); } + else if constexpr (__id == 5) { return prefixPreferredLifetimeSeconds(); } + else if constexpr (__id == 6) { return routerAdvertisementManagedBit(); } + else if constexpr (__id == 7) { return routerAdvertisementOtherBit(); } + else if constexpr (__id == 8) { return routerAddress(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::ExactMatchTableConfig, + ::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::ExactMatchTableConfig, + ::facebook::fboss::cfg::QosPolicy, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosPolicy>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -14025,24 +14242,29 @@ class ChildThriftPath<::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook: Self >; using Children = fatal::tuple>, -std::pair>>; +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::QosRule>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template using NameToId = fatal::tuple>, -std::pair>>::template type_of; +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(dstPrefixLength, 2); + STRUCT_CHILD_GETTERS(rules, 2); + STRUCT_CHILD_GETTERS(qosMap, 3); template auto operator()(const std::integral_constant&) { if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return dstPrefixLength(); } + else if constexpr (__id == 2) { return rules(); } + else if constexpr (__id == 3) { return qosMap(); } } template @@ -14051,65 +14273,23 @@ std::pair -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::string); -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::NextHopThrift>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::NextHopThrift>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - template -class ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::PortQueueRate, + ::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::PortQueueRate>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::PortQueueRate, + ::facebook::fboss::state::MirrorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::PortQueueRate>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MirrorFields>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -14118,25 +14298,85 @@ class ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::Range, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Range, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::network::thrift::BinaryAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::facebook::fboss::state::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(pktsPerSec, 1); - STRUCT_CHILD_GETTERS(kbitsPerSec, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(dscp, 3); + STRUCT_CHILD_GETTERS(truncate, 4); + STRUCT_CHILD_GETTERS(configHasEgressPort, 5); + STRUCT_CHILD_GETTERS(egressPort, 6); + STRUCT_CHILD_GETTERS(destinationIp, 7); + STRUCT_CHILD_GETTERS(srcIp, 8); + STRUCT_CHILD_GETTERS(udpSrcPort, 9); + STRUCT_CHILD_GETTERS(udpDstPort, 10); + STRUCT_CHILD_GETTERS(tunnel, 11); + STRUCT_CHILD_GETTERS(isResolved, 12); + STRUCT_CHILD_GETTERS(switchId, 13); + STRUCT_CHILD_GETTERS(egressPortDesc, 14); + STRUCT_CHILD_GETTERS(samplingRate, 15); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return pktsPerSec(); } - else if constexpr (__id == 2) { return kbitsPerSec(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 3) { return dscp(); } + else if constexpr (__id == 4) { return truncate(); } + else if constexpr (__id == 5) { return configHasEgressPort(); } + else if constexpr (__id == 6) { return egressPort(); } + else if constexpr (__id == 7) { return destinationIp(); } + else if constexpr (__id == 8) { return srcIp(); } + else if constexpr (__id == 9) { return udpSrcPort(); } + else if constexpr (__id == 10) { return udpDstPort(); } + else if constexpr (__id == 11) { return tunnel(); } + else if constexpr (__id == 12) { return isResolved(); } + else if constexpr (__id == 13) { return switchId(); } + else if constexpr (__id == 14) { return egressPortDesc(); } + else if constexpr (__id == 15) { return samplingRate(); } } template @@ -14145,65 +14385,23 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::DscpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::cfg::DscpQosMap>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::cfg::DscpQosMap>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - -template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; - template -class ChildThriftPath<::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::LaneMap, + ::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::LaneMap, + ::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -14212,25 +14410,25 @@ class ChildThriftPath<::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + using Children = fatal::tuple>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::PacketRxReason, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(rx, 1); - STRUCT_CHILD_GETTERS(tx, 2); + STRUCT_CHILD_GETTERS(rxReason, 1); + STRUCT_CHILD_GETTERS(queueId, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return rx(); } - else if constexpr (__id == 2) { return tx(); } + if constexpr (__id == 1) { return rxReason(); } + else if constexpr (__id == 2) { return queueId(); } } template @@ -14241,21 +14439,21 @@ std::pair>>:: template -class ChildThriftPath<::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::DscpQosMap, + ::facebook::fboss::state::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MatchAction>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::DscpQosMap, + ::facebook::fboss::state::MatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MatchAction>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -14264,30 +14462,70 @@ class ChildThriftPath<::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::SendToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::TrafficCounter, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::ToCpuAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ToCpuAction>>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::MacsecFlowAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::RedirectToNextHopAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::SetTc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::UserDefinedTrapAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::FlowletAction, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::FlowletAction>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(internalTrafficClass, 1); - STRUCT_CHILD_GETTERS(fromDscpToTrafficClass, 2); - STRUCT_CHILD_GETTERS(fromTrafficClassToDscp, 3); + STRUCT_CHILD_GETTERS(sendToQueue, 1); + STRUCT_CHILD_GETTERS(trafficCounter, 2); + STRUCT_CHILD_GETTERS(setDscp, 3); + STRUCT_CHILD_GETTERS(ingressMirror, 4); + STRUCT_CHILD_GETTERS(egressMirror, 5); + STRUCT_CHILD_GETTERS(toCpuAction, 6); + STRUCT_CHILD_GETTERS(macsecFlow, 7); + STRUCT_CHILD_GETTERS(redirectToNextHop, 8); + STRUCT_CHILD_GETTERS(setTc, 9); + STRUCT_CHILD_GETTERS(userDefinedTrap, 10); + STRUCT_CHILD_GETTERS(flowletAction, 11); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return internalTrafficClass(); } - else if constexpr (__id == 2) { return fromDscpToTrafficClass(); } - else if constexpr (__id == 3) { return fromTrafficClassToDscp(); } + if constexpr (__id == 1) { return sendToQueue(); } + else if constexpr (__id == 2) { return trafficCounter(); } + else if constexpr (__id == 3) { return setDscp(); } + else if constexpr (__id == 4) { return ingressMirror(); } + else if constexpr (__id == 5) { return egressMirror(); } + else if constexpr (__id == 6) { return toCpuAction(); } + else if constexpr (__id == 7) { return macsecFlow(); } + else if constexpr (__id == 8) { return redirectToNextHop(); } + else if constexpr (__id == 9) { return setTc(); } + else if constexpr (__id == 10) { return userDefinedTrap(); } + else if constexpr (__id == 11) { return flowletAction(); } } template @@ -14297,115 +14535,64 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, + ::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, + ::std::vector<::facebook::fboss::cfg::PacketRxReasonToQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::PacketRxReasonToQueue>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::PacketRxReasonToQueue, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; - template -class ChildThriftPath<::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::AclTable, + ::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::TcvrState>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::AclTable, + ::std::map<::std::int32_t, ::facebook::fboss::TcvrState>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::TcvrState>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableActionType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::TcvrState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(priority, 2); - STRUCT_CHILD_GETTERS(aclEntries, 3); - STRUCT_CHILD_GETTERS(actionTypes, 4); - STRUCT_CHILD_GETTERS(qualifiers, 5); - STRUCT_CHILD_GETTERS(udfGroups, 6); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return priority(); } - else if constexpr (__id == 3) { return aclEntries(); } - else if constexpr (__id == 4) { return actionTypes(); } - else if constexpr (__id == 5) { return qualifiers(); } - else if constexpr (__id == 6) { return udfGroups(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::cfg::ExpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::ExpQosMap, + ::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AsicConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::ExpQosMap, + ::facebook::fboss::cfg::AsicConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AsicConfig>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::cfg::asic_config_v2_tags::strings; template using Child = Path< ChildType, @@ -14414,30 +14601,25 @@ class ChildThriftPath<::facebook::fboss::cfg::ExpQosMap, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::AsicConfigEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::AsicConfigEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(internalTrafficClass, 1); - STRUCT_CHILD_GETTERS(fromExpToTrafficClass, 2); - STRUCT_CHILD_GETTERS(fromTrafficClassToExp, 3); + STRUCT_CHILD_GETTERS(common, 1); + STRUCT_CHILD_GETTERS(npuEntries, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return internalTrafficClass(); } - else if constexpr (__id == 2) { return fromExpToTrafficClass(); } - else if constexpr (__id == 3) { return fromTrafficClassToExp(); } + if constexpr (__id == 1) { return common(); } + else if constexpr (__id == 2) { return npuEntries(); } } template @@ -14447,85 +14629,132 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, + ::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>, ::apache::thrift::type::i16_t>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, + ::std::map<::facebook::fboss::cfg::PacketRxReason, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::PacketRxReason>, ::apache::thrift::type::i16_t>, Parent>; - using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PacketRxReason); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, + ::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::FirmwarePair>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, + ::std::vector<::facebook::fboss::FirmwarePair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::FirmwarePair>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::FirmwarePair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::std::int32_t>, + ::std::set<::facebook::fboss::cfg::IPv4Field>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>>, + Parent> { + public: + using Self = Path< + ::std::set<::facebook::fboss::cfg::IPv4Field>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::set<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::set<::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>>, + Parent>; + using Child = Path<::facebook::fboss::cfg::IPv4Field, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::IPv4Field>, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::IPv4Field); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::Label, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::Label, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::Label>, Parent> { public: using Self = Path< - ::std::vector<::std::int32_t>, + ::facebook::fboss::state::Label, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::Label>, Parent>; - using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(value, 1); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return value(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::L4PortRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::L4PortRange, + ::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::L4PortRange>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CmisOverrides>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::L4PortRange, + ::facebook::fboss::cfg::CmisOverrides, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::L4PortRange>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::CmisOverrides>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::cfg::qsfp_service_config_tags::strings; template using Child = Path< ChildType, @@ -14534,30 +14763,20 @@ class ChildThriftPath<::facebook::fboss::cfg::L4PortRange, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::RxEqualizerSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(min, 1); - STRUCT_CHILD_GETTERS(max, 2); - STRUCT_CHILD_GETTERS(invert, 3); + STRUCT_CHILD_GETTERS(rxEqualizerSettings, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return min(); } - else if constexpr (__id == 2) { return max(); } - else if constexpr (__id == 3) { return invert(); } + if constexpr (__id == 1) { return rxEqualizerSettings(); } } template @@ -14568,19 +14787,19 @@ std::pair template -class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::StaticMplsRouteWithNextHops, + ::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::GreTunnel>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::StaticMplsRouteWithNextHops, + ::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::GreTunnel>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -14591,25 +14810,25 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::fac ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Ttl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ingressLabel, 1); - STRUCT_CHILD_GETTERS(nexthops, 2); + STRUCT_CHILD_GETTERS(ip, 1); + STRUCT_CHILD_GETTERS(ttl, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ingressLabel(); } - else if constexpr (__id == 2) { return nexthops(); } + if constexpr (__id == 1) { return ip(); } + else if constexpr (__id == 2) { return ttl(); } } template @@ -14620,21 +14839,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::AclTableGroupFields, + ::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LinkFaultStatus>, Parent> { public: using Self = Path< - ::facebook::fboss::state::AclTableGroupFields, + ::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LinkFaultStatus>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -14643,30 +14862,35 @@ class ChildThriftPath<::facebook::fboss::state::AclTableGroupFields, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::AclStage, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(stage, 1); - STRUCT_CHILD_GETTERS(name, 2); - STRUCT_CHILD_GETTERS(aclTableMap, 3); + STRUCT_CHILD_GETTERS(localFault, 1); + STRUCT_CHILD_GETTERS(remoteFault, 2); + STRUCT_CHILD_GETTERS(highCrcErrorRateLive, 3); + STRUCT_CHILD_GETTERS(highCrcErrorRateChangedCount, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return stage(); } - else if constexpr (__id == 2) { return name(); } - else if constexpr (__id == 3) { return aclTableMap(); } + if constexpr (__id == 1) { return localFault(); } + else if constexpr (__id == 2) { return remoteFault(); } + else if constexpr (__id == 3) { return highCrcErrorRateLive(); } + else if constexpr (__id == 4) { return highCrcErrorRateChangedCount(); } } template @@ -14675,63 +14899,135 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::PortPgFields>, + ::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::PortPgFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LinearQueueCongestionDetection>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::PortPgFields>, + ::facebook::fboss::cfg::LinearQueueCongestionDetection, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::PortPgFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::LinearQueueCongestionDetection>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::PortPgFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(minimumLength, 1); + STRUCT_CHILD_GETTERS(maximumLength, 2); + STRUCT_CHILD_GETTERS(probability, 3); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return minimumLength(); } + else if constexpr (__id == 2) { return maximumLength(); } + else if constexpr (__id == 3) { return probability(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; + template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, + ::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorTunnel>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, + ::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorTunnel>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::GreTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::SflowTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(greTunnel, 1); + STRUCT_CHILD_GETTERS(sflowTunnel, 2); + STRUCT_CHILD_GETTERS(srcIp, 3); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return greTunnel(); } + else if constexpr (__id == 2) { return sflowTunnel(); } + else if constexpr (__id == 3) { return srcIp(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::StaticMplsRouteNoNextHops, + ::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::StaticMplsRouteNoNextHops, + ::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -14742,20 +15038,40 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::faceb ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ingressLabel, 1); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(destination, 2); + STRUCT_CHILD_GETTERS(dscp, 3); + STRUCT_CHILD_GETTERS(truncate, 4); + STRUCT_CHILD_GETTERS(samplingRate, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ingressLabel(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return destination(); } + else if constexpr (__id == 3) { return dscp(); } + else if constexpr (__id == 4) { return truncate(); } + else if constexpr (__id == 5) { return samplingRate(); } } template @@ -14766,21 +15082,21 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::faceb template -class ChildThriftPath<::facebook::fboss::VendorConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::VendorConfig, + ::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::VendorConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::VendorConfig, + ::facebook::fboss::cfg::ExactMatchTableConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::VendorConfig>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExactMatchTableConfig>, Parent>; - using strings = ::facebook::fboss::transceiver_validation_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -14789,25 +15105,25 @@ class ChildThriftPath<::facebook::fboss::VendorConfig, ::facebook::fboss::fsdb:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(vendorName, 1); - STRUCT_CHILD_GETTERS(partNumberToTransceiverAttributes, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(dstPrefixLength, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vendorName(); } - else if constexpr (__id == 2) { return partNumberToTransceiverAttributes(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return dstPrefixLength(); } } template @@ -14817,64 +15133,43 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::PortQueueFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::PortQueueFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::PortQueueFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - -template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::AclEntry>, + ::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclEntry>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::AclEntry>, + ::std::map<::std::string, ::facebook::fboss::cfg::UdfPacketMatcher>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclEntry>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::UdfPacketMatcher>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::AclEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::UdfPacketMatcher, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::std::string); }; template -class ChildThriftPath<::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Interface, + ::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Interface, + ::facebook::fboss::MediaLaneSettings, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>, + ::apache::thrift::type::struct_t<::facebook::fboss::MediaLaneSettings>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::transceiver_tags::strings; template using Child = Path< ChildType, @@ -14883,95 +15178,40 @@ class ChildThriftPath<::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child<::facebook::fboss::cfg::InterfaceType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::InterfaceType>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>>; + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(intfID, 1); - STRUCT_CHILD_GETTERS(routerID, 2); - STRUCT_CHILD_GETTERS(vlanID, 3); - STRUCT_CHILD_GETTERS(name, 4); - STRUCT_CHILD_GETTERS(mac, 5); - STRUCT_CHILD_GETTERS(ipAddresses, 6); - STRUCT_CHILD_GETTERS(ndp, 7); - STRUCT_CHILD_GETTERS(mtu, 8); - STRUCT_CHILD_GETTERS(isVirtual, 9); - STRUCT_CHILD_GETTERS(isStateSyncDisabled, 10); - STRUCT_CHILD_GETTERS(type, 11); - STRUCT_CHILD_GETTERS(dhcpRelayAddressV4, 12); - STRUCT_CHILD_GETTERS(dhcpRelayAddressV6, 13); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 14); - STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 15); - STRUCT_CHILD_GETTERS(scope, 16); + STRUCT_CHILD_GETTERS(lane, 1); + STRUCT_CHILD_GETTERS(txDisable, 2); + STRUCT_CHILD_GETTERS(txSquelch, 3); + STRUCT_CHILD_GETTERS(txAdaptiveEqControl, 4); + STRUCT_CHILD_GETTERS(txSquelchForce, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return intfID(); } - else if constexpr (__id == 2) { return routerID(); } - else if constexpr (__id == 3) { return vlanID(); } - else if constexpr (__id == 4) { return name(); } - else if constexpr (__id == 5) { return mac(); } - else if constexpr (__id == 6) { return ipAddresses(); } - else if constexpr (__id == 7) { return ndp(); } - else if constexpr (__id == 8) { return mtu(); } - else if constexpr (__id == 9) { return isVirtual(); } - else if constexpr (__id == 10) { return isStateSyncDisabled(); } - else if constexpr (__id == 11) { return type(); } - else if constexpr (__id == 12) { return dhcpRelayAddressV4(); } - else if constexpr (__id == 13) { return dhcpRelayAddressV6(); } - else if constexpr (__id == 14) { return dhcpRelayOverridesV4(); } - else if constexpr (__id == 15) { return dhcpRelayOverridesV6(); } - else if constexpr (__id == 16) { return scope(); } + if constexpr (__id == 1) { return lane(); } + else if constexpr (__id == 2) { return txDisable(); } + else if constexpr (__id == 3) { return txSquelch(); } + else if constexpr (__id == 4) { return txAdaptiveEqControl(); } + else if constexpr (__id == 5) { return txSquelchForce(); } } template @@ -14980,64 +15220,90 @@ std::pair } }; + template -class ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::std::int64_t>, + ::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::i64_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SystemPortRanges>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::std::int64_t>, + ::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::i64_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SystemPortRanges>, Parent>; - using Child = Path<::std::int64_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::Range64>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(systemPortRanges, 1); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return systemPortRanges(); } + } - CONTAINER_CHILD_GETTERS(::std::int16_t); + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int32_t, ::std::int32_t>, + ::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>>, Parent> { public: using Self = Path< - ::std::map<::std::int32_t, ::std::int32_t>, + ::std::vector<::facebook::fboss::cfg::CounterType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, + ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>>, Parent>; - using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; + using Child = Path<::facebook::fboss::cfg::CounterType, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::CounterType>, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, + ::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>>, Parent> { public: using Self = Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, + ::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::NextHopThrift>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::InterfaceFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::NextHopThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -15045,19 +15311,19 @@ class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::Inter template -class ChildThriftPath<::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Port, + ::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::PortQueueRate>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Port, + ::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::PortQueueRate>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -15068,195 +15334,92 @@ class ChildThriftPath<::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::Fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::PortState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortState>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::ParserType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ParserType>>>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::PortSpeed, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortSpeed>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::facebook::fboss::cfg::PortLoopbackMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortLoopbackMode>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::SampleDestination, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SampleDestination>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortProfileID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortProfileID>>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortType>>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDrainState>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::Range, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::Range, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(logicalID, 1); - STRUCT_CHILD_GETTERS(state, 2); - STRUCT_CHILD_GETTERS(minFrameSize, 3); - STRUCT_CHILD_GETTERS(maxFrameSize, 4); - STRUCT_CHILD_GETTERS(parserType, 5); - STRUCT_CHILD_GETTERS(routable, 6); - STRUCT_CHILD_GETTERS(ingressVlan, 7); - STRUCT_CHILD_GETTERS(speed, 8); - STRUCT_CHILD_GETTERS(name, 9); - STRUCT_CHILD_GETTERS(description, 10); - STRUCT_CHILD_GETTERS(queues_DEPRECATED, 12); - STRUCT_CHILD_GETTERS(pause, 13); - STRUCT_CHILD_GETTERS(sFlowIngressRate, 14); - STRUCT_CHILD_GETTERS(sFlowEgressRate, 15); - STRUCT_CHILD_GETTERS(loopbackMode, 17); - STRUCT_CHILD_GETTERS(ingressMirror, 18); - STRUCT_CHILD_GETTERS(egressMirror, 19); - STRUCT_CHILD_GETTERS(expectedLLDPValues, 20); - STRUCT_CHILD_GETTERS(sampleDest, 21); - STRUCT_CHILD_GETTERS(portQueueConfigName, 22); - STRUCT_CHILD_GETTERS(lookupClasses, 23); - STRUCT_CHILD_GETTERS(profileID, 24); - STRUCT_CHILD_GETTERS(pfc, 25); - STRUCT_CHILD_GETTERS(counterTags, 26); - STRUCT_CHILD_GETTERS(portType, 27); - STRUCT_CHILD_GETTERS(expectedNeighborReachability, 28); - STRUCT_CHILD_GETTERS(drainState, 29); - STRUCT_CHILD_GETTERS(flowletConfigName, 30); - STRUCT_CHILD_GETTERS(scope, 31); - STRUCT_CHILD_GETTERS(portVoqConfigName, 32); - STRUCT_CHILD_GETTERS(conditionalEntropyRehash, 33); + STRUCT_CHILD_GETTERS(pktsPerSec, 1); + STRUCT_CHILD_GETTERS(kbitsPerSec, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return logicalID(); } - else if constexpr (__id == 2) { return state(); } - else if constexpr (__id == 3) { return minFrameSize(); } - else if constexpr (__id == 4) { return maxFrameSize(); } - else if constexpr (__id == 5) { return parserType(); } - else if constexpr (__id == 6) { return routable(); } - else if constexpr (__id == 7) { return ingressVlan(); } - else if constexpr (__id == 8) { return speed(); } - else if constexpr (__id == 9) { return name(); } - else if constexpr (__id == 10) { return description(); } - else if constexpr (__id == 12) { return queues_DEPRECATED(); } - else if constexpr (__id == 13) { return pause(); } - else if constexpr (__id == 14) { return sFlowIngressRate(); } - else if constexpr (__id == 15) { return sFlowEgressRate(); } - else if constexpr (__id == 17) { return loopbackMode(); } - else if constexpr (__id == 18) { return ingressMirror(); } - else if constexpr (__id == 19) { return egressMirror(); } - else if constexpr (__id == 20) { return expectedLLDPValues(); } - else if constexpr (__id == 21) { return sampleDest(); } - else if constexpr (__id == 22) { return portQueueConfigName(); } - else if constexpr (__id == 23) { return lookupClasses(); } - else if constexpr (__id == 24) { return profileID(); } - else if constexpr (__id == 25) { return pfc(); } - else if constexpr (__id == 26) { return counterTags(); } - else if constexpr (__id == 27) { return portType(); } - else if constexpr (__id == 28) { return expectedNeighborReachability(); } - else if constexpr (__id == 29) { return drainState(); } - else if constexpr (__id == 30) { return flowletConfigName(); } - else if constexpr (__id == 31) { return scope(); } - else if constexpr (__id == 32) { return portVoqConfigName(); } - else if constexpr (__id == 33) { return conditionalEntropyRehash(); } + if constexpr (__id == 1) { return pktsPerSec(); } + else if constexpr (__id == 2) { return kbitsPerSec(); } } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::DscpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::DscpQosMap>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::DscpQosMap>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::StaticIp2MplsRoute, + ::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneMap>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::StaticIp2MplsRoute, + ::facebook::fboss::phy::LaneMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::LaneMap>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -15265,30 +15428,25 @@ class ChildThriftPath<::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fb ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(routerID, 1); - STRUCT_CHILD_GETTERS(prefix, 2); - STRUCT_CHILD_GETTERS(nexthops, 3); + STRUCT_CHILD_GETTERS(rx, 1); + STRUCT_CHILD_GETTERS(tx, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return routerID(); } - else if constexpr (__id == 2) { return prefix(); } - else if constexpr (__id == 3) { return nexthops(); } + if constexpr (__id == 1) { return rx(); } + else if constexpr (__id == 2) { return tx(); } } template @@ -15299,19 +15457,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SetDscpMatchAction, + ::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetDscpMatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SetDscpMatchAction, + ::facebook::fboss::cfg::DscpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SetDscpMatchAction>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DscpQosMap>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -15322,20 +15480,30 @@ class ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fb ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(dscpValue, 1); + STRUCT_CHILD_GETTERS(internalTrafficClass, 1); + STRUCT_CHILD_GETTERS(fromDscpToTrafficClass, 2); + STRUCT_CHILD_GETTERS(fromTrafficClassToDscp, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return dscpValue(); } + if constexpr (__id == 1) { return internalTrafficClass(); } + else if constexpr (__id == 2) { return fromDscpToTrafficClass(); } + else if constexpr (__id == 3) { return fromTrafficClassToDscp(); } } template @@ -15345,85 +15513,43 @@ class ChildThriftPath<::facebook::fboss::cfg::SetDscpMatchAction, ::facebook::fb }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::MacAndVlan>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::MacAndVlan>, + ::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::MacAndVlan>, + ::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::MacAndVlan>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::ActiveQueueManagement>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::MacAndVlan, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::ActiveQueueManagement, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; -template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::cfg::ChipConfig>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::variant>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::union_t<::facebook::fboss::cfg::ChipConfig>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::ChipConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int16_t); -}; - -template -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::cfg::SwitchInfo>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int64_t); -}; - template -class ChildThriftPath<::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::AclTableFields, + ::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>, Parent> { public: using Self = Path< - ::facebook::fboss::state::AclTableFields, + ::facebook::fboss::cfg::AclTable, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclTable>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -15432,22 +15558,22 @@ class ChildThriftPath<::facebook::fboss::state::AclTableFields, ::facebook::fbos ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + using Children = fatal::tuple>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableActionType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, + using NameToId = fatal::tuple>, std::pair>, -std::pair>, +std::pair>, std::pair>, std::pair>, std::pair>>::template type_of; @@ -15456,88 +15582,223 @@ std::pair; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(name, 1); STRUCT_CHILD_GETTERS(priority, 2); - STRUCT_CHILD_GETTERS(aclMap, 3); + STRUCT_CHILD_GETTERS(aclEntries, 3); STRUCT_CHILD_GETTERS(actionTypes, 4); STRUCT_CHILD_GETTERS(qualifiers, 5); STRUCT_CHILD_GETTERS(udfGroups, 6); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } + if constexpr (__id == 1) { return name(); } else if constexpr (__id == 2) { return priority(); } - else if constexpr (__id == 3) { return aclMap(); } + else if constexpr (__id == 3) { return aclEntries(); } else if constexpr (__id == 4) { return actionTypes(); } else if constexpr (__id == 5) { return qualifiers(); } else if constexpr (__id == 6) { return udfGroups(); } } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + + +template +class ChildThriftPath<::facebook::fboss::cfg::ExpQosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::cfg::ExpQosMap, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::cfg::ExpQosMap, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::ExpQosMap>, + Parent>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int8_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int8_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::byte_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(internalTrafficClass, 1); + STRUCT_CHILD_GETTERS(fromExpToTrafficClass, 2); + STRUCT_CHILD_GETTERS(fromTrafficClassToExp, 3); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return internalTrafficClass(); } + else if constexpr (__id == 2) { return fromExpToTrafficClass(); } + else if constexpr (__id == 3) { return fromTrafficClassToExp(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::FibContainerFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, + ::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>, Parent> { public: using Self = Path< - ::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, + ::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::string>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::string_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::ParticipantInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::string, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::std::string); }; + template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, + ::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, + ::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(scalingFactor, 1); + STRUCT_CHILD_GETTERS(loadWeight, 2); + STRUCT_CHILD_GETTERS(queueWeight, 3); - CONTAINER_CHILD_GETTERS(::std::int16_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return scalingFactor(); } + else if constexpr (__id == 2) { return loadWeight(); } + else if constexpr (__id == 3) { return queueWeight(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::state::ParticipantInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::SelfHealingEcmpLagConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::ParticipantInfo, + ::facebook::fboss::cfg::SelfHealingEcmpLagConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SelfHealingEcmpLagConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::state::ParticipantInfo, + ::facebook::fboss::cfg::SelfHealingEcmpLagConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SelfHealingEcmpLagConfig>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -15546,45 +15807,30 @@ class ChildThriftPath<::facebook::fboss::state::ParticipantInfo, ::facebook::fbo ChildTag, Self >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::state::LacpState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::LacpState>>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(systemPriority, 1); - STRUCT_CHILD_GETTERS(systemID, 2); - STRUCT_CHILD_GETTERS(key, 3); - STRUCT_CHILD_GETTERS(portPriority, 4); - STRUCT_CHILD_GETTERS(port, 5); - STRUCT_CHILD_GETTERS(state, 6); + STRUCT_CHILD_GETTERS(shelSrcIp, 1); + STRUCT_CHILD_GETTERS(shelDstIp, 2); + STRUCT_CHILD_GETTERS(shelPeriodicIntervalMS, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return systemPriority(); } - else if constexpr (__id == 2) { return systemID(); } - else if constexpr (__id == 3) { return key(); } - else if constexpr (__id == 4) { return portPriority(); } - else if constexpr (__id == 5) { return port(); } - else if constexpr (__id == 6) { return state(); } + if constexpr (__id == 1) { return shelSrcIp(); } + else if constexpr (__id == 2) { return shelDstIp(); } + else if constexpr (__id == 3) { return shelPeriodicIntervalMS(); } } template @@ -15594,42 +15840,42 @@ std::pair> }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, + ::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, + ::std::vector<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::TeFlowEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::string); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::CabledTestPair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::CabledTestPair>, + ::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::CabledTestPair>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::i32_t>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::CabledTestPair>, + ::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::CabledTestPair>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::i32_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::CabledTestPair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -15637,19 +15883,19 @@ class ChildThriftPath<::std::vector<::facebook::fboss::cfg::CabledTestPair>, ::f template -class ChildThriftPath<::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::L4PortRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MirrorDestination, + ::facebook::fboss::cfg::L4PortRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorDestination>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::L4PortRange>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::MirrorDestination, + ::facebook::fboss::cfg::L4PortRange, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorDestination>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::L4PortRange>, Parent>; using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template @@ -15660,30 +15906,30 @@ class ChildThriftPath<::facebook::fboss::cfg::MirrorDestination, ::facebook::fbo ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(egressPort, 1); - STRUCT_CHILD_GETTERS(ip, 2); - STRUCT_CHILD_GETTERS(tunnel, 3); + STRUCT_CHILD_GETTERS(min, 1); + STRUCT_CHILD_GETTERS(max, 2); + STRUCT_CHILD_GETTERS(invert, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return egressPort(); } - else if constexpr (__id == 2) { return ip(); } - else if constexpr (__id == 3) { return tunnel(); } + if constexpr (__id == 1) { return min(); } + else if constexpr (__id == 2) { return max(); } + else if constexpr (__id == 3) { return invert(); } } template @@ -15692,170 +15938,221 @@ std::pair } }; -template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; template -class ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::std::int16_t>, + ::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::i16_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, Parent> { public: using Self = Path< - ::std::vector<::std::int16_t>, + ::facebook::fboss::cfg::StaticMplsRouteWithNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, - ::apache::thrift::type::list<::apache::thrift::type::i16_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteWithNextHops>, Parent>; - using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>>::template type_of; -template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(ingressLabel, 1); + STRUCT_CHILD_GETTERS(nexthops, 2); - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return ingressLabel(); } + else if constexpr (__id == 2) { return nexthops(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; + template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, + ::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, + ::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::AclStage, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(stage, 1); + STRUCT_CHILD_GETTERS(name, 2); + STRUCT_CHILD_GETTERS(aclTableMap, 3); - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return stage(); } + else if constexpr (__id == 2) { return name(); } + else if constexpr (__id == 3) { return aclTableMap(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, + ::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::PortPgFields>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, + ::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::PortPgFields>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::PortPgFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, + ::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, + ::std::vector<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; + template -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, + ::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, + ::facebook::fboss::cfg::StaticMplsRouteNoNextHops, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticMplsRouteNoNextHops>, Parent>; - using Child = ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + template + using NameToId = fatal::tuple>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(ingressLabel, 1); - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return ingressLabel(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::facebook::fboss::state::AclTtl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::VendorConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::AclTtl, + ::facebook::fboss::VendorConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTtl>, + ::apache::thrift::type::struct_t<::facebook::fboss::VendorConfig>, Parent> { public: using Self = Path< - ::facebook::fboss::state::AclTtl, + ::facebook::fboss::VendorConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTtl>, + ::apache::thrift::type::struct_t<::facebook::fboss::VendorConfig>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::transceiver_validation_tags::strings; template using Child = Path< ChildType, @@ -15864,25 +16161,25 @@ class ChildThriftPath<::facebook::fboss::state::AclTtl, ::facebook::fboss::fsdb: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(value, 1); - STRUCT_CHILD_GETTERS(mask, 2); + STRUCT_CHILD_GETTERS(vendorName, 1); + STRUCT_CHILD_GETTERS(partNumberToTransceiverAttributes, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return value(); } - else if constexpr (__id == 2) { return mask(); } + if constexpr (__id == 1) { return vendorName(); } + else if constexpr (__id == 2) { return partNumberToTransceiverAttributes(); } } template @@ -15892,21 +16189,42 @@ std::pair>> }; template -class ChildThriftPath<::std::vector<::facebook::fboss::state::BlockedMacAddress>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::state::BlockedMacAddress>, + ::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::state::BlockedMacAddress>, + ::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::PortQueueFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclEntry>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::AclEntry>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclEntry>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::AclEntry>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::AclEntry>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::AclEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); @@ -15914,21 +16232,21 @@ class ChildThriftPath<::std::vector<::facebook::fboss::state::BlockedMacAddress> template -class ChildThriftPath<::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::RouteFields, + ::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>, Parent> { public: using Self = Path< - ::facebook::fboss::state::RouteFields, + ::facebook::fboss::cfg::Interface, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Interface>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -15937,40 +16255,100 @@ class ChildThriftPath<::facebook::fboss::state::RouteFields, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopsMulti, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::NdpConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child<::facebook::fboss::cfg::InterfaceType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::InterfaceType>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(prefix, 1); - STRUCT_CHILD_GETTERS(nexthopsmulti, 2); - STRUCT_CHILD_GETTERS(fwd, 3); - STRUCT_CHILD_GETTERS(flags, 4); - STRUCT_CHILD_GETTERS(classID, 5); + STRUCT_CHILD_GETTERS(intfID, 1); + STRUCT_CHILD_GETTERS(routerID, 2); + STRUCT_CHILD_GETTERS(vlanID, 3); + STRUCT_CHILD_GETTERS(name, 4); + STRUCT_CHILD_GETTERS(mac, 5); + STRUCT_CHILD_GETTERS(ipAddresses, 6); + STRUCT_CHILD_GETTERS(ndp, 7); + STRUCT_CHILD_GETTERS(mtu, 8); + STRUCT_CHILD_GETTERS(isVirtual, 9); + STRUCT_CHILD_GETTERS(isStateSyncDisabled, 10); + STRUCT_CHILD_GETTERS(type, 11); + STRUCT_CHILD_GETTERS(dhcpRelayAddressV4, 12); + STRUCT_CHILD_GETTERS(dhcpRelayAddressV6, 13); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV4, 14); + STRUCT_CHILD_GETTERS(dhcpRelayOverridesV6, 15); + STRUCT_CHILD_GETTERS(scope, 16); + STRUCT_CHILD_GETTERS(portID, 17); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return prefix(); } - else if constexpr (__id == 2) { return nexthopsmulti(); } - else if constexpr (__id == 3) { return fwd(); } - else if constexpr (__id == 4) { return flags(); } - else if constexpr (__id == 5) { return classID(); } + if constexpr (__id == 1) { return intfID(); } + else if constexpr (__id == 2) { return routerID(); } + else if constexpr (__id == 3) { return vlanID(); } + else if constexpr (__id == 4) { return name(); } + else if constexpr (__id == 5) { return mac(); } + else if constexpr (__id == 6) { return ipAddresses(); } + else if constexpr (__id == 7) { return ndp(); } + else if constexpr (__id == 8) { return mtu(); } + else if constexpr (__id == 9) { return isVirtual(); } + else if constexpr (__id == 10) { return isStateSyncDisabled(); } + else if constexpr (__id == 11) { return type(); } + else if constexpr (__id == 12) { return dhcpRelayAddressV4(); } + else if constexpr (__id == 13) { return dhcpRelayAddressV6(); } + else if constexpr (__id == 14) { return dhcpRelayOverridesV4(); } + else if constexpr (__id == 15) { return dhcpRelayOverridesV6(); } + else if constexpr (__id == 16) { return scope(); } + else if constexpr (__id == 17) { return portID(); } } template @@ -15980,127 +16358,287 @@ std::pair -class ChildThriftPath<::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, bool>, + ::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::bool_t>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::i64_t>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, bool>, + ::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::bool_t>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::i64_t>, Parent>; - using Child = Path; + using Child = Path<::std::int64_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int16_t); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::Port>, + ::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::Port>, + ::std::map<::std::int32_t, ::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::i32_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path<::std::int32_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t, Self>; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; + template -class ChildThriftPath<::std::map<::std::int32_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int32_t, bool>, + ::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::bool_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>, Parent> { public: using Self = Path< - ::std::map<::std::int32_t, bool>, + ::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, - ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::bool_t>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>, Parent>; - using Child = Path; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::PortState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortState>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::ParserType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::ParserType>>>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::PortSpeed, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortSpeed>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortQueue>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPause, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::facebook::fboss::cfg::PortLoopbackMode, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortLoopbackMode>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::SampleDestination, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SampleDestination>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortProfileID, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortProfileID>>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortType>>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDrainState>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child>, + std::pair, Child>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(logicalID, 1); + STRUCT_CHILD_GETTERS(state, 2); + STRUCT_CHILD_GETTERS(minFrameSize, 3); + STRUCT_CHILD_GETTERS(maxFrameSize, 4); + STRUCT_CHILD_GETTERS(parserType, 5); + STRUCT_CHILD_GETTERS(routable, 6); + STRUCT_CHILD_GETTERS(ingressVlan, 7); + STRUCT_CHILD_GETTERS(speed, 8); + STRUCT_CHILD_GETTERS(name, 9); + STRUCT_CHILD_GETTERS(description, 10); + STRUCT_CHILD_GETTERS(queues_DEPRECATED, 12); + STRUCT_CHILD_GETTERS(pause, 13); + STRUCT_CHILD_GETTERS(sFlowIngressRate, 14); + STRUCT_CHILD_GETTERS(sFlowEgressRate, 15); + STRUCT_CHILD_GETTERS(loopbackMode, 17); + STRUCT_CHILD_GETTERS(ingressMirror, 18); + STRUCT_CHILD_GETTERS(egressMirror, 19); + STRUCT_CHILD_GETTERS(expectedLLDPValues, 20); + STRUCT_CHILD_GETTERS(sampleDest, 21); + STRUCT_CHILD_GETTERS(portQueueConfigName, 22); + STRUCT_CHILD_GETTERS(lookupClasses, 23); + STRUCT_CHILD_GETTERS(profileID, 24); + STRUCT_CHILD_GETTERS(pfc, 25); + STRUCT_CHILD_GETTERS(counterTags, 26); + STRUCT_CHILD_GETTERS(portType, 27); + STRUCT_CHILD_GETTERS(expectedNeighborReachability, 28); + STRUCT_CHILD_GETTERS(drainState, 29); + STRUCT_CHILD_GETTERS(flowletConfigName, 30); + STRUCT_CHILD_GETTERS(scope, 31); + STRUCT_CHILD_GETTERS(portVoqConfigName, 32); + STRUCT_CHILD_GETTERS(conditionalEntropyRehash, 33); + STRUCT_CHILD_GETTERS(selfHealingECMPLagEnable, 34); - CONTAINER_CHILD_GETTERS(::std::int32_t); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return logicalID(); } + else if constexpr (__id == 2) { return state(); } + else if constexpr (__id == 3) { return minFrameSize(); } + else if constexpr (__id == 4) { return maxFrameSize(); } + else if constexpr (__id == 5) { return parserType(); } + else if constexpr (__id == 6) { return routable(); } + else if constexpr (__id == 7) { return ingressVlan(); } + else if constexpr (__id == 8) { return speed(); } + else if constexpr (__id == 9) { return name(); } + else if constexpr (__id == 10) { return description(); } + else if constexpr (__id == 12) { return queues_DEPRECATED(); } + else if constexpr (__id == 13) { return pause(); } + else if constexpr (__id == 14) { return sFlowIngressRate(); } + else if constexpr (__id == 15) { return sFlowEgressRate(); } + else if constexpr (__id == 17) { return loopbackMode(); } + else if constexpr (__id == 18) { return ingressMirror(); } + else if constexpr (__id == 19) { return egressMirror(); } + else if constexpr (__id == 20) { return expectedLLDPValues(); } + else if constexpr (__id == 21) { return sampleDest(); } + else if constexpr (__id == 22) { return portQueueConfigName(); } + else if constexpr (__id == 23) { return lookupClasses(); } + else if constexpr (__id == 24) { return profileID(); } + else if constexpr (__id == 25) { return pfc(); } + else if constexpr (__id == 26) { return counterTags(); } + else if constexpr (__id == 27) { return portType(); } + else if constexpr (__id == 28) { return expectedNeighborReachability(); } + else if constexpr (__id == 29) { return drainState(); } + else if constexpr (__id == 30) { return flowletConfigName(); } + else if constexpr (__id == 31) { return scope(); } + else if constexpr (__id == 32) { return portVoqConfigName(); } + else if constexpr (__id == 33) { return conditionalEntropyRehash(); } + else if constexpr (__id == 34) { return selfHealingECMPLagEnable(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, + ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>, Parent> { public: using Self = Path< - ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, + ::std::map<::std::int32_t, ::facebook::fboss::state::InterfaceFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int16_t); -}; - -template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>>, - Parent> { - public: - using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::InterfaceFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::InterfaceFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::string); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PhyState, + ::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PhyState, + ::facebook::fboss::cfg::StaticIp2MplsRoute, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::StaticIp2MplsRoute>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -16109,60 +16647,30 @@ class ChildThriftPath<::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PhyFwVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortSpeed, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortSpeed>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PhySideState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PhySideState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::NextHopThrift>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(phyChip, 1); - STRUCT_CHILD_GETTERS(fwVersion, 2); - STRUCT_CHILD_GETTERS(speed, 3); - STRUCT_CHILD_GETTERS(name, 4); - STRUCT_CHILD_GETTERS(linkState, 5); - STRUCT_CHILD_GETTERS(system, 6); - STRUCT_CHILD_GETTERS(line, 7); - STRUCT_CHILD_GETTERS(switchID, 8); - STRUCT_CHILD_GETTERS(timeCollected, 9); + STRUCT_CHILD_GETTERS(routerID, 1); + STRUCT_CHILD_GETTERS(prefix, 2); + STRUCT_CHILD_GETTERS(nexthops, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return phyChip(); } - else if constexpr (__id == 2) { return fwVersion(); } - else if constexpr (__id == 3) { return speed(); } - else if constexpr (__id == 4) { return name(); } - else if constexpr (__id == 5) { return linkState(); } - else if constexpr (__id == 6) { return system(); } - else if constexpr (__id == 7) { return line(); } - else if constexpr (__id == 8) { return switchID(); } - else if constexpr (__id == 9) { return timeCollected(); } + if constexpr (__id == 1) { return routerID(); } + else if constexpr (__id == 2) { return prefix(); } + else if constexpr (__id == 3) { return nexthops(); } } template @@ -16171,368 +16679,184 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>>, - Parent>; - using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); -}; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, + ::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, + ::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>>, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableActionType>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclTableQualifier>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; using Self::Self; + + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(priority, 2); + STRUCT_CHILD_GETTERS(aclMap, 3); + STRUCT_CHILD_GETTERS(actionTypes, 4); + STRUCT_CHILD_GETTERS(qualifiers, 5); + STRUCT_CHILD_GETTERS(udfGroups, 6); - CONTAINER_CHILD_GETTERS(::std::string); + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return priority(); } + else if constexpr (__id == 3) { return aclMap(); } + else if constexpr (__id == 4) { return actionTypes(); } + else if constexpr (__id == 5) { return qualifiers(); } + else if constexpr (__id == 6) { return udfGroups(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } }; template -class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, + ::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>>, Parent> { public: using Self = Path< - ::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, + ::std::map<::std::int32_t, ::facebook::fboss::state::ParticipantInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::ParticipantInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::string); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; - template -class ChildThriftPath<::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::PortFields, + ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>, Parent> { public: using Self = Path< - ::facebook::fboss::state::PortFields, + ::std::map<::std::int16_t, ::facebook::fboss::state::AggregatePortFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AggregatePortFields>>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child>, - std::pair, Child>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::ProfileSideConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::phy::PinConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::ProfileSideConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::phy::PinConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortType>>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child>, - std::pair, Child>, - std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::PortDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDrainState>>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::PortLedExternalState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PortLedExternalState>>>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, Child>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::state::AggregatePortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(portId, 1); - STRUCT_CHILD_GETTERS(portName, 2); - STRUCT_CHILD_GETTERS(portDescription, 3); - STRUCT_CHILD_GETTERS(portState, 4); - STRUCT_CHILD_GETTERS(portOperState, 5); - STRUCT_CHILD_GETTERS(ingressVlan, 6); - STRUCT_CHILD_GETTERS(portSpeed, 7); - STRUCT_CHILD_GETTERS(rxPause, 10); - STRUCT_CHILD_GETTERS(txPause, 11); - STRUCT_CHILD_GETTERS(vlanMemberShips, 12); - STRUCT_CHILD_GETTERS(sFlowIngressRate, 13); - STRUCT_CHILD_GETTERS(sFlowEgressRate, 14); - STRUCT_CHILD_GETTERS(queues, 15); - STRUCT_CHILD_GETTERS(portLoopbackMode, 16); - STRUCT_CHILD_GETTERS(ingressMirror, 17); - STRUCT_CHILD_GETTERS(egressMirror, 18); - STRUCT_CHILD_GETTERS(qosPolicy, 19); - STRUCT_CHILD_GETTERS(sampleDest, 20); - STRUCT_CHILD_GETTERS(portProfileID, 21); - STRUCT_CHILD_GETTERS(lookupClassesToDistrubuteTrafficOn, 22); - STRUCT_CHILD_GETTERS(maxFrameSize, 23); - STRUCT_CHILD_GETTERS(pfc, 24); - STRUCT_CHILD_GETTERS(pgConfigs, 25); - STRUCT_CHILD_GETTERS(profileConfig, 26); - STRUCT_CHILD_GETTERS(pinConfigs, 27); - STRUCT_CHILD_GETTERS(lineProfileConfig, 28); - STRUCT_CHILD_GETTERS(linePinConfigs, 29); - STRUCT_CHILD_GETTERS(portType, 30); - STRUCT_CHILD_GETTERS(iPhyLinkFaultStatus, 31); - STRUCT_CHILD_GETTERS(asicPrbs, 32); - STRUCT_CHILD_GETTERS(gbSystemPrbs, 33); - STRUCT_CHILD_GETTERS(gbLinePrbs, 34); - STRUCT_CHILD_GETTERS(pfcPriorities, 35); - STRUCT_CHILD_GETTERS(expectedLLDPValues, 36); - STRUCT_CHILD_GETTERS(rxSecureAssociationKeys, 37); - STRUCT_CHILD_GETTERS(txSecureAssociationKey, 38); - STRUCT_CHILD_GETTERS(macsecDesired, 39); - STRUCT_CHILD_GETTERS(dropUnencrypted, 40); - STRUCT_CHILD_GETTERS(interfaceIDs, 41); - STRUCT_CHILD_GETTERS(expectedNeighborReachability, 42); - STRUCT_CHILD_GETTERS(drainState, 43); - STRUCT_CHILD_GETTERS(flowletConfigName, 44); - STRUCT_CHILD_GETTERS(flowletConfig, 45); - STRUCT_CHILD_GETTERS(portLedExternalState, 46); - STRUCT_CHILD_GETTERS(rxLaneSquelch, 47); - STRUCT_CHILD_GETTERS(zeroPreemphasis, 48); - STRUCT_CHILD_GETTERS(portActiveState, 49); - STRUCT_CHILD_GETTERS(disableTTLDecrement, 50); - STRUCT_CHILD_GETTERS(txEnable, 51); - STRUCT_CHILD_GETTERS(activeErrors, 52); - STRUCT_CHILD_GETTERS(scope, 53); - STRUCT_CHILD_GETTERS(reachabilityGroupId, 54); - STRUCT_CHILD_GETTERS(conditionalEntropyRehash, 55); + + CONTAINER_CHILD_GETTERS(::std::int16_t); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::ParticipantInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::ParticipantInfo, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::state::ParticipantInfo, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::state::ParticipantInfo>, + Parent>; + using strings = ::facebook::fboss::state::switch_state_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::state::LacpState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::LacpState>>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(systemPriority, 1); + STRUCT_CHILD_GETTERS(systemID, 2); + STRUCT_CHILD_GETTERS(key, 3); + STRUCT_CHILD_GETTERS(portPriority, 4); + STRUCT_CHILD_GETTERS(port, 5); + STRUCT_CHILD_GETTERS(state, 6); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return portId(); } - else if constexpr (__id == 2) { return portName(); } - else if constexpr (__id == 3) { return portDescription(); } - else if constexpr (__id == 4) { return portState(); } - else if constexpr (__id == 5) { return portOperState(); } - else if constexpr (__id == 6) { return ingressVlan(); } - else if constexpr (__id == 7) { return portSpeed(); } - else if constexpr (__id == 10) { return rxPause(); } - else if constexpr (__id == 11) { return txPause(); } - else if constexpr (__id == 12) { return vlanMemberShips(); } - else if constexpr (__id == 13) { return sFlowIngressRate(); } - else if constexpr (__id == 14) { return sFlowEgressRate(); } - else if constexpr (__id == 15) { return queues(); } - else if constexpr (__id == 16) { return portLoopbackMode(); } - else if constexpr (__id == 17) { return ingressMirror(); } - else if constexpr (__id == 18) { return egressMirror(); } - else if constexpr (__id == 19) { return qosPolicy(); } - else if constexpr (__id == 20) { return sampleDest(); } - else if constexpr (__id == 21) { return portProfileID(); } - else if constexpr (__id == 22) { return lookupClassesToDistrubuteTrafficOn(); } - else if constexpr (__id == 23) { return maxFrameSize(); } - else if constexpr (__id == 24) { return pfc(); } - else if constexpr (__id == 25) { return pgConfigs(); } - else if constexpr (__id == 26) { return profileConfig(); } - else if constexpr (__id == 27) { return pinConfigs(); } - else if constexpr (__id == 28) { return lineProfileConfig(); } - else if constexpr (__id == 29) { return linePinConfigs(); } - else if constexpr (__id == 30) { return portType(); } - else if constexpr (__id == 31) { return iPhyLinkFaultStatus(); } - else if constexpr (__id == 32) { return asicPrbs(); } - else if constexpr (__id == 33) { return gbSystemPrbs(); } - else if constexpr (__id == 34) { return gbLinePrbs(); } - else if constexpr (__id == 35) { return pfcPriorities(); } - else if constexpr (__id == 36) { return expectedLLDPValues(); } - else if constexpr (__id == 37) { return rxSecureAssociationKeys(); } - else if constexpr (__id == 38) { return txSecureAssociationKey(); } - else if constexpr (__id == 39) { return macsecDesired(); } - else if constexpr (__id == 40) { return dropUnencrypted(); } - else if constexpr (__id == 41) { return interfaceIDs(); } - else if constexpr (__id == 42) { return expectedNeighborReachability(); } - else if constexpr (__id == 43) { return drainState(); } - else if constexpr (__id == 44) { return flowletConfigName(); } - else if constexpr (__id == 45) { return flowletConfig(); } - else if constexpr (__id == 46) { return portLedExternalState(); } - else if constexpr (__id == 47) { return rxLaneSquelch(); } - else if constexpr (__id == 48) { return zeroPreemphasis(); } - else if constexpr (__id == 49) { return portActiveState(); } - else if constexpr (__id == 50) { return disableTTLDecrement(); } - else if constexpr (__id == 51) { return txEnable(); } - else if constexpr (__id == 52) { return activeErrors(); } - else if constexpr (__id == 53) { return scope(); } - else if constexpr (__id == 54) { return reachabilityGroupId(); } - else if constexpr (__id == 55) { return conditionalEntropyRehash(); } + if constexpr (__id == 1) { return systemPriority(); } + else if constexpr (__id == 2) { return systemID(); } + else if constexpr (__id == 3) { return key(); } + else if constexpr (__id == 4) { return portPriority(); } + else if constexpr (__id == 5) { return port(); } + else if constexpr (__id == 6) { return state(); } } template @@ -16542,43 +16866,64 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, + ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, + ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::TeFlowEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortFlowletConfigName); + CONTAINER_CHILD_GETTERS(::std::string); +}; + +template +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::CabledTestPair>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::facebook::fboss::cfg::CabledTestPair>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::CabledTestPair>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::CabledTestPair>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::CabledTestPair>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::CabledTestPair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::mka::MKASak, + ::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::mka::MKASak>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorDestination>, Parent> { public: using Self = Path< - ::facebook::fboss::mka::MKASak, + ::facebook::fboss::cfg::MirrorDestination, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::mka::MKASak>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::MirrorDestination>, Parent>; - using strings = ::facebook::fboss::mka::mka_structs_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -16587,215 +16932,202 @@ class ChildThriftPath<::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::F ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::mka::MKASci, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + using Children = fatal::tuple>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::facebook::fboss::mka::MKAConfidentialityOffset, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::mka::MKAConfidentialityOffset>>>, - std::pair, Child>, - std::pair, Child>>; + std::pair, ChildThriftPath<::facebook::fboss::cfg::MirrorTunnel, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(sci, 1); - STRUCT_CHILD_GETTERS(l2Port, 2); - STRUCT_CHILD_GETTERS(assocNum, 3); - STRUCT_CHILD_GETTERS(keyHex, 4); - STRUCT_CHILD_GETTERS(keyIdHex, 5); - STRUCT_CHILD_GETTERS(confidentOffset, 6); - STRUCT_CHILD_GETTERS(primary, 7); - STRUCT_CHILD_GETTERS(dropUnencrypted, 8); + STRUCT_CHILD_GETTERS(egressPort, 1); + STRUCT_CHILD_GETTERS(ip, 2); + STRUCT_CHILD_GETTERS(tunnel, 3); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return sci(); } - else if constexpr (__id == 2) { return l2Port(); } - else if constexpr (__id == 3) { return assocNum(); } - else if constexpr (__id == 4) { return keyHex(); } - else if constexpr (__id == 5) { return keyIdHex(); } - else if constexpr (__id == 6) { return confidentOffset(); } - else if constexpr (__id == 7) { return primary(); } - else if constexpr (__id == 8) { return dropUnencrypted(); } + if constexpr (__id == 1) { return egressPort(); } + else if constexpr (__id == 2) { return ip(); } + else if constexpr (__id == 3) { return tunnel(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); } +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::TeFlowEntryFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::TeFlowEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + +template +class ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::vector<::std::int16_t>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::i16_t>, + Parent> { + public: + using Self = Path< + ::std::vector<::std::int16_t>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::integral>, + ::apache::thrift::type::list<::apache::thrift::type::i16_t>, + Parent>; + using Child = Path<::std::int16_t, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t, Self>; + using Self::Self; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; - template -class ChildThriftPath<::facebook::fboss::state::MacEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::MacEntryFields, + ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MacEntryFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>, Parent> { public: using Self = Path< - ::facebook::fboss::state::MacEntryFields, + ::std::map<::std::string, ::facebook::fboss::state::IpTunnelFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MacEntryFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::IpTunnelFields>>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>, -std::pair>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, - std::pair, Child<::facebook::fboss::state::MacEntryType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::MacEntryType>>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::state::IpTunnelFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(mac, 1); - STRUCT_CHILD_GETTERS(portId, 2); - STRUCT_CHILD_GETTERS(classID, 3); - STRUCT_CHILD_GETTERS(type, 4); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return mac(); } - else if constexpr (__id == 2) { return portId(); } - else if constexpr (__id == 3) { return classID(); } - else if constexpr (__id == 4) { return type(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::string); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::Mirror>, + ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::Mirror>, + ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::state::SflowCollectorFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int32_t); + CONTAINER_CHILD_GETTERS(::std::string); }; - template -class ChildThriftPath<::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::Lacp, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Lacp>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::Lacp, + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Lacp>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::SflowCollectorFields>>>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::SflowCollectorFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; - template - using TypeFor = typename Children::template type_of; + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::DsfNode>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::cfg::DsfNode>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(systemID, 1); - STRUCT_CHILD_GETTERS(systemPriority, 2); - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return systemID(); } - else if constexpr (__id == 2) { return systemPriority(); } - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::std::int32_t, ::facebook::fboss::state::LabelForwardingEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); }; template -class ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::AclTtl, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::BufferPoolFields, + ::facebook::fboss::state::AclTtl, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTtl>, Parent> { public: using Self = Path< - ::facebook::fboss::BufferPoolFields, + ::facebook::fboss::state::AclTtl, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTtl>, Parent>; - using strings = ::facebook::fboss::common_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -16804,35 +17136,25 @@ class ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(headroomBytes, 2); - STRUCT_CHILD_GETTERS(sharedBytes, 3); - STRUCT_CHILD_GETTERS(reservedBytes, 4); + STRUCT_CHILD_GETTERS(value, 1); + STRUCT_CHILD_GETTERS(mask, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return headroomBytes(); } - else if constexpr (__id == 3) { return sharedBytes(); } - else if constexpr (__id == 4) { return reservedBytes(); } + if constexpr (__id == 1) { return value(); } + else if constexpr (__id == 2) { return mask(); } } template @@ -16841,73 +17163,42 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::state::BlockedMacAddress>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::MirrorEgressPort, + ::std::vector<::facebook::fboss::state::BlockedMacAddress>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::MirrorEgressPort>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>>, Parent> { public: - using Self = Path< - ::facebook::fboss::cfg::MirrorEgressPort, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::variant, - ::apache::thrift::type::union_t<::facebook::fboss::cfg::MirrorEgressPort>, - Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; - template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; - using Self::Self; - - STRUCT_CHILD_GETTERS(name, 1); - STRUCT_CHILD_GETTERS(logicalID, 2); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return name(); } - else if constexpr (__id == 2) { return logicalID(); } - } + using Self = Path< + ::std::vector<::facebook::fboss::state::BlockedMacAddress>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::state::BlockedMacAddress>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::BlockedMacAddress, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::VlanInfo, + ::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::VlanInfo, + ::facebook::fboss::state::RouteFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::RouteFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -16918,20 +17209,40 @@ class ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>>; - using ChildrenById = fatal::tuple< std::pair, Child>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::RoutePrefix, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopsMulti, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>>; template - using NameToId = fatal::tuple>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(tagged, 1); + STRUCT_CHILD_GETTERS(prefix, 1); + STRUCT_CHILD_GETTERS(nexthopsmulti, 2); + STRUCT_CHILD_GETTERS(fwd, 3); + STRUCT_CHILD_GETTERS(flags, 4); + STRUCT_CHILD_GETTERS(classID, 5); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return tagged(); } + if constexpr (__id == 1) { return prefix(); } + else if constexpr (__id == 2) { return nexthopsmulti(); } + else if constexpr (__id == 3) { return fwd(); } + else if constexpr (__id == 4) { return flags(); } + else if constexpr (__id == 5) { return classID(); } } template @@ -16941,64 +17252,127 @@ class ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsd }; template -class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, + ::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::bool_t>, Parent> { public: using Self = Path< - ::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, + ::std::map<::std::int16_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::bool_t>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = Path; using Self::Self; - CONTAINER_CHILD_GETTERS(::std::int64_t); + CONTAINER_CHILD_GETTERS(::std::int16_t); }; template -class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Neighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::vector<::facebook::fboss::cfg::Neighbor>, + ::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>>, Parent> { public: using Self = Path< - ::std::vector<::facebook::fboss::cfg::Neighbor>, + ::std::vector<::facebook::fboss::cfg::Port>, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, - ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Port>>, Parent>; - using Child = ChildThriftPath<::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Port, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + +template +class ChildThriftPath<::std::map<::std::int32_t, bool>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int32_t, bool>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::bool_t>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int32_t, bool>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::integral>, + ::apache::thrift::type::map<::apache::thrift::type::i32_t, ::apache::thrift::type::bool_t>, + Parent>; + using Child = Path; using Self::Self; CONTAINER_CHILD_GETTERS(::std::int32_t); }; +template +class ChildThriftPath<::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int16_t, ::facebook::fboss::state::VlanFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i16_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::VlanFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int16_t); +}; template -class ChildThriftPath<::facebook::fboss::state::MKASakKey, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::MKASakKey, + ::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::string); +}; + + +template +class ChildThriftPath<::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MKASakKey>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>, Parent> { public: using Self = Path< - ::facebook::fboss::state::MKASakKey, + ::facebook::fboss::phy::PhyState, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::MKASakKey>, + ::apache::thrift::type::struct_t<::facebook::fboss::phy::PhyState>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::phy::phy_tags::strings; template using Child = Path< ChildType, @@ -17007,50 +17381,148 @@ class ChildThriftPath<::facebook::fboss::state::MKASakKey, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::mka::MKASci, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + using Children = fatal::tuple>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::phy::DataPlanePhyChip, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PhyFwVersion, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortSpeed, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortSpeed>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PhySideState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PhySideState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - - STRUCT_CHILD_GETTERS(sci, 1); - STRUCT_CHILD_GETTERS(associationNum, 2); + + STRUCT_CHILD_GETTERS(phyChip, 1); + STRUCT_CHILD_GETTERS(fwVersion, 2); + STRUCT_CHILD_GETTERS(speed, 3); + STRUCT_CHILD_GETTERS(name, 4); + STRUCT_CHILD_GETTERS(linkState, 5); + STRUCT_CHILD_GETTERS(system, 6); + STRUCT_CHILD_GETTERS(line, 7); + STRUCT_CHILD_GETTERS(switchID, 8); + STRUCT_CHILD_GETTERS(timeCollected, 9); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return phyChip(); } + else if constexpr (__id == 2) { return fwVersion(); } + else if constexpr (__id == 3) { return speed(); } + else if constexpr (__id == 4) { return name(); } + else if constexpr (__id == 5) { return linkState(); } + else if constexpr (__id == 6) { return system(); } + else if constexpr (__id == 7) { return line(); } + else if constexpr (__id == 8) { return switchID(); } + else if constexpr (__id == 9) { return timeCollected(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + +template +class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>>, + Parent> { + public: + using Self = Path< + ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>>, + Parent>; + using Child = ChildThriftPath<::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); +}; + +template +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::NeighborEntryFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return sci(); } - else if constexpr (__id == 2) { return associationNum(); } - } + CONTAINER_CHILD_GETTERS(::std::string); +}; - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } +template +class ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::string, ::facebook::fboss::state::AclTableFields>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableFields>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::state::AclTableFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::string); }; template -class ChildThriftPath<::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::SwitchInfo, + ::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::SwitchInfo, + ::facebook::fboss::state::PortFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::SwitchInfo>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFields>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -17059,70 +17531,285 @@ class ChildThriftPath<::facebook::fboss::cfg::SwitchInfo, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::facebook::fboss::cfg::SwitchType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::SwitchType>>>, - std::pair, Child<::facebook::fboss::cfg::AsicType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AsicType>>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::Range64, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, +std::pair>>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::SystemPortRanges, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + std::pair, Child>, + std::pair, Child>, + std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::VlanInfo>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::AclLookupClass>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortPfc, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::PortPgFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::ProfileSideConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::phy::PinConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::ProfileSideConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::phy::PinConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortType>>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::LinkFaultStatus, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::map<::facebook::fboss::cfg::LLDPTag, ::std::string>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::state::RxSak>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child>, + std::pair, Child>, + std::pair, ChildThriftPath<::std::vector<::std::int32_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::PortNeighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::PortDrainState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::PortDrainState>>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, ChildThriftPath<::facebook::fboss::state::PortFlowletFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::PortLedExternalState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PortLedExternalState>>>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, Child>, + std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(switchType, 1); - STRUCT_CHILD_GETTERS(asicType, 2); - STRUCT_CHILD_GETTERS(switchIndex, 3); - STRUCT_CHILD_GETTERS(portIdRange, 4); - STRUCT_CHILD_GETTERS(systemPortRange, 5); - STRUCT_CHILD_GETTERS(switchMac, 6); - STRUCT_CHILD_GETTERS(connectionHandle, 7); - STRUCT_CHILD_GETTERS(systemPortRanges, 8); - STRUCT_CHILD_GETTERS(localSystemPortOffset, 9); - STRUCT_CHILD_GETTERS(globalSystemPortOffset, 10); - STRUCT_CHILD_GETTERS(inbandPortId, 11); + STRUCT_CHILD_GETTERS(portId, 1); + STRUCT_CHILD_GETTERS(portName, 2); + STRUCT_CHILD_GETTERS(portDescription, 3); + STRUCT_CHILD_GETTERS(portState, 4); + STRUCT_CHILD_GETTERS(portOperState, 5); + STRUCT_CHILD_GETTERS(ingressVlan, 6); + STRUCT_CHILD_GETTERS(portSpeed, 7); + STRUCT_CHILD_GETTERS(rxPause, 10); + STRUCT_CHILD_GETTERS(txPause, 11); + STRUCT_CHILD_GETTERS(vlanMemberShips, 12); + STRUCT_CHILD_GETTERS(sFlowIngressRate, 13); + STRUCT_CHILD_GETTERS(sFlowEgressRate, 14); + STRUCT_CHILD_GETTERS(queues, 15); + STRUCT_CHILD_GETTERS(portLoopbackMode, 16); + STRUCT_CHILD_GETTERS(ingressMirror, 17); + STRUCT_CHILD_GETTERS(egressMirror, 18); + STRUCT_CHILD_GETTERS(qosPolicy, 19); + STRUCT_CHILD_GETTERS(sampleDest, 20); + STRUCT_CHILD_GETTERS(portProfileID, 21); + STRUCT_CHILD_GETTERS(lookupClassesToDistrubuteTrafficOn, 22); + STRUCT_CHILD_GETTERS(maxFrameSize, 23); + STRUCT_CHILD_GETTERS(pfc, 24); + STRUCT_CHILD_GETTERS(pgConfigs, 25); + STRUCT_CHILD_GETTERS(profileConfig, 26); + STRUCT_CHILD_GETTERS(pinConfigs, 27); + STRUCT_CHILD_GETTERS(lineProfileConfig, 28); + STRUCT_CHILD_GETTERS(linePinConfigs, 29); + STRUCT_CHILD_GETTERS(portType, 30); + STRUCT_CHILD_GETTERS(iPhyLinkFaultStatus, 31); + STRUCT_CHILD_GETTERS(asicPrbs, 32); + STRUCT_CHILD_GETTERS(gbSystemPrbs, 33); + STRUCT_CHILD_GETTERS(gbLinePrbs, 34); + STRUCT_CHILD_GETTERS(pfcPriorities, 35); + STRUCT_CHILD_GETTERS(expectedLLDPValues, 36); + STRUCT_CHILD_GETTERS(rxSecureAssociationKeys, 37); + STRUCT_CHILD_GETTERS(txSecureAssociationKey, 38); + STRUCT_CHILD_GETTERS(macsecDesired, 39); + STRUCT_CHILD_GETTERS(dropUnencrypted, 40); + STRUCT_CHILD_GETTERS(interfaceIDs, 41); + STRUCT_CHILD_GETTERS(expectedNeighborReachability, 42); + STRUCT_CHILD_GETTERS(drainState, 43); + STRUCT_CHILD_GETTERS(flowletConfigName, 44); + STRUCT_CHILD_GETTERS(flowletConfig, 45); + STRUCT_CHILD_GETTERS(portLedExternalState, 46); + STRUCT_CHILD_GETTERS(rxLaneSquelch, 47); + STRUCT_CHILD_GETTERS(zeroPreemphasis, 48); + STRUCT_CHILD_GETTERS(portActiveState, 49); + STRUCT_CHILD_GETTERS(disableTTLDecrement, 50); + STRUCT_CHILD_GETTERS(txEnable, 51); + STRUCT_CHILD_GETTERS(activeErrors, 52); + STRUCT_CHILD_GETTERS(scope, 53); + STRUCT_CHILD_GETTERS(reachabilityGroupId, 54); + STRUCT_CHILD_GETTERS(conditionalEntropyRehash, 55); + STRUCT_CHILD_GETTERS(selfHealingECMPLagEnable, 56); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return switchType(); } - else if constexpr (__id == 2) { return asicType(); } - else if constexpr (__id == 3) { return switchIndex(); } - else if constexpr (__id == 4) { return portIdRange(); } - else if constexpr (__id == 5) { return systemPortRange(); } - else if constexpr (__id == 6) { return switchMac(); } - else if constexpr (__id == 7) { return connectionHandle(); } - else if constexpr (__id == 8) { return systemPortRanges(); } - else if constexpr (__id == 9) { return localSystemPortOffset(); } - else if constexpr (__id == 10) { return globalSystemPortOffset(); } - else if constexpr (__id == 11) { return inbandPortId(); } + if constexpr (__id == 1) { return portId(); } + else if constexpr (__id == 2) { return portName(); } + else if constexpr (__id == 3) { return portDescription(); } + else if constexpr (__id == 4) { return portState(); } + else if constexpr (__id == 5) { return portOperState(); } + else if constexpr (__id == 6) { return ingressVlan(); } + else if constexpr (__id == 7) { return portSpeed(); } + else if constexpr (__id == 10) { return rxPause(); } + else if constexpr (__id == 11) { return txPause(); } + else if constexpr (__id == 12) { return vlanMemberShips(); } + else if constexpr (__id == 13) { return sFlowIngressRate(); } + else if constexpr (__id == 14) { return sFlowEgressRate(); } + else if constexpr (__id == 15) { return queues(); } + else if constexpr (__id == 16) { return portLoopbackMode(); } + else if constexpr (__id == 17) { return ingressMirror(); } + else if constexpr (__id == 18) { return egressMirror(); } + else if constexpr (__id == 19) { return qosPolicy(); } + else if constexpr (__id == 20) { return sampleDest(); } + else if constexpr (__id == 21) { return portProfileID(); } + else if constexpr (__id == 22) { return lookupClassesToDistrubuteTrafficOn(); } + else if constexpr (__id == 23) { return maxFrameSize(); } + else if constexpr (__id == 24) { return pfc(); } + else if constexpr (__id == 25) { return pgConfigs(); } + else if constexpr (__id == 26) { return profileConfig(); } + else if constexpr (__id == 27) { return pinConfigs(); } + else if constexpr (__id == 28) { return lineProfileConfig(); } + else if constexpr (__id == 29) { return linePinConfigs(); } + else if constexpr (__id == 30) { return portType(); } + else if constexpr (__id == 31) { return iPhyLinkFaultStatus(); } + else if constexpr (__id == 32) { return asicPrbs(); } + else if constexpr (__id == 33) { return gbSystemPrbs(); } + else if constexpr (__id == 34) { return gbLinePrbs(); } + else if constexpr (__id == 35) { return pfcPriorities(); } + else if constexpr (__id == 36) { return expectedLLDPValues(); } + else if constexpr (__id == 37) { return rxSecureAssociationKeys(); } + else if constexpr (__id == 38) { return txSecureAssociationKey(); } + else if constexpr (__id == 39) { return macsecDesired(); } + else if constexpr (__id == 40) { return dropUnencrypted(); } + else if constexpr (__id == 41) { return interfaceIDs(); } + else if constexpr (__id == 42) { return expectedNeighborReachability(); } + else if constexpr (__id == 43) { return drainState(); } + else if constexpr (__id == 44) { return flowletConfigName(); } + else if constexpr (__id == 45) { return flowletConfig(); } + else if constexpr (__id == 46) { return portLedExternalState(); } + else if constexpr (__id == 47) { return rxLaneSquelch(); } + else if constexpr (__id == 48) { return zeroPreemphasis(); } + else if constexpr (__id == 49) { return portActiveState(); } + else if constexpr (__id == 50) { return disableTTLDecrement(); } + else if constexpr (__id == 51) { return txEnable(); } + else if constexpr (__id == 52) { return activeErrors(); } + else if constexpr (__id == 53) { return scope(); } + else if constexpr (__id == 54) { return reachabilityGroupId(); } + else if constexpr (__id == 55) { return conditionalEntropyRehash(); } + else if constexpr (__id == 56) { return selfHealingECMPLagEnable(); } } template @@ -17132,100 +17819,43 @@ std::pair -class ChildThriftPath<::std::vector<::facebook::fboss::PortError>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::vector<::facebook::fboss::PortError>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::PortError>>, - Parent> { - public: - using Self = Path< - ::std::vector<::facebook::fboss::PortError>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::list<::apache::thrift::type_class::enumeration>, - ::apache::thrift::type::list<::apache::thrift::type::enum_t<::facebook::fboss::PortError>>, - Parent>; - using Child = Path<::facebook::fboss::PortError, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::PortError>, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::std::int32_t); -}; - - -template -class ChildThriftPath<::facebook::fboss::state::FibContainerFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::FibContainerFields, + ::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>>, Parent> { public: using Self = Path< - ::facebook::fboss::state::FibContainerFields, + ::std::map<::facebook::fboss::cfg::PortFlowletConfigName, ::facebook::fboss::cfg::PortFlowletConfig>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::FibContainerFields>, + ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::cfg::PortFlowletConfig>>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; - template - using Child = Path< - ChildType, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ChildTC, - ChildTag, - Self - >; - using Children = fatal::tuple>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::RouteFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>>::template type_of; - - template - using TypeFor = typename Children::template type_of; + using Child = ChildThriftPath<::facebook::fboss::cfg::PortFlowletConfig, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - - STRUCT_CHILD_GETTERS(vrf, 1); - STRUCT_CHILD_GETTERS(fibV4, 2); - STRUCT_CHILD_GETTERS(fibV6, 3); - - template - auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return vrf(); } - else if constexpr (__id == 2) { return fibV4(); } - else if constexpr (__id == 3) { return fibV6(); } - } - template - auto operator()(const fatal::sequence&) { - return operator()(NameToId>()); - } + CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::PortFlowletConfigName); }; template -class ChildThriftPath<::facebook::fboss::PortQueueFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::PortQueueFields, + ::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::mka::MKASak>, Parent> { public: using Self = Path< - ::facebook::fboss::PortQueueFields, + ::facebook::fboss::mka::MKASak, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::PortQueueFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::mka::MKASak>, Parent>; - using strings = ::facebook::fboss::ctrl_tags::strings; + using strings = ::facebook::fboss::mka::mka_structs_tags::strings; template using Child = Path< ChildType, @@ -17234,105 +17864,55 @@ class ChildThriftPath<::facebook::fboss::PortQueueFields, ::facebook::fboss::fsd ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>, -std::pair>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::mka::MKASci, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ActiveQueueManagement>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortQueueRate, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>, - std::pair, ChildThriftPath<::std::vector<::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + std::pair, Child<::facebook::fboss::mka::MKAConfidentialityOffset, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::mka::MKAConfidentialityOffset>>>, + std::pair, Child>, + std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(id, 1); - STRUCT_CHILD_GETTERS(weight, 2); - STRUCT_CHILD_GETTERS(reserved, 3); - STRUCT_CHILD_GETTERS(scalingFactor, 4); - STRUCT_CHILD_GETTERS(scheduling, 5); - STRUCT_CHILD_GETTERS(streamType, 6); - STRUCT_CHILD_GETTERS(aqms, 7); - STRUCT_CHILD_GETTERS(name, 8); - STRUCT_CHILD_GETTERS(packetsPerSec_DEPRECATED, 10); - STRUCT_CHILD_GETTERS(sharedBytes, 11); - STRUCT_CHILD_GETTERS(portQueueRate, 12); - STRUCT_CHILD_GETTERS(bandwidthBurstMinKbits, 13); - STRUCT_CHILD_GETTERS(bandwidthBurstMaxKbits, 14); - STRUCT_CHILD_GETTERS(trafficClass, 15); - STRUCT_CHILD_GETTERS(pfcPriorities, 16); - STRUCT_CHILD_GETTERS(maxDynamicSharedBytes, 17); - STRUCT_CHILD_GETTERS(bufferPoolName, 18); - STRUCT_CHILD_GETTERS(bufferPoolConfig, 19); + STRUCT_CHILD_GETTERS(sci, 1); + STRUCT_CHILD_GETTERS(l2Port, 2); + STRUCT_CHILD_GETTERS(assocNum, 3); + STRUCT_CHILD_GETTERS(keyHex, 4); + STRUCT_CHILD_GETTERS(keyIdHex, 5); + STRUCT_CHILD_GETTERS(confidentOffset, 6); + STRUCT_CHILD_GETTERS(primary, 7); + STRUCT_CHILD_GETTERS(dropUnencrypted, 8); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return id(); } - else if constexpr (__id == 2) { return weight(); } - else if constexpr (__id == 3) { return reserved(); } - else if constexpr (__id == 4) { return scalingFactor(); } - else if constexpr (__id == 5) { return scheduling(); } - else if constexpr (__id == 6) { return streamType(); } - else if constexpr (__id == 7) { return aqms(); } - else if constexpr (__id == 8) { return name(); } - else if constexpr (__id == 10) { return packetsPerSec_DEPRECATED(); } - else if constexpr (__id == 11) { return sharedBytes(); } - else if constexpr (__id == 12) { return portQueueRate(); } - else if constexpr (__id == 13) { return bandwidthBurstMinKbits(); } - else if constexpr (__id == 14) { return bandwidthBurstMaxKbits(); } - else if constexpr (__id == 15) { return trafficClass(); } - else if constexpr (__id == 16) { return pfcPriorities(); } - else if constexpr (__id == 17) { return maxDynamicSharedBytes(); } - else if constexpr (__id == 18) { return bufferPoolName(); } - else if constexpr (__id == 19) { return bufferPoolConfig(); } + if constexpr (__id == 1) { return sci(); } + else if constexpr (__id == 2) { return l2Port(); } + else if constexpr (__id == 3) { return assocNum(); } + else if constexpr (__id == 4) { return keyHex(); } + else if constexpr (__id == 5) { return keyIdHex(); } + else if constexpr (__id == 6) { return confidentOffset(); } + else if constexpr (__id == 7) { return primary(); } + else if constexpr (__id == 8) { return dropUnencrypted(); } } template @@ -17343,19 +17923,19 @@ std::pair -class ChildThriftPath<::facebook::fboss::state::NeighborEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::MacEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::NeighborEntryFields, + ::facebook::fboss::state::MacEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MacEntryFields>, Parent> { public: using Self = Path< - ::facebook::fboss::state::NeighborEntryFields, + ::facebook::fboss::state::MacEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::NeighborEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MacEntryFields>, Parent>; using strings = ::facebook::fboss::state::switch_state_tags::strings; template @@ -17366,75 +17946,35 @@ class ChildThriftPath<::facebook::fboss::state::NeighborEntryFields, ::facebook: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, + using Children = fatal::tuple>, std::pair>, -std::pair>, -std::pair>>, std::pair>>, -std::pair>, -std::pair>, -std::pair>>, -std::pair>, -std::pair>, -std::pair>>; +std::pair>>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::state::NeighborState, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::NeighborState>>>, - std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child>, - std::pair, Child<::facebook::fboss::state::NeighborEntryType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::NeighborEntryType>>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child>, - std::pair, Child>>; + std::pair, ChildThriftPath<::facebook::fboss::cfg::PortDescriptor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>, + std::pair, Child<::facebook::fboss::state::MacEntryType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::state::MacEntryType>>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(ipaddress, 1); - STRUCT_CHILD_GETTERS(mac, 2); - STRUCT_CHILD_GETTERS(portId, 3); - STRUCT_CHILD_GETTERS(interfaceId, 4); - STRUCT_CHILD_GETTERS(state, 5); - STRUCT_CHILD_GETTERS(classID, 6); - STRUCT_CHILD_GETTERS(encapIndex, 7); - STRUCT_CHILD_GETTERS(isLocal, 8); - STRUCT_CHILD_GETTERS(type, 9); - STRUCT_CHILD_GETTERS(resolvedSince, 10); - STRUCT_CHILD_GETTERS(noHostRoute, 11); - STRUCT_CHILD_GETTERS(disableTTLDecrement, 12); + STRUCT_CHILD_GETTERS(mac, 1); + STRUCT_CHILD_GETTERS(portId, 2); + STRUCT_CHILD_GETTERS(classID, 3); + STRUCT_CHILD_GETTERS(type, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return ipaddress(); } - else if constexpr (__id == 2) { return mac(); } - else if constexpr (__id == 3) { return portId(); } - else if constexpr (__id == 4) { return interfaceId(); } - else if constexpr (__id == 5) { return state(); } - else if constexpr (__id == 6) { return classID(); } - else if constexpr (__id == 7) { return encapIndex(); } - else if constexpr (__id == 8) { return isLocal(); } - else if constexpr (__id == 9) { return type(); } - else if constexpr (__id == 10) { return resolvedSince(); } - else if constexpr (__id == 11) { return noHostRoute(); } - else if constexpr (__id == 12) { return disableTTLDecrement(); } + if constexpr (__id == 1) { return mac(); } + else if constexpr (__id == 2) { return portId(); } + else if constexpr (__id == 3) { return classID(); } + else if constexpr (__id == 4) { return type(); } } template @@ -17444,43 +17984,43 @@ std::pair -class ChildThriftPath<::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, + ::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>>, Parent> { public: using Self = Path< - ::std::map<::facebook::fboss::state::SwitchIdList, ::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>>, + ::std::vector<::facebook::fboss::cfg::Mirror>, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::map<::apache::thrift::type_class::string, ::apache::thrift::type_class::structure>>, - ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::map<::apache::thrift::type::string_t, ::apache::thrift::type::struct_t<::facebook::fboss::state::PortFlowletFields>>>, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Mirror>>, Parent>; - using Child = ChildThriftPath<::std::map<::std::string, ::facebook::fboss::state::PortFlowletFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Mirror, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; using Self::Self; - CONTAINER_CHILD_GETTERS(::facebook::fboss::state::SwitchIdList); + CONTAINER_CHILD_GETTERS(::std::int32_t); }; template -class ChildThriftPath<::facebook::fboss::state::LabelForwardingEntryFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::state::LabelForwardingEntryFields, + ::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Lacp>, Parent> { public: using Self = Path< - ::facebook::fboss::state::LabelForwardingEntryFields, + ::facebook::fboss::cfg::Lacp, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::state::LabelForwardingEntryFields>, + ::apache::thrift::type::struct_t<::facebook::fboss::cfg::Lacp>, Parent>; - using strings = ::facebook::fboss::state::switch_state_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -17489,40 +18029,87 @@ class ChildThriftPath<::facebook::fboss::state::LabelForwardingEntryFields, ::fa ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::state::Label, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopsMulti, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::facebook::fboss::state::RouteNextHopEntry, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, - std::pair, Child<::facebook::fboss::cfg::AclLookupClass, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclLookupClass>>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(label, 1); - STRUCT_CHILD_GETTERS(nexthopsmulti, 2); - STRUCT_CHILD_GETTERS(fwd, 3); - STRUCT_CHILD_GETTERS(flags, 4); - STRUCT_CHILD_GETTERS(classID, 5); + STRUCT_CHILD_GETTERS(systemID, 1); + STRUCT_CHILD_GETTERS(systemPriority, 2); + + template + auto operator()(const std::integral_constant&) { + if constexpr (__id == 1) { return systemID(); } + else if constexpr (__id == 2) { return systemPriority(); } + } + + template + auto operator()(const fatal::sequence&) { + return operator()(NameToId>()); + } +}; + + +template +class ChildThriftPath<::facebook::fboss::BufferPoolFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::BufferPoolFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>, + Parent> { + public: + using Self = Path< + ::facebook::fboss::BufferPoolFields, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::structure, + ::apache::thrift::type::struct_t<::facebook::fboss::BufferPoolFields>, + Parent>; + using strings = ::facebook::fboss::common_tags::strings; + template + using Child = Path< + ChildType, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ChildTC, + ChildTag, + Self + >; + using Children = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; + template + using NameToId = fatal::tuple>, +std::pair>, +std::pair>, +std::pair>>::template type_of; + + template + using TypeFor = typename Children::template type_of; + using Self::Self; + + STRUCT_CHILD_GETTERS(id, 1); + STRUCT_CHILD_GETTERS(headroomBytes, 2); + STRUCT_CHILD_GETTERS(sharedBytes, 3); + STRUCT_CHILD_GETTERS(reservedBytes, 4); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return label(); } - else if constexpr (__id == 2) { return nexthopsmulti(); } - else if constexpr (__id == 3) { return fwd(); } - else if constexpr (__id == 4) { return flags(); } - else if constexpr (__id == 5) { return classID(); } + if constexpr (__id == 1) { return id(); } + else if constexpr (__id == 2) { return headroomBytes(); } + else if constexpr (__id == 3) { return sharedBytes(); } + else if constexpr (__id == 4) { return reservedBytes(); } } template @@ -17533,21 +18120,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::phy::PortPrbsState, + ::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PortPrbsState>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::MirrorEgressPort>, Parent> { public: using Self = Path< - ::facebook::fboss::phy::PortPrbsState, + ::facebook::fboss::cfg::MirrorEgressPort, ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::phy::PortPrbsState>, + ::apache::thrift::type_class::variant, + ::apache::thrift::type::union_t<::facebook::fboss::cfg::MirrorEgressPort>, Parent>; - using strings = ::facebook::fboss::phy::phy_tags::strings; + using strings = ::facebook::fboss::cfg::switch_config_tags::strings; template using Child = Path< ChildType, @@ -17556,25 +18143,25 @@ class ChildThriftPath<::facebook::fboss::phy::PortPrbsState, ::facebook::fboss:: ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>>; - using ChildrenById = fatal::tuple< std::pair, Child>, + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(enabled, 1); - STRUCT_CHILD_GETTERS(polynominal, 2); + STRUCT_CHILD_GETTERS(name, 1); + STRUCT_CHILD_GETTERS(logicalID, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return enabled(); } - else if constexpr (__id == 2) { return polynominal(); } + if constexpr (__id == 1) { return name(); } + else if constexpr (__id == 2) { return logicalID(); } } template @@ -17585,21 +18172,21 @@ std::pair -class ChildThriftPath<::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::cfg::QosMap, + ::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>, Parent> { public: using Self = Path< - ::facebook::fboss::cfg::QosMap, + ::facebook::fboss::state::VlanInfo, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::cfg::QosMap>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::VlanInfo>, Parent>; - using strings = ::facebook::fboss::cfg::switch_config_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -17608,50 +18195,20 @@ class ChildThriftPath<::facebook::fboss::cfg::QosMap, ::facebook::fboss::fsdb::F ChildTag, Self >; - using Children = fatal::tuple, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; - using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::DscpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::cfg::ExpQosMap>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int16_t>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>>; + using Children = fatal::tuple>>; + using ChildrenById = fatal::tuple< std::pair, Child>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(dscpMaps, 1); - STRUCT_CHILD_GETTERS(expMaps, 2); - STRUCT_CHILD_GETTERS(trafficClassToQueueId, 3); - STRUCT_CHILD_GETTERS(pfcPriorityToQueueId, 4); - STRUCT_CHILD_GETTERS(trafficClassToPgId, 5); - STRUCT_CHILD_GETTERS(pfcPriorityToPgId, 6); - STRUCT_CHILD_GETTERS(trafficClassToVoqId, 7); + STRUCT_CHILD_GETTERS(tagged, 1); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return dscpMaps(); } - else if constexpr (__id == 2) { return expMaps(); } - else if constexpr (__id == 3) { return trafficClassToQueueId(); } - else if constexpr (__id == 4) { return pfcPriorityToQueueId(); } - else if constexpr (__id == 5) { return trafficClassToPgId(); } - else if constexpr (__id == 6) { return pfcPriorityToPgId(); } - else if constexpr (__id == 7) { return trafficClassToVoqId(); } + if constexpr (__id == 1) { return tagged(); } } template @@ -17660,23 +18217,65 @@ std::pair +class ChildThriftPath<::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>>, + Parent> { + public: + using Self = Path< + ::std::map<::std::int64_t, ::facebook::fboss::switch_reachability::SwitchReachability>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::map<::apache::thrift::type_class::integral, ::apache::thrift::type_class::structure>, + ::apache::thrift::type::map<::apache::thrift::type::i64_t, ::apache::thrift::type::struct_t<::facebook::fboss::switch_reachability::SwitchReachability>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::switch_reachability::SwitchReachability, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int64_t); +}; template -class ChildThriftPath<::facebook::fboss::SystemPortThrift, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : +class ChildThriftPath<::std::vector<::facebook::fboss::cfg::Neighbor>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : public Path< - ::facebook::fboss::SystemPortThrift, + ::std::vector<::facebook::fboss::cfg::Neighbor>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>>, + Parent> { + public: + using Self = Path< + ::std::vector<::facebook::fboss::cfg::Neighbor>, + ::facebook::fboss::fsdb::FsdbOperStateRoot, + ::apache::thrift::type_class::list<::apache::thrift::type_class::structure>, + ::apache::thrift::type::list<::apache::thrift::type::struct_t<::facebook::fboss::cfg::Neighbor>>, + Parent>; + using Child = ChildThriftPath<::facebook::fboss::cfg::Neighbor, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; + using Self::Self; + + CONTAINER_CHILD_GETTERS(::std::int32_t); +}; + + +template +class ChildThriftPath<::facebook::fboss::state::MKASakKey, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : + public Path< + ::facebook::fboss::state::MKASakKey, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MKASakKey>, Parent> { public: using Self = Path< - ::facebook::fboss::SystemPortThrift, + ::facebook::fboss::state::MKASakKey, ::facebook::fboss::fsdb::FsdbOperStateRoot, ::apache::thrift::type_class::structure, - ::apache::thrift::type::struct_t<::facebook::fboss::SystemPortThrift>, + ::apache::thrift::type::struct_t<::facebook::fboss::state::MKASakKey>, Parent>; - using strings = ::facebook::fboss::ctrl_tags::strings; + using strings = ::facebook::fboss::state::switch_state_tags::strings; template using Child = Path< ChildType, @@ -17685,80 +18284,25 @@ class ChildThriftPath<::facebook::fboss::SystemPortThrift, ::facebook::fboss::fs ChildTag, Self >; - using Children = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, -std::pair>>, -std::pair>>, -std::pair>>>; - using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child>, - std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, - std::pair, ChildThriftPath<::std::vector<::facebook::fboss::PortQueueFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, - std::pair, Child<::facebook::fboss::RemoteSystemPortType, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::RemoteSystemPortType>>>, - std::pair, Child<::facebook::fboss::LivenessStatus, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::LivenessStatus>>>, - std::pair, Child<::facebook::fboss::cfg::Scope, ::apache::thrift::type_class::enumeration, ::apache::thrift::type::enum_t<::facebook::fboss::cfg::Scope>>>>; + using Children = fatal::tuple>, +std::pair>>; + using ChildrenById = fatal::tuple< std::pair, ChildThriftPath<::facebook::fboss::mka::MKASci, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>>, + std::pair, Child<::std::int32_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i32_t>>>; template - using NameToId = fatal::tuple>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>, -std::pair>>::template type_of; + using NameToId = fatal::tuple>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; using Self::Self; - STRUCT_CHILD_GETTERS(portId, 1); - STRUCT_CHILD_GETTERS(switchId, 2); - STRUCT_CHILD_GETTERS(portName, 3); - STRUCT_CHILD_GETTERS(coreIndex, 4); - STRUCT_CHILD_GETTERS(corePortIndex, 5); - STRUCT_CHILD_GETTERS(speedMbps, 6); - STRUCT_CHILD_GETTERS(numVoqs, 7); - STRUCT_CHILD_GETTERS(enabled_DEPRECATED, 9); - STRUCT_CHILD_GETTERS(qosPolicy, 10); - STRUCT_CHILD_GETTERS(queues, 11); - STRUCT_CHILD_GETTERS(remoteSystemPortType, 12); - STRUCT_CHILD_GETTERS(remoteSystemPortLivenessStatus, 13); - STRUCT_CHILD_GETTERS(scope, 14); + STRUCT_CHILD_GETTERS(sci, 1); + STRUCT_CHILD_GETTERS(associationNum, 2); template auto operator()(const std::integral_constant&) { - if constexpr (__id == 1) { return portId(); } - else if constexpr (__id == 2) { return switchId(); } - else if constexpr (__id == 3) { return portName(); } - else if constexpr (__id == 4) { return coreIndex(); } - else if constexpr (__id == 5) { return corePortIndex(); } - else if constexpr (__id == 6) { return speedMbps(); } - else if constexpr (__id == 7) { return numVoqs(); } - else if constexpr (__id == 9) { return enabled_DEPRECATED(); } - else if constexpr (__id == 10) { return qosPolicy(); } - else if constexpr (__id == 11) { return queues(); } - else if constexpr (__id == 12) { return remoteSystemPortType(); } - else if constexpr (__id == 13) { return remoteSystemPortLivenessStatus(); } - else if constexpr (__id == 14) { return scope(); } + if constexpr (__id == 1) { return sci(); } + else if constexpr (__id == 2) { return associationNum(); } } template @@ -17767,27 +18311,6 @@ std::pair } }; -template -class ChildThriftPath<::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, ::facebook::fboss::fsdb::FsdbOperStateRoot, Parent> : - public Path< - ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>, - Parent> { - public: - using Self = Path< - ::std::map<::facebook::fboss::cfg::AclStage, ::facebook::fboss::state::AclTableGroupFields>, - ::facebook::fboss::fsdb::FsdbOperStateRoot, - ::apache::thrift::type_class::map<::apache::thrift::type_class::enumeration, ::apache::thrift::type_class::structure>, - ::apache::thrift::type::map<::apache::thrift::type::enum_t<::facebook::fboss::cfg::AclStage>, ::apache::thrift::type::struct_t<::facebook::fboss::state::AclTableGroupFields>>, - Parent>; - using Child = ChildThriftPath<::facebook::fboss::state::AclTableGroupFields, ::facebook::fboss::fsdb::FsdbOperStateRoot, Self>; - using Self::Self; - - CONTAINER_CHILD_GETTERS(::facebook::fboss::cfg::AclStage); -}; - template<> @@ -19608,14 +20131,18 @@ std::pair>, std::pair, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, std::pair, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, -std::pair>>; +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, ChildThriftPath<::std::map<::std::string, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, std::pair, ChildThriftPath<::std::map<::std::string, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; template using NameToId = fatal::tuple>, std::pair>, @@ -19623,7 +20150,9 @@ std::pair>, std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -19636,6 +20165,8 @@ std::pair auto operator()(const std::integral_constant&) { @@ -19646,6 +20177,8 @@ std::pair @@ -20295,7 +20828,11 @@ std::pair>, std::pair>, std::pair>, -std::pair>>; +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, @@ -20308,7 +20845,11 @@ std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; template using NameToId = fatal::tuple>, std::pair>, @@ -20322,7 +20863,11 @@ std::pair>, std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>, +std::pair>, +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -20341,6 +20886,10 @@ std::pair auto operator()(const std::integral_constant&) { @@ -20357,6 +20906,10 @@ std::pair @@ -20959,6 +21512,7 @@ std::pair, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, std::pair>, std::pair>, +std::pair>, std::pair>, std::pair>, std::pair>, @@ -21013,6 +21567,7 @@ std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::string, ::apache::thrift::type_class::string, ::apache::thrift::type::string_t>>, std::pair, ChildThriftPath<::facebook::fboss::MacsecStats, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, @@ -21068,6 +21623,7 @@ std::pair>, std::pair>, std::pair>, +std::pair>, std::pair>, std::pair>, std::pair>, @@ -21127,6 +21683,7 @@ std::pair>, std::pair>, std::pair>, -std::pair, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>>; +std::pair, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child>, - std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>>; + std::pair, ChildThriftPath<::std::map<::std::int16_t, ::std::int64_t>, ::facebook::fboss::fsdb::FsdbOperStatsRoot, Self>>, + std::pair, Child<::std::int16_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i16_t>>>; template using NameToId = fatal::tuple>, std::pair>, std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -21368,6 +21929,7 @@ std::pair auto operator()(const std::integral_constant&) { @@ -21376,6 +21938,7 @@ std::pair @@ -22564,7 +23127,8 @@ std::pair>, std::pair>, std::pair>, -std::pair>>; +std::pair>, +std::pair>>; using ChildrenById = fatal::tuple< std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, @@ -22574,7 +23138,8 @@ std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, - std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>, + std::pair, Child<::std::int64_t, ::apache::thrift::type_class::integral, ::apache::thrift::type::i64_t>>>; template using NameToId = fatal::tuple>, std::pair>, @@ -22585,7 +23150,8 @@ std::pair>, std::pair>, std::pair>, -std::pair>>::template type_of; +std::pair>, +std::pair>>::template type_of; template using TypeFor = typename Children::template type_of; @@ -22601,6 +23167,7 @@ std::pair auto operator()(const std::integral_constant&) { @@ -22614,6 +23181,7 @@ std::pair diff --git a/fboss/fsdb/oper/BUCK b/fboss/fsdb/oper/BUCK index a2397166ff518..90b00e79e83c6 100644 --- a/fboss/fsdb/oper/BUCK +++ b/fboss/fsdb/oper/BUCK @@ -144,7 +144,6 @@ cpp_binary( "//fboss/fsdb/if:fsdb-cpp2-services", "//fboss/fsdb/if:fsdb_common-cpp2-types", "//fboss/fsdb/if:fsdb_model", - "//fboss/thrift_cow/nodes:serializer", "//folly:file_util", "//folly:string", "//folly/coro:blocking_wait", diff --git a/fboss/fsdb/oper/CowSubscriptionManager.h b/fboss/fsdb/oper/CowSubscriptionManager.h index 323330a86324e..3db93e33d7eed 100644 --- a/fboss/fsdb/oper/CowSubscriptionManager.h +++ b/fboss/fsdb/oper/CowSubscriptionManager.h @@ -240,7 +240,7 @@ class CowSubscriptionManager for (auto& [_, subscription] : store.subscriptions()) { if (metadataServer.ready(subscription->publisherTreeRoot()) && subscription->needsFirstChunk()) { - subscription->serveHeartbeat(); + subscription->sendEmptyInitialChunk(); subscription->firstChunkSent(); } } diff --git a/fboss/fsdb/oper/NaivePeriodicSubscribableStorage.h b/fboss/fsdb/oper/NaivePeriodicSubscribableStorage.h index 214fd09cc273d..491e8821f2d69 100644 --- a/fboss/fsdb/oper/NaivePeriodicSubscribableStorage.h +++ b/fboss/fsdb/oper/NaivePeriodicSubscribableStorage.h @@ -303,8 +303,16 @@ NaivePeriodicSubscribableStorage::convertPath( : path; } -template +template using NaivePeriodicSubscribableCowStorage = NaivePeriodicSubscribableStorage< - CowStorage, - CowSubscriptionManager>>; + CowStorage< + Root, + thrift_cow::ThriftStructNode< + Root, + thrift_cow::ThriftStructResolver, + EnableHybridStorage>>, + CowSubscriptionManager, + EnableHybridStorage>>>; } // namespace facebook::fboss::fsdb diff --git a/fboss/fsdb/oper/SubscribableStorage.h b/fboss/fsdb/oper/SubscribableStorage.h index 76c4d05c37d40..8201707464a29 100644 --- a/fboss/fsdb/oper/SubscribableStorage.h +++ b/fboss/fsdb/oper/SubscribableStorage.h @@ -45,13 +45,12 @@ class SubscribableStorage { static_cast(this)->stop_impl(); } - template < - typename Path, - typename = - std::enable_if_t, void>> + template folly::coro::AsyncGenerator&&> subscribe( SubscriberId subscriber, - Path&& path) { + Path&& path) + requires(std::is_same_v) + { return this->template subscribe( subscriber, path.begin(), path.end()); } @@ -69,15 +68,11 @@ class SubscribableStorage { subscriber, begin, end); } - template < - typename Path, - typename = std::enable_if_t< - std::is_same_v::RootT, RootT>, - void>> - folly::coro::AsyncGenerator&&> subscribe_encoded( - SubscriberId subscriber, - Path&& path, - OperProtocol protocol) { + template + folly::coro::AsyncGenerator&&> + subscribe_encoded(SubscriberId subscriber, Path&& path, OperProtocol protocol) + requires(std::is_same_v::RootT, RootT>) + { return this->subscribe_encoded( subscriber, path.begin(), path.end(), protocol); } @@ -106,13 +101,11 @@ class SubscribableStorage { subscriber, std::move(paths), protocol); } - template < - typename Path, - typename = std::enable_if_t< - std::is_same_v::RootT, RootT>, - void>> + template folly::coro::AsyncGenerator - subscribe_delta(SubscriberId subscriber, Path&& path, OperProtocol protocol) { + subscribe_delta(SubscriberId subscriber, Path&& path, OperProtocol protocol) + requires(std::is_same_v::RootT, RootT>) + { return this->subscribe_delta( subscriber, path.begin(), path.end(), protocol); } @@ -141,14 +134,12 @@ class SubscribableStorage { subscriber, std::move(paths), protocol); } - template < - typename Path, - typename = std::enable_if_t< - std::is_same_v::RootT, RootT>, - void>> + template folly::coro::AsyncGenerator subscribe_patch( SubscriberId subscriber, - Path&& path) { + Path&& path) + requires(std::is_same_v::RootT, RootT>) + { return this->subscribe_patch(subscriber, path.begin(), path.end()); } folly::coro::AsyncGenerator subscribe_patch( @@ -184,11 +175,10 @@ class SubscribableStorage { // wrapper calls to underlying storage - template < - typename Path, - typename = - std::enable_if_t, void>> - Result get(const Path& path) const { + template + Result get(const Path& path) const + requires(std::is_same_v) + { return this->template get(path.begin(), path.end()); } template @@ -200,11 +190,10 @@ class SubscribableStorage { return static_cast(this)->template get_impl(begin, end); } - template < - typename Path, - typename = - std::enable_if_t, void>> - Result get_encoded(const Path& path, OperProtocol protocol) const { + template + Result get_encoded(const Path& path, OperProtocol protocol) const + requires(std::is_same_v) + { return this->get_encoded(path.begin(), path.end(), protocol); } Result get_encoded(const ConcretePath& path, OperProtocol protocol) @@ -225,13 +214,10 @@ class SubscribableStorage { begin, end, protocol); } - template < - typename Path, - typename = - std::enable_if_t, void>> - std::optional set( - const Path& path, - typename Path::DataT value) { + template + std::optional set(const Path& path, typename Path::DataT value) + requires(std::is_same_v) + { return this->set(path.begin(), path.end(), std::move(value)); } @@ -245,13 +231,12 @@ class SubscribableStorage { begin, end, std::forward(value)); } - template < - typename Path, - typename = - std::enable_if_t, void>> + template std::optional set_encoded( const Path& path, - const OperState& state) { + const OperState& state) + requires(std::is_same_v) + { return this->set_encoded(path.begin(), path.end(), state); } std::optional set_encoded( @@ -264,11 +249,10 @@ class SubscribableStorage { return static_cast(this)->set_encoded_impl(begin, end, state); } - template < - typename Path, - typename = - std::enable_if_t, void>> - void remove(const Path& path) { + template + void remove(const Path& path) + requires(std::is_same_v) + { this->remove(path.begin(), path.end()); } void remove(const ConcretePath& path) { diff --git a/fboss/fsdb/oper/Subscription.cpp b/fboss/fsdb/oper/Subscription.cpp index 779814cabe737..a2285bba8214a 100644 --- a/fboss/fsdb/oper/Subscription.cpp +++ b/fboss/fsdb/oper/Subscription.cpp @@ -388,6 +388,10 @@ void PatchSubscription::allPublishersGone( // No-op as we expect the extended subscription to send the hangup message } +void PatchSubscription::sendEmptyInitialChunk() { + subscription_.serveHeartbeat(); +} + void PatchSubscription::serveHeartbeat() { // No-op as we expect the extended subscription to send the heartbeat } diff --git a/fboss/fsdb/oper/Subscription.h b/fboss/fsdb/oper/Subscription.h index 51475d8610c96..4de791f74c3eb 100644 --- a/fboss/fsdb/oper/Subscription.h +++ b/fboss/fsdb/oper/Subscription.h @@ -104,6 +104,10 @@ class Subscription : public BaseSubscription { return needsFirstChunk_; } + virtual void sendEmptyInitialChunk() { + serveHeartbeat(); + } + void firstChunkSent() { needsFirstChunk_ = false; } @@ -580,6 +584,8 @@ class PatchSubscription : public Subscription, private boost::noncopyable { void serveHeartbeat() override; + void sendEmptyInitialChunk() override; + void flush(const SubscriptionMetadataServer& metadataServer) override; bool isActive() const override; diff --git a/fboss/fsdb/oper/SubscriptionManager.cpp b/fboss/fsdb/oper/SubscriptionManager.cpp index f202cd1428db4..20219202051b1 100644 --- a/fboss/fsdb/oper/SubscriptionManager.cpp +++ b/fboss/fsdb/oper/SubscriptionManager.cpp @@ -3,9 +3,6 @@ #include "fboss/fsdb/oper/SubscriptionManager.h" #include "fboss/fsdb/oper/SubscriptionMetadataServer.h" -#include -#include - namespace facebook::fboss::fsdb { void SubscriptionManagerBase::registerExtendedSubscription( diff --git a/fboss/fsdb/oper/test_client.cpp b/fboss/fsdb/oper/test_client.cpp index bd7f48d70bd2d..a0a9268381c0d 100644 --- a/fboss/fsdb/oper/test_client.cpp +++ b/fboss/fsdb/oper/test_client.cpp @@ -11,7 +11,6 @@ #include "fboss/fsdb/if/gen-cpp2/FsdbService.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_common_constants.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_common_types.h" -#include "fboss/thrift_cow/nodes/Serializer.h" #include "servicerouter/client/cpp2/ServiceRouter.h" using namespace facebook::fboss::fsdb; diff --git a/fboss/fsdb/oper/tests/SubscribableStorageTests.cpp b/fboss/fsdb/oper/tests/SubscribableStorageTests.cpp index 49fc7820c55ac..3794e6772b1ee 100644 --- a/fboss/fsdb/oper/tests/SubscribableStorageTests.cpp +++ b/fboss/fsdb/oper/tests/SubscribableStorageTests.cpp @@ -29,7 +29,6 @@ namespace { using namespace facebook::fboss::fsdb; // TODO: templatize test cases -using TestSubscribableStorage = NaivePeriodicSubscribableCowStorage; using TestStructMembers = apache::thrift::reflect_struct::member; dynamic createTestDynamic() { @@ -66,38 +65,68 @@ folly::coro::Task consumeOne(Gen& generator) { } // namespace -class SubscribableStorageTests : public Test, public WithParamInterface { +template +struct TestParams { + static constexpr auto hybridStorage = EnableHybridStorage; + static constexpr auto lazyPathStoreCreation = LazyPathStoreCreation; +}; + +using SubscribableStorageTestTypes = ::testing::Types< + TestParams, + TestParams, + TestParams>; + +template +class SubscribableStorageTests : public Test { public: void SetUp() override { - FLAGS_lazyPathStoreCreation = GetParam(); + FLAGS_lazyPathStoreCreation = TestParams::lazyPathStoreCreation; auto testDyn = createTestDynamic(); testStruct = facebook::thrift::from_dynamic( testDyn, facebook::thrift::dynamic_format::JSON_1); } + auto initStorage(auto val) { + auto constexpr isHybridStorage = TestParams::hybridStorage; + using RootType = std::remove_cvref_t; + return NaivePeriodicSubscribableCowStorage(val); + } + + auto createCowStorage(auto val) { + auto constexpr isHybridStorage = TestParams::hybridStorage; + using RootType = std::remove_cvref_t; + return CowStorage< + RootType, + facebook::fboss::thrift_cow::ThriftStructNode< + RootType, + facebook::fboss::thrift_cow:: + ThriftStructResolver, + isHybridStorage>>(val); + } + protected: thriftpath::RootThriftPath root; TestStruct testStruct; }; -INSTANTIATE_TEST_SUITE_P( - SubscribableStorageTest, - SubscribableStorageTests, - Bool()); +TYPED_TEST_SUITE(SubscribableStorageTests, SubscribableStorageTestTypes); -TEST_P(SubscribableStorageTests, GetThrift) { - auto storage = TestSubscribableStorage(testStruct); - EXPECT_EQ(storage.get(root.tx()).value(), true); - EXPECT_EQ(storage.get(root.rx()).value(), false); - EXPECT_EQ(storage.get(root.member()).value(), testStruct.member().value()); +TYPED_TEST(SubscribableStorageTests, GetThrift) { + auto storage = this->initStorage(this->testStruct); + EXPECT_EQ(storage.get(this->root.tx()).value(), true); + EXPECT_EQ(storage.get(this->root.rx()).value(), false); + EXPECT_EQ( + storage.get(this->root.member()).value(), + this->testStruct.member().value()); EXPECT_EQ( - storage.get(root.structMap()[3]).value(), testStruct.structMap()->at(3)); - EXPECT_EQ(storage.get(root).value(), testStruct); + storage.get(this->root.structMap()[3]).value(), + this->testStruct.structMap()->at(3)); + EXPECT_EQ(storage.get(this->root).value(), this->testStruct); } -TEST_P(SubscribableStorageTests, SubscribeUnsubscribe) { - auto storage = TestSubscribableStorage(testStruct); - auto txPath = root.tx(); +TYPED_TEST(SubscribableStorageTests, SubscribeUnsubscribe) { + auto storage = this->initStorage(this->testStruct); + auto txPath = this->root.tx(); storage.start(); { auto generator = storage.subscribe(kSubscriber, std::move(txPath)); @@ -106,18 +135,18 @@ TEST_P(SubscribableStorageTests, SubscribeUnsubscribe) { WITH_RETRIES(EXPECT_EVENTUALLY_EQ(storage.numSubscriptions(), 0)); } -TEST_P(SubscribableStorageTests, SubscribeOne) { - auto storage = TestSubscribableStorage(testStruct); +TYPED_TEST(SubscribableStorageTests, SubscribeOne) { + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); - auto txPath = root.tx(); + auto txPath = this->root.tx(); storage.start(); auto generator = storage.subscribe(kSubscriber, std::move(txPath)); auto deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); EXPECT_EQ(deltaVal.newVal, true); EXPECT_EQ(deltaVal.oldVal, std::nullopt); - EXPECT_EQ(storage.set(root.tx(), false), std::nullopt); + EXPECT_EQ(storage.set(this->root.tx(), false), std::nullopt); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); @@ -125,17 +154,17 @@ TEST_P(SubscribableStorageTests, SubscribeOne) { EXPECT_EQ(deltaVal.newVal, false); } -TEST_P(SubscribableStorageTests, SubscribePathAddRemoveParent) { +TYPED_TEST(SubscribableStorageTests, SubscribePathAddRemoveParent) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); - auto path = root.structMap()[99].min(); + auto storage = this->initStorage(this->testStruct); + auto path = this->root.structMap()[99].min(); auto generator = storage.subscribe(kSubscriber, std::move(path)); storage.start(); TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; - EXPECT_EQ(storage.set(root.structMap()[99], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[99], newStruct), std::nullopt); auto deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -143,7 +172,7 @@ TEST_P(SubscribableStorageTests, SubscribePathAddRemoveParent) { EXPECT_EQ(deltaVal.newVal, 999); // now delete the parent and verify we see the deletion delta too - storage.remove(root.structMap()[99]); + storage.remove(this->root.structMap()[99]); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -151,12 +180,12 @@ TEST_P(SubscribableStorageTests, SubscribePathAddRemoveParent) { EXPECT_EQ(deltaVal.newVal, std::nullopt); } -TEST_P(SubscribableStorageTests, SubscribeDelta) { +TYPED_TEST(SubscribableStorageTests, SubscribeDelta) { FLAGS_serveHeartbeats = true; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); - auto generator = - storage.subscribe_delta(kSubscriber, root, OperProtocol::SIMPLE_JSON); + auto generator = storage.subscribe_delta( + kSubscriber, this->root, OperProtocol::SIMPLE_JSON); storage.start(); // First sync post subscription setup auto deltaVal = folly::coro::blockingWait( @@ -169,7 +198,7 @@ TEST_P(SubscribableStorageTests, SubscribeDelta) { ::testing::ContainerEq(std::vector({}))); // Make changes, we should see that come in as delta now - EXPECT_EQ(storage.set(root.tx(), false), std::nullopt); + EXPECT_EQ(storage.set(this->root.tx(), false), std::nullopt); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -186,14 +215,14 @@ TEST_P(SubscribableStorageTests, SubscribeDelta) { EXPECT_EQ(deltaVal.changes()->size(), 0); } -TEST_P(SubscribableStorageTests, SubscribePatch) { +TYPED_TEST(SubscribableStorageTests, SubscribePatch) { using namespace facebook::fboss::fsdb; using namespace facebook::fboss::thrift_cow; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); - auto generator = storage.subscribe_patch(kSubscriber, root); + auto generator = storage.subscribe_patch(kSubscriber, this->root); storage.start(); // Initial sync post subscription setup @@ -210,10 +239,10 @@ TEST_P(SubscribableStorageTests, SubscribePatch) { auto deserialized = facebook::fboss::thrift_cow:: deserializeBuf( *patch.protocol(), std::move(*rootPatch)); - EXPECT_EQ(deserialized, testStruct); + EXPECT_EQ(deserialized, this->testStruct); // Make changes, we should see that come in as a patch now - EXPECT_EQ(storage.set(root.tx(), false), std::nullopt); + EXPECT_EQ(storage.set(this->root.tx(), false), std::nullopt); msg = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); patchGroups = *msg.get_chunk().patchGroups(); @@ -233,15 +262,15 @@ TEST_P(SubscribableStorageTests, SubscribePatch) { EXPECT_FALSE(deserializedVal); } -TEST_P(SubscribableStorageTests, SubscribePatchUpdate) { +TYPED_TEST(SubscribableStorageTests, SubscribePatchUpdate) { using namespace facebook::fboss::fsdb; using namespace facebook::fboss::thrift_cow; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); storage.start(); - const auto& path = root.stringToStruct()["test"].max(); + const auto& path = this->root.stringToStruct()["test"].max(); auto generator = storage.subscribe_patch(kSubscriber, path); // set and check @@ -275,16 +304,16 @@ TEST_P(SubscribableStorageTests, SubscribePatchUpdate) { EXPECT_EQ(deserializedVal, 10); } -TEST_P(SubscribableStorageTests, SubscribePatchMulti) { +TYPED_TEST(SubscribableStorageTests, SubscribePatchMulti) { using namespace facebook::fboss::fsdb; using namespace facebook::fboss::thrift_cow; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); storage.start(); - const auto& path1 = root.stringToStruct()["test1"].max(); - const auto& path2 = root.stringToStruct()["test2"].max(); + const auto& path1 = this->root.stringToStruct()["test1"].max(); + const auto& path2 = this->root.stringToStruct()["test2"].max(); RawOperPath p1, p2; // validate both tokens and idTokens work p1.path() = path1.tokens(); @@ -315,11 +344,12 @@ TEST_P(SubscribableStorageTests, SubscribePatchMulti) { EXPECT_EQ(deserialized, 123); std::map stringToStruct = - storage.get(root.stringToStruct()).value(); + storage.get(this->root.stringToStruct()).value(); // update both structs now, should recv both patches stringToStruct["test1"].max() = 100; stringToStruct["test2"].max() = 200; - EXPECT_EQ(storage.set(root.stringToStruct(), stringToStruct), std::nullopt); + EXPECT_EQ( + storage.set(this->root.stringToStruct(), stringToStruct), std::nullopt); msg = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); patchGroups = *msg.get_chunk().patchGroups(); @@ -338,13 +368,13 @@ TEST_P(SubscribableStorageTests, SubscribePatchMulti) { } } -TEST_P(SubscribableStorageTests, SubscribePatchHeartbeat) { +TYPED_TEST(SubscribableStorageTests, SubscribePatchHeartbeat) { FLAGS_serveHeartbeats = true; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); storage.start(); - auto generator = storage.subscribe_patch(kSubscriber, root); + auto generator = storage.subscribe_patch(kSubscriber, this->root); auto msg = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(20))); @@ -356,11 +386,11 @@ TEST_P(SubscribableStorageTests, SubscribePatchHeartbeat) { EXPECT_EQ(msg.getType(), SubscriberMessage::Type::heartbeat); } -TEST_P(SubscribableStorageTests, SubscribeDeltaUpdate) { - auto storage = TestSubscribableStorage(testStruct); +TYPED_TEST(SubscribableStorageTests, SubscribeDeltaUpdate) { + auto storage = this->initStorage(this->testStruct); storage.start(); - const auto& path = root.stringToStruct()["test"].max(); + const auto& path = this->root.stringToStruct()["test"].max(); auto generator = storage.subscribe_delta(kSubscriber, path, OperProtocol::SIMPLE_JSON); @@ -389,10 +419,10 @@ TEST_P(SubscribableStorageTests, SubscribeDeltaUpdate) { EXPECT_TRUE(second.newState()); } -TEST_P(SubscribableStorageTests, SubscribeDeltaAddRemoveParent) { +TYPED_TEST(SubscribableStorageTests, SubscribeDeltaAddRemoveParent) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); - auto path = root.structMap()[99].min(); + auto storage = this->initStorage(this->testStruct); + auto path = this->root.structMap()[99].min(); auto generator = storage.subscribe_delta( kSubscriber, std::move(path), OperProtocol::SIMPLE_JSON); storage.start(); @@ -400,7 +430,7 @@ TEST_P(SubscribableStorageTests, SubscribeDeltaAddRemoveParent) { TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; - EXPECT_EQ(storage.set(root.structMap()[99], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[99], newStruct), std::nullopt); auto deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -416,7 +446,7 @@ TEST_P(SubscribableStorageTests, SubscribeDeltaAddRemoveParent) { EXPECT_EQ(folly::to(*first.newState()), 999); // now delete the parent and verify we see the deletion delta too - storage.remove(root.structMap()[99]); + storage.remove(this->root.structMap()[99]); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -431,17 +461,18 @@ TEST_P(SubscribableStorageTests, SubscribeDeltaAddRemoveParent) { EXPECT_EQ(folly::to(*first.oldState()), 999); } -TEST_P(SubscribableStorageTests, SubscribeEncodedPathSimple) { +TYPED_TEST(SubscribableStorageTests, SubscribeEncodedPathSimple) { FLAGS_serveHeartbeats = true; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); - const auto& path = root.stringToStruct()["test"].max(); + const auto& path = this->root.stringToStruct()["test"].max(); auto generator = storage.subscribe_encoded(kSubscriber, path, OperProtocol::SIMPLE_JSON); storage.start(); EXPECT_EQ( - storage.set(root.stringToStruct()["test"].max(), 123), std::nullopt); + storage.set(this->root.stringToStruct()["test"].max(), 123), + std::nullopt); auto deltaState = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -462,11 +493,11 @@ TEST_P(SubscribableStorageTests, SubscribeEncodedPathSimple) { EXPECT_EQ(deltaState.newVal->isHeartbeat(), true); } -TEST_P(SubscribableStorageTests, SubscribeExtendedPathSimple) { +TYPED_TEST(SubscribableStorageTests, SubscribeExtendedPathSimple) { // add subscription for a path that doesn't exist yet, then add parent FLAGS_serveHeartbeats = true; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); auto path = @@ -477,7 +508,8 @@ TEST_P(SubscribableStorageTests, SubscribeExtendedPathSimple) { kSubscriber, {path}, OperProtocol::SIMPLE_JSON); storage.start(); - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 998), std::nullopt); + EXPECT_EQ( + storage.set(this->root.mapOfStringToI32()["test1"], 998), std::nullopt); auto taggedVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -510,16 +542,17 @@ TEST_P(SubscribableStorageTests, SubscribeExtendedPathSimple) { EXPECT_EQ(taggedVal.size(), 0); } -TEST_P(SubscribableStorageTests, SubscribeExtendedPathMultipleChanges) { +TYPED_TEST(SubscribableStorageTests, SubscribeExtendedPathMultipleChanges) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); auto generator = storage.subscribe_encoded_extended( kSubscriber, {path}, OperProtocol::SIMPLE_JSON); storage.start(); EXPECT_EQ( - storage.set(root, createTestStructForExtendedTests()), std::nullopt); + storage.set(this->root, createTestStructForExtendedTests()), + std::nullopt); auto streamedVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -558,15 +591,16 @@ TEST_P(SubscribableStorageTests, SubscribeExtendedPathMultipleChanges) { } } -TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaSimple) { +TYPED_TEST(SubscribableStorageTests, SubscribeExtendedDeltaSimple) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); auto generator = storage.subscribe_delta_extended( kSubscriber, {path}, OperProtocol::SIMPLE_JSON); storage.start(); - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 998), std::nullopt); + EXPECT_EQ( + storage.set(this->root.mapOfStringToI32()["test1"], 998), std::nullopt); auto streamedVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -592,117 +626,8 @@ TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaSimple) { EXPECT_EQ(deserialized, 998); } -class SubscribableStorageTestsPathDelta - : public Test, - public WithParamInterface> { - public: - void SetUp() override { - const std::tuple params = GetParam(); - isPath = get<0>(params); - FLAGS_lazyPathStoreCreation = get<1>(params); - auto testDyn = createTestDynamic(); - testStruct = facebook::thrift::from_dynamic( - testDyn, facebook::thrift::dynamic_format::JSON_1); - } - - protected: - thriftpath::RootThriftPath root; - TestStruct testStruct; - bool isPath; -}; - -INSTANTIATE_TEST_SUITE_P( - SubscribableStorageTests, - SubscribableStorageTestsPathDelta, - Combine(Bool(), Bool())); - -CO_TEST_P(SubscribableStorageTestsPathDelta, UnregisterSubscriber) { - auto storage = TestSubscribableStorage(testStruct); - storage.start(); - - const auto path = - ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 1), std::nullopt); - - auto subscribeOneAndUnregister = [&](bool isPath) -> folly::coro::Task { - if (isPath) { - auto generator = storage.subscribe_encoded_extended( - kSubscriber, {path}, OperProtocol::SIMPLE_JSON); - auto ret = co_await co_awaitTry( - folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); - EXPECT_FALSE(ret.hasException()); - } else { - auto generator = storage.subscribe_delta_extended( - kSubscriber, {path}, OperProtocol::SIMPLE_JSON); - auto ret = co_await co_awaitTry( - folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); - EXPECT_FALSE(ret.hasException()); - } - }; - - // register sub1, get a update and unregister it - co_await subscribeOneAndUnregister(isPath); - - // update cow-thrift value - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 2), std::nullopt); - - // register a new sub2 and wait for next serveSubscription cycle. - // previous stale fully-resolved-subscription states from sub1 should be - // cleaned up - co_await subscribeOneAndUnregister(isPath); -} - -CO_TEST_P(SubscribableStorageTestsPathDelta, UnregisterSubscriberMulti) { - auto storage = TestSubscribableStorage(testStruct); - storage.start(); - - const auto path = - ext_path_builder::raw("mapOfStringToI32").regex("test.*").get(); - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 1), std::nullopt); - - auto subscribeOneAndUnregister = [&](bool isPath) -> folly::coro::Task { - if (isPath) { - auto generator = storage.subscribe_encoded_extended( - kSubscriber, {path}, OperProtocol::SIMPLE_JSON); - co_await folly::coro::sleep( - std::chrono::milliseconds(folly::Random::rand32(0, 5000))); - } else { - auto generator = storage.subscribe_delta_extended( - kSubscriber, {path}, OperProtocol::SIMPLE_JSON); - co_await folly::coro::sleep( - std::chrono::milliseconds(folly::Random::rand32(0, 5000))); - } - }; - - auto subscribeManyAndUnregister = [&](bool isPath, - int count) -> folly::coro::Task { - std::vector> tasks; - for (int i = 0; i < count; ++i) { - tasks.emplace_back(subscribeOneAndUnregister(isPath)); - } - co_await folly::coro::collectAllRange(std::move(tasks)); - }; - - folly::coro::AsyncScope backgroundScope; - backgroundScope.add(subscribeManyAndUnregister(isPath, 50) - .scheduleOn(folly::getGlobalCPUExecutor())); - - for (int j = 0; j < 5; ++j) { - for (int i = 0; i < 10; ++i) { - // update cow-thrift value - EXPECT_EQ( - storage.set(root.mapOfStringToI32()[fmt::format("test{}", i)], j), - std::nullopt); - } - co_await folly::coro::sleep(std::chrono::seconds(1)); - } - - co_await backgroundScope.joinAsync(); - co_return; -} - -CO_TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaUpdate) { - auto storage = TestSubscribableStorage(testStruct); +CO_TYPED_TEST(SubscribableStorageTests, SubscribeExtendedDeltaUpdate) { + auto storage = this->initStorage(this->testStruct); storage.start(); const auto& path = @@ -710,7 +635,7 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaUpdate) { auto generator = storage.subscribe_delta_extended( kSubscriber, {path}, OperProtocol::SIMPLE_JSON); - const auto& setPath = root.stringToStruct()["test1"].max(); + const auto& setPath = this->root.stringToStruct()["test1"].max(); EXPECT_EQ(storage.set(setPath, 1), std::nullopt); auto ret = co_await co_awaitTry( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); @@ -723,16 +648,17 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaUpdate) { EXPECT_FALSE(ret.hasException()); } -TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaMultipleChanges) { +TYPED_TEST(SubscribableStorageTests, SubscribeExtendedDeltaMultipleChanges) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); auto generator = storage.subscribe_delta_extended( kSubscriber, {path}, OperProtocol::SIMPLE_JSON); storage.start(); EXPECT_EQ( - storage.set(root, createTestStructForExtendedTests()), std::nullopt); + storage.set(this->root, createTestStructForExtendedTests()), + std::nullopt); auto streamedVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); @@ -773,17 +699,17 @@ TEST_P(SubscribableStorageTests, SubscribeExtendedDeltaMultipleChanges) { } } -TEST_P(SubscribableStorageTests, SetPatchWithPathSpec) { +TYPED_TEST(SubscribableStorageTests, SetPatchWithPathSpec) { // test set/patch on different path spec - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; // verify set API works as expected - EXPECT_EQ(storage.set(root.structMap()[99], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[99], newStruct), std::nullopt); - auto struct99 = storage.get(root.structMap()[99]); + auto struct99 = storage.get(this->root.structMap()[99]); EXPECT_EQ(*struct99->min(), 999); EXPECT_EQ(*struct99->max(), 1001); @@ -815,14 +741,14 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpec) { // confirm the new value didn't get in // instead it wiped entire content previously set - auto updatedMap = storage.get(root.structMap()); + auto updatedMap = storage.get(this->root.structMap()); EXPECT_EQ(updatedMap->size(), 0); } // test correct patching logic { // confirm the structMap is empty at beginning - auto currentMap = storage.get(root.structMap()); + auto currentMap = storage.get(this->root.structMap()); EXPECT_EQ(currentMap->size(), 0); // update min,max values @@ -835,7 +761,7 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpec) { // bring unit OperDeltaUnit unit; - auto correctPath = root.structMap()[99].tokens(); + auto correctPath = this->root.structMap()[99].tokens(); unit.path()->raw() = std::move(correctPath); unit.newState() = facebook::fboss::thrift_cow::serialize< apache::thrift::type_class::structure>(OperProtocol::BINARY, newStruct); @@ -849,7 +775,7 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpec) { EXPECT_EQ(storage.patch(delta), std::nullopt); // confirm the new value has been stamped to root->structMap[99] - auto updatedMapEntry = storage.get(root.structMap()[99]); + auto updatedMapEntry = storage.get(this->root.structMap()[99]); EXPECT_EQ(*updatedMapEntry->min(), *newStruct.min()); EXPECT_EQ(*updatedMapEntry->max(), *newStruct.max()); } @@ -857,17 +783,17 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpec) { // Similar test to SetPatchWithPathSpec except we are testing patching // TaggedOperState -TEST_P(SubscribableStorageTests, SetPatchWithPathSpecOnTaggedState) { +TYPED_TEST(SubscribableStorageTests, SetPatchWithPathSpecOnTaggedState) { // test set/patch on different path spec - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; // verify set API works as expected - EXPECT_EQ(storage.set(root.structMap()[99], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[99], newStruct), std::nullopt); - auto struct99 = storage.get(root.structMap()[99]); + auto struct99 = storage.get(this->root.structMap()[99]); EXPECT_EQ(*struct99->min(), 999); EXPECT_EQ(*struct99->max(), 1001); @@ -893,14 +819,14 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpecOnTaggedState) { // confirm the new value didn't get in // instead it wiped entire content previously set - auto updatedMap = storage.get(root.structMap()); + auto updatedMap = storage.get(this->root.structMap()); EXPECT_EQ(updatedMap->size(), 0); } // test correct patching logic { // confirm the structMap is empty at beginning - auto currentMap = storage.get(root.structMap()); + auto currentMap = storage.get(this->root.structMap()); EXPECT_EQ(currentMap->size(), 0); // update min,max values @@ -911,7 +837,7 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpecOnTaggedState) { TaggedOperState operState; operState.state()->protocol() = OperProtocol::BINARY; - auto correctPath = root.structMap()[99].tokens(); + auto correctPath = this->root.structMap()[99].tokens(); operState.path()->path() = std::move(correctPath); operState.state()->contents() = facebook::fboss::thrift_cow::serialize< apache::thrift::type_class::structure>(OperProtocol::BINARY, newStruct); @@ -922,23 +848,23 @@ TEST_P(SubscribableStorageTests, SetPatchWithPathSpecOnTaggedState) { EXPECT_EQ(storage.patch(operState), std::nullopt); // confirm the new value has been stamped to root->structMap[99] - auto updatedMapEntry = storage.get(root.structMap()[99]); + auto updatedMapEntry = storage.get(this->root.structMap()[99]); EXPECT_EQ(*updatedMapEntry->min(), *newStruct.min()); EXPECT_EQ(*updatedMapEntry->max(), *newStruct.max()); } } -TEST_P(SubscribableStorageTests, PruneSubscriptionPathStores) { +TYPED_TEST(SubscribableStorageTests, PruneSubscriptionPathStores) { // add and remove paths, and verify PathStores are pruned - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; - EXPECT_EQ(storage.set(root.structMap()[3], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[3], newStruct), std::nullopt); storage.start(); // create subscriber - const auto& path = root.stringToStruct()["test"].max(); + const auto& path = this->root.stringToStruct()["test"].max(); auto generator = storage.subscribe_delta(kSubscriber, path, OperProtocol::SIMPLE_JSON); @@ -952,7 +878,7 @@ TEST_P(SubscribableStorageTests, PruneSubscriptionPathStores) { XLOG(DBG2) << "initialNumPathStores: " << initialNumPathStores; // add another path and check PathStores count - EXPECT_EQ(storage.set(root.structMap()[99], newStruct), std::nullopt); + EXPECT_EQ(storage.set(this->root.structMap()[99], newStruct), std::nullopt); EXPECT_EQ(storage.set(path, 2), std::nullopt); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); @@ -969,7 +895,7 @@ TEST_P(SubscribableStorageTests, PruneSubscriptionPathStores) { } // now delete the added path - storage.remove(root.structMap()[99]); + storage.remove(this->root.structMap()[99]); EXPECT_EQ(storage.set(path, 3), std::nullopt); deltaVal = folly::coro::blockingWait( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); @@ -990,11 +916,11 @@ TEST_P(SubscribableStorageTests, PruneSubscriptionPathStores) { EXPECT_EQ(numAllocatedPathStore, finalNumPathStores); } -TEST_P(SubscribableStorageTests, ApplyPatch) { +TYPED_TEST(SubscribableStorageTests, ApplyPatch) { using namespace facebook::fboss::thrift_cow; - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); - TestStructSimple curStruct = *testStruct.member(); + TestStructSimple curStruct = *this->testStruct.member(); TestStructSimple newStruct; newStruct.min() = 999; newStruct.max() = 1001; @@ -1009,19 +935,19 @@ TEST_P(SubscribableStorageTests, ApplyPatch) { folly::to(TestStructMembers::member::id::value)}; auto patch = PatchBuilder::build(nodeA, nodeB, std::move(path)); - auto memberStruct = storage.get(root.member()); + auto memberStruct = storage.get(this->root.member()); EXPECT_EQ(*memberStruct->min(), 10); EXPECT_EQ(*memberStruct->max(), 20); storage.patch(std::move(patch)); - memberStruct = storage.get(root.member()); + memberStruct = storage.get(this->root.member()); EXPECT_EQ(*memberStruct->min(), 999); EXPECT_EQ(*memberStruct->max(), 1001); } -TEST_P(SubscribableStorageTests, PatchInvalidDeltaPath) { - auto storage = TestSubscribableStorage(testStruct); +TYPED_TEST(SubscribableStorageTests, PatchInvalidDeltaPath) { + auto storage = this->initStorage(this->testStruct); TestStructSimple newStruct; OperDelta delta; @@ -1039,16 +965,17 @@ TEST_P(SubscribableStorageTests, PatchInvalidDeltaPath) { delta.changes() = {unit}; } -CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchSimple) { +CO_TYPED_TEST(SubscribableStorageTests, SubscribeExtendedPatchSimple) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); int key = 0; auto generator = storage.subscribe_patch_extended(kSubscriber, {{key, path}}); storage.start(); - EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 998), std::nullopt); + EXPECT_EQ( + storage.set(this->root.mapOfStringToI32()["test1"], 998), std::nullopt); auto msg = co_await folly::coro::timeout( consumeOne(generator), std::chrono::seconds(5)); auto chunk = msg.get_chunk(); @@ -1060,15 +987,15 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchSimple) { ::testing::ElementsAre( "13", "test1")); // 13 is the id of mapOfStringToI32 - auto testStorage = CowStorage(testStruct); + auto testStorage = this->createCowStorage(this->testStruct); EXPECT_EQ( testStorage.patch(std::move(chunk.patchGroups()->at(key).front())), std::nullopt); EXPECT_EQ(testStorage.root()->toThrift().mapOfStringToI32()["test1"], 998); } -CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchUpdate) { - auto storage = TestSubscribableStorage(testStruct); +CO_TYPED_TEST(SubscribableStorageTests, SubscribeExtendedPatchUpdate) { + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); storage.start(); @@ -1076,7 +1003,7 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchUpdate) { ext_path_builder::raw("stringToStruct").regex("test1.*").raw("max").get(); auto generator = storage.subscribe_patch_extended(kSubscriber, {{0, path}}); - const auto& setPath = root.stringToStruct()["test1"].max(); + const auto& setPath = this->root.stringToStruct()["test1"].max(); EXPECT_EQ(storage.set(setPath, 1), std::nullopt); auto ret = co_await co_awaitTry( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); @@ -1087,11 +1014,24 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchUpdate) { ret = co_await co_awaitTry( folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); EXPECT_FALSE(ret.hasException()); + + // remove value + storage.remove(this->root.stringToStruct()["test1"]); + ret = co_await co_awaitTry( + folly::coro::timeout(consumeOne(generator), std::chrono::seconds(1))); + EXPECT_FALSE(ret.hasException()); + SubscriberChunk subChunk = *ret->chunk_ref(); + EXPECT_EQ(subChunk.patchGroups()->size(), 1); + EXPECT_EQ(subChunk.patchGroups()->at(0).size(), 1); + auto patch = subChunk.patchGroups()->at(0).front(); + EXPECT_EQ(patch.basePath()->size(), 3); + EXPECT_EQ( + patch.patch()->getType(), facebook::fboss::thrift_cow::PatchNode::del); } -CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchMultipleChanges) { +CO_TYPED_TEST(SubscribableStorageTests, SubscribeExtendedPatchMultipleChanges) { // add subscription for a path that doesn't exist yet, then add parent - auto storage = TestSubscribableStorage(testStruct); + auto storage = this->initStorage(this->testStruct); storage.setConvertToIDPaths(true); auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); int key = 0; @@ -1099,7 +1039,8 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchMultipleChanges) { storage.start(); EXPECT_EQ( - storage.set(root, createTestStructForExtendedTests()), std::nullopt); + storage.set(this->root, createTestStructForExtendedTests()), + std::nullopt); auto msg = co_await folly::coro::timeout( consumeOne(generator), std::chrono::seconds(5)); auto chunk = msg.get_chunk(); @@ -1123,7 +1064,7 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchMultipleChanges) { {"test19", 19}, }; - auto testStorage = CowStorage(testStruct); + auto testStorage = this->createCowStorage(this->testStruct); for (auto& patch : chunk.patchGroups()->at(key)) { // this will be testXY @@ -1134,3 +1075,114 @@ CO_TEST_P(SubscribableStorageTests, SubscribeExtendedPatchMultipleChanges) { expected.at(lastPathElem)); } } + +class SubscribableStorageTestsPathDelta + : public Test, + public WithParamInterface> { + public: + void SetUp() override { + const std::tuple params = GetParam(); + isPath = get<0>(params); + FLAGS_lazyPathStoreCreation = get<1>(params); + auto testDyn = createTestDynamic(); + testStruct = facebook::thrift::from_dynamic( + testDyn, facebook::thrift::dynamic_format::JSON_1); + } + + protected: + thriftpath::RootThriftPath root; + TestStruct testStruct; + bool isPath; +}; + +INSTANTIATE_TEST_SUITE_P( + SubscribableStorageSubTypeTests, + SubscribableStorageTestsPathDelta, + Combine(Bool(), Bool())); + +using TestSubscribableStorage = NaivePeriodicSubscribableCowStorage; + +CO_TEST_P(SubscribableStorageTestsPathDelta, UnregisterSubscriber) { + auto storage = TestSubscribableStorage(testStruct); + storage.start(); + + const auto path = + ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); + EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 1), std::nullopt); + + auto subscribeOneAndUnregister = [&](bool isPath) -> folly::coro::Task { + if (isPath) { + auto generator = storage.subscribe_encoded_extended( + kSubscriber, {path}, OperProtocol::SIMPLE_JSON); + auto ret = co_await co_awaitTry( + folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); + EXPECT_FALSE(ret.hasException()); + } else { + auto generator = storage.subscribe_delta_extended( + kSubscriber, {path}, OperProtocol::SIMPLE_JSON); + auto ret = co_await co_awaitTry( + folly::coro::timeout(consumeOne(generator), std::chrono::seconds(5))); + EXPECT_FALSE(ret.hasException()); + } + }; + + // register sub1, get a update and unregister it + co_await subscribeOneAndUnregister(isPath); + + // update cow-thrift value + EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 2), std::nullopt); + + // register a new sub2 and wait for next serveSubscription cycle. + // previous stale fully-resolved-subscription states from sub1 should be + // cleaned up + co_await subscribeOneAndUnregister(isPath); +} + +CO_TEST_P(SubscribableStorageTestsPathDelta, UnregisterSubscriberMulti) { + auto storage = TestSubscribableStorage(testStruct); + storage.start(); + + const auto path = + ext_path_builder::raw("mapOfStringToI32").regex("test.*").get(); + EXPECT_EQ(storage.set(root.mapOfStringToI32()["test1"], 1), std::nullopt); + + auto subscribeOneAndUnregister = [&](bool isPath) -> folly::coro::Task { + if (isPath) { + auto generator = storage.subscribe_encoded_extended( + kSubscriber, {path}, OperProtocol::SIMPLE_JSON); + co_await folly::coro::sleep( + std::chrono::milliseconds(folly::Random::rand32(0, 5000))); + } else { + auto generator = storage.subscribe_delta_extended( + kSubscriber, {path}, OperProtocol::SIMPLE_JSON); + co_await folly::coro::sleep( + std::chrono::milliseconds(folly::Random::rand32(0, 5000))); + } + }; + + auto subscribeManyAndUnregister = [&](bool isPath, + int count) -> folly::coro::Task { + std::vector> tasks; + for (int i = 0; i < count; ++i) { + tasks.emplace_back(subscribeOneAndUnregister(isPath)); + } + co_await folly::coro::collectAllRange(std::move(tasks)); + }; + + folly::coro::AsyncScope backgroundScope; + backgroundScope.add(subscribeManyAndUnregister(isPath, 50) + .scheduleOn(folly::getGlobalCPUExecutor())); + + for (int j = 0; j < 5; ++j) { + for (int i = 0; i < 10; ++i) { + // update cow-thrift value + EXPECT_EQ( + storage.set(root.mapOfStringToI32()[fmt::format("test{}", i)], j), + std::nullopt); + } + co_await folly::coro::sleep(std::chrono::seconds(1)); + } + + co_await backgroundScope.joinAsync(); + co_return; +} diff --git a/fboss/fsdb/oper/tests/SubscriptionTests.cpp b/fboss/fsdb/oper/tests/SubscriptionTests.cpp index aea19007caff8..e41d7f344158a 100644 --- a/fboss/fsdb/oper/tests/SubscriptionTests.cpp +++ b/fboss/fsdb/oper/tests/SubscriptionTests.cpp @@ -28,21 +28,32 @@ class SubscriptionTests : public ::testing::Test { auto makeSubscription() { std::vector path = {"test"}; - return SubscriptionT::create( - "test-sub", - path.begin(), - path.end(), - OperProtocol::BINARY, - std::nullopt, - heartbeatThread_->getEventBase(), - std::chrono::milliseconds(100)); + if constexpr (std::is_same_v) { + return SubscriptionT::create( + "test-sub", + path, + OperProtocol::BINARY, + std::nullopt, + heartbeatThread_->getEventBase(), + std::chrono::milliseconds(100)); + } else { + return SubscriptionT::create( + "test-sub", + path.begin(), + path.end(), + OperProtocol::BINARY, + std::nullopt, + heartbeatThread_->getEventBase(), + std::chrono::milliseconds(100)); + } } private: std::shared_ptr heartbeatThread_; }; -using SimpleSubTypes = ::testing::Types; +using SimpleSubTypes = ::testing:: + Types; TYPED_TEST_SUITE(SubscriptionTests, SimpleSubTypes); TYPED_TEST(SubscriptionTests, verifyHeartbeat) { diff --git a/fboss/fsdb/server/BUCK b/fboss/fsdb/server/BUCK index e87c5894a80cf..e4d25cd1f35d3 100644 --- a/fboss/fsdb/server/BUCK +++ b/fboss/fsdb/server/BUCK @@ -32,6 +32,7 @@ cpp_library( ":fsdb_oper_metadata_tracker", "//common/fb303/cpp:fb303", "//fb303:thread_cached_service_data", + "//fboss/fsdb/common:flags", "//fboss/fsdb/common:utils", "//fboss/fsdb/if:fsdb-cpp2-services", "//fboss/fsdb/if:fsdb_common-cpp2-types", @@ -47,10 +48,10 @@ cpp_library( "//folly:synchronized", "//folly/container:f14_hash", "//folly/coro:blocking_wait", - "//folly/coro:timeout", "//folly/io/async:scoped_event_base_thread", "//folly/logging:logging", "//thrift/lib/cpp/server:server_event_handler", + "//thrift/lib/cpp2:server", "//thrift/lib/cpp2/protocol:protocol", ], exported_external_deps = ["re2"], @@ -76,6 +77,7 @@ cpp_library( "//fboss/facebook/bitsflow:bitsflow_helper", "//fboss/fsdb/common:flags", "//fboss/fsdb/common:utils", + "//fboss/fsdb/if:fsdb_common-cpp2-types", "//folly/init:init", "//folly/io/async:async_signal_handler", "//folly/logging:logging", diff --git a/fboss/fsdb/server/FsdbMain.cpp b/fboss/fsdb/server/FsdbMain.cpp index 53634e13fdd35..ba283557854a7 100644 --- a/fboss/fsdb/server/FsdbMain.cpp +++ b/fboss/fsdb/server/FsdbMain.cpp @@ -20,6 +20,7 @@ int fsdbMain(int argc, char** argv) { auto handler = createThriftHandler(fsdbConfig); auto server = createThriftServer(fsdbConfig, handler); + handler->setThriftServer(server); startThriftServer(server, handler); return 0; } diff --git a/fboss/fsdb/server/Server.cpp b/fboss/fsdb/server/Server.cpp index 9fbe66987345e..843a16019def4 100644 --- a/fboss/fsdb/server/Server.cpp +++ b/fboss/fsdb/server/Server.cpp @@ -13,8 +13,6 @@ #include "fboss/fsdb/server/ServiceHandler.h" #include "fboss/fsdb/server/ThriftAcceptor.h" -#include - using namespace std::chrono_literals; // @donotremove DEFINE_bool(readConfigFile, true, "Whether config file should be read"); @@ -126,7 +124,10 @@ std::shared_ptr createThriftServer( auto server = std::make_shared(); server->setInterface(handler); std::vector addresses; - for (auto port : {FLAGS_fsdbPort, FLAGS_migrated_fsdbPort}) { + for (auto port : + {FLAGS_fsdbPort_high_priority, + FLAGS_migrated_fsdbPort, + FLAGS_fsdbPort}) { folly::SocketAddress address; address.setFromLocalPort(port); addresses.push_back(address); @@ -141,6 +142,7 @@ std::shared_ptr createThriftServer( server->setSSLPolicy(getThriftServerSSLPolicy()); server->setQueueTimeout( std::chrono::milliseconds(FLAGS_fsdb_queue_timeout_ms)); + server->addServerEventHandler(handler); if (FLAGS_enable_thrift_acceptor) { auto trustedSubnets = getTrustedSubnets(fsdbConfig->getThrift().get_trustedSubnets()); diff --git a/fboss/fsdb/server/ServiceHandler.cpp b/fboss/fsdb/server/ServiceHandler.cpp index 78d195a355e7c..89f8e8ed16de9 100644 --- a/fboss/fsdb/server/ServiceHandler.cpp +++ b/fboss/fsdb/server/ServiceHandler.cpp @@ -5,8 +5,9 @@ #include #include -#include #include +#include +#include "fboss/fsdb/common/Flags.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_common_constants.h" #include "fboss/fsdb/oper/PathValidator.h" #include "folly/CancellationToken.h" @@ -17,6 +18,12 @@ using namespace std::chrono_literals; // @donotremove +namespace apache { +namespace thrift { +class ThriftServer; +} // namespace thrift +} // namespace apache + DEFINE_int32(metricsTtl_s, 1 * 12 * 3600 /* twelve hours */, "TTL for metrics"); DEFINE_bool( @@ -1395,4 +1402,23 @@ void ServiceHandler::validateOperPublishPermissions( } } +void ServiceHandler::preStart(const folly::SocketAddress* /*address*/) { + if (!server_) { + return; + } + for (auto& socket : server_->getSockets()) { + folly::SocketAddress socketAddress = socket->getAddress(); + int port = socketAddress.getPort(); + if (port == FLAGS_fsdbPort_high_priority) { + // set tos = 0xc0, wherein dscp=48 (network control) + int tos = fsdb_common_constants::kTosForClassOfServiceNC(); + XLOG(INFO) << "set port " << port << " to tos=0xc0"; + socklen_t optsize = sizeof(tos); + folly::NetworkSocket netsocket = socket->getNetworkSocket(); + folly::netops::setsockopt( + netsocket, IPPROTO_IPV6, IPV6_TCLASS, &tos, optsize); + } + } +} + } // namespace facebook::fboss::fsdb diff --git a/fboss/fsdb/server/ServiceHandler.h b/fboss/fsdb/server/ServiceHandler.h index 0bea52f6a8b81..e3c7d717f57e0 100644 --- a/fboss/fsdb/server/ServiceHandler.h +++ b/fboss/fsdb/server/ServiceHandler.h @@ -203,6 +203,12 @@ class ServiceHandler : public FsdbServiceSvIf, return activePublishers_.copy(); } + void setThriftServer(std::shared_ptr server) { + server_ = server; + } + + void preStart(const folly::SocketAddress* /*address*/) override; + private: void registerSubscription( const OperSubscriberInfo& info, @@ -300,6 +306,7 @@ class ServiceHandler : public FsdbServiceSvIf, folly::Synchronized activeSubscriptions_; folly::Synchronized activePublishers_; + std::shared_ptr server_; }; } // namespace facebook::fboss::fsdb diff --git a/fboss/fsdb/server/ThriftAcceptor.h b/fboss/fsdb/server/ThriftAcceptor.h index e26ace111a4e0..57d3074945691 100644 --- a/fboss/fsdb/server/ThriftAcceptor.h +++ b/fboss/fsdb/server/ThriftAcceptor.h @@ -5,18 +5,7 @@ #include #include #include - -/** - * Default value sourced from Cfgr "neteng/qosdb/cos_utility_maps" - * dscpToClassOfServiceMap.ClassOfService.NC : 48 - * Rationale: In DSF clusters fsdb is a Tier 0 service required for - * bringing up network control plane and needs to be up with minimal - * dependencies. Therefore, sourcing the const in fbcode instead of - * a runtime configerator read. - * - * 8-bit TOS = 6-bit DSCP followed by 2-bit ECN - */ -const uint8_t kTosForClassOfServiceNC = 48 << 2; +#include "fboss/fsdb/if/gen-cpp2/fsdb_common_constants.h" namespace folly { class EventBase; @@ -134,7 +123,9 @@ class FsdbThriftAcceptorFactory final auto rc = folly::netops::getsockopt( netsocket, IPPROTO_IPV6, IPV6_TCLASS, &tos, &optsize); if (rc == 0) { - if (tos == kTosForClassOfServiceNC) { + // TODO(daiweix): also block connections to fsdbPort_high_priority + // port if not in trusted subnets + if (tos == fsdb_common_constants::kTosForClassOfServiceNC()) { XLOG(INFO) << "Reject connection with TOS(" << tos << ") from clientIp: " << clientIp.str() << ", not in trustedSubnets"; diff --git a/fboss/fsdb/tests/client/FsdbPublisherTest.cpp b/fboss/fsdb/tests/client/FsdbPublisherTest.cpp index 4bbb0b2a31dd2..76e2a6575ff71 100644 --- a/fboss/fsdb/tests/client/FsdbPublisherTest.cpp +++ b/fboss/fsdb/tests/client/FsdbPublisherTest.cpp @@ -14,7 +14,6 @@ #include #include -#include namespace { constexpr auto kPublisherId = "fsdb_test_publisher"; const std::vector kPublishRoot{"agent"}; diff --git a/fboss/fsdb/tests/client/FsdbTestClients.cpp b/fboss/fsdb/tests/client/FsdbTestClients.cpp index 1eacd35eb21ad..c6241f0ae9582 100644 --- a/fboss/fsdb/tests/client/FsdbTestClients.cpp +++ b/fboss/fsdb/tests/client/FsdbTestClients.cpp @@ -2,7 +2,6 @@ #include "fboss/fsdb/tests/client/FsdbTestClients.h" #include -#include "fboss/fsdb/if/FsdbModel.h" #include #include diff --git a/fboss/led_service/BUCK b/fboss/led_service/BUCK index 49f9e9fa6c9d1..1eac1cdb5866f 100644 --- a/fboss/led_service/BUCK +++ b/fboss/led_service/BUCK @@ -95,7 +95,6 @@ cpp_library( "//fboss/agent/platforms/common/yamp:yamp_platform_mapping", "//fboss/fsdb/client:fsdb_pub_sub", "//fboss/fsdb/client:fsdb_stream_client", - "//fboss/fsdb/common:flags", "//fboss/fsdb/if:fsdb_model", "//fboss/fsdb/if:fsdb_oper-cpp2-types", "//fboss/lib:common_file_utils", diff --git a/fboss/led_service/BspLedManager.cpp b/fboss/led_service/BspLedManager.cpp index 49f2220aed434..abdf27ab02f7c 100644 --- a/fboss/led_service/BspLedManager.cpp +++ b/fboss/led_service/BspLedManager.cpp @@ -4,8 +4,6 @@ #include #include "fboss/agent/EnumUtils.h" #include "fboss/lib/CommonFileUtils.h" -#include "fboss/lib/CommonPortUtils.h" -#include "fboss/lib/bsp/BspGenericSystemContainer.h" namespace facebook::fboss { diff --git a/fboss/led_service/FsdbSwitchStateSubscriber.cpp b/fboss/led_service/FsdbSwitchStateSubscriber.cpp index b9dedaa116883..6b2a7eb4a0904 100644 --- a/fboss/led_service/FsdbSwitchStateSubscriber.cpp +++ b/fboss/led_service/FsdbSwitchStateSubscriber.cpp @@ -4,7 +4,6 @@ #include #include #include "fboss/fsdb/client/FsdbPubSubManager.h" -#include "fboss/fsdb/common/Flags.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/led_service/LedManager.h" diff --git a/fboss/led_service/LedManager.cpp b/fboss/led_service/LedManager.cpp index 7b863de8d5620..390586b7a3e43 100644 --- a/fboss/led_service/LedManager.cpp +++ b/fboss/led_service/LedManager.cpp @@ -2,11 +2,7 @@ #include "fboss/led_service/LedManager.h" #include "fboss/agent/EnumUtils.h" -#include "fboss/agent/platforms/common/darwin/DarwinPlatformMapping.h" -#include "fboss/agent/platforms/common/elbert/ElbertPlatformMapping.h" -#include "fboss/agent/platforms/common/fuji/FujiPlatformMapping.h" #include "fboss/lib/CommonFileUtils.h" -#include "fboss/lib/CommonPortUtils.h" #include "fboss/lib/platforms/PlatformProductInfo.h" namespace facebook::fboss { diff --git a/fboss/led_service/MinipackBaseLedManager.cpp b/fboss/led_service/MinipackBaseLedManager.cpp index e70a2af04bb47..f226f76b53bbb 100644 --- a/fboss/led_service/MinipackBaseLedManager.cpp +++ b/fboss/led_service/MinipackBaseLedManager.cpp @@ -3,7 +3,6 @@ #include "fboss/led_service/MinipackBaseLedManager.h" #include "fboss/agent/EnumUtils.h" #include "fboss/lib/CommonFileUtils.h" -#include "fboss/lib/CommonPortUtils.h" #include "fboss/lib/fpga/MinipackLed.h" namespace facebook::fboss { diff --git a/fboss/led_service/fbpkg/BUCK b/fboss/led_service/fbpkg/BUCK index fc678f8fe4187..4c94bb82d8a93 100644 --- a/fboss/led_service/fbpkg/BUCK +++ b/fboss/led_service/fbpkg/BUCK @@ -4,7 +4,6 @@ oncall("fboss_optics_phy") fbpkg.builder( name = "neteng.fboss.led_service", - buck_opts = fbpkg.buck_opts(version = "v2"), expire_days = 20, path_actions = { "led_service": "//fboss/led_service:led_service", @@ -15,7 +14,6 @@ fbpkg.builder( fbpkg.builder( name = "neteng.fboss.led_service.test_artifacts", - buck_opts = fbpkg.buck_opts(version = "v2"), expire_days = 20, path_actions = { "led_service_hw_test": "//fboss/led_service/hw_test:led_service_hw_test", diff --git a/fboss/lib/AlertLogger.cpp b/fboss/lib/AlertLogger.cpp index c1cb0b632e777..bff42b1e4a046 100644 --- a/fboss/lib/AlertLogger.cpp +++ b/fboss/lib/AlertLogger.cpp @@ -9,8 +9,6 @@ */ #include "fboss/lib/AlertLogger.h" -#include - namespace facebook::fboss { // Prefix for fboss alert tag diff --git a/fboss/lib/CommonFileUtils.cpp b/fboss/lib/CommonFileUtils.cpp index daa159b7c5d96..e05dcec4283f2 100644 --- a/fboss/lib/CommonFileUtils.cpp +++ b/fboss/lib/CommonFileUtils.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include "fboss/agent/SysError.h" #include diff --git a/fboss/lib/CommonUtils.cpp b/fboss/lib/CommonUtils.cpp index 4c36d637db56d..617ae58924f5f 100644 --- a/fboss/lib/CommonUtils.cpp +++ b/fboss/lib/CommonUtils.cpp @@ -46,4 +46,17 @@ void runAndRemoveScript( removeFile(script); } +void runCommandWithRetries( + const std::vector& argv, + const std::chrono::milliseconds& ms) { + while (true) { + try { + runCommand(argv); + break; + } catch (const std::exception& /*ex*/) { + std::this_thread::sleep_for(ms); + XLOG(ERR) << "Retrying..."; + } + } +} } // namespace facebook::fboss diff --git a/fboss/lib/CommonUtils.h b/fboss/lib/CommonUtils.h index 8efc64b062048..ff2f718f98a1b 100644 --- a/fboss/lib/CommonUtils.h +++ b/fboss/lib/CommonUtils.h @@ -211,5 +211,8 @@ void runAndRemoveScript( const std::vector& args = {}); void runShellCommand(const std::string& command, bool throwOnError = true); void runCommand(const std::vector& argv, bool throwOnError = true); +void runCommandWithRetries( + const std::vector& argv, + const std::chrono::milliseconds& ms = std::chrono::milliseconds(500)); } // namespace facebook::fboss diff --git a/fboss/lib/bsp/BUCK b/fboss/lib/bsp/BUCK index 9b921feb542a0..174fdaddd9640 100644 --- a/fboss/lib/bsp/BUCK +++ b/fboss/lib/bsp/BUCK @@ -109,12 +109,10 @@ cpp_library( "//folly:format", "//folly:range", "//folly:singleton", - "//folly/lang:bits", "//folly/logging:logging", "//thrift/lib/cpp/util:enum_utils", ], exported_external_deps = [ - "gflags", ("libgpiod", None, "gpiod"), ], ) diff --git a/fboss/lib/bsp/BspPhyContainer.cpp b/fboss/lib/bsp/BspPhyContainer.cpp index 03c5bc39749d1..9a2f5c37c8a22 100644 --- a/fboss/lib/bsp/BspPhyContainer.cpp +++ b/fboss/lib/bsp/BspPhyContainer.cpp @@ -1,7 +1,6 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. #include "fboss/lib/bsp/BspPhyContainer.h" -#include "fboss/lib/bsp/BspPlatformMapping.h" #include "fboss/lib/bsp/gen-cpp2/bsp_platform_mapping_types.h" namespace facebook { diff --git a/fboss/lib/bsp/BspPhyIO.cpp b/fboss/lib/bsp/BspPhyIO.cpp index 132053287ccec..cb680a9200e2d 100644 --- a/fboss/lib/bsp/BspPhyIO.cpp +++ b/fboss/lib/bsp/BspPhyIO.cpp @@ -2,16 +2,10 @@ #include "fboss/lib/bsp/BspPhyIO.h" -#include #include #include -#include #include -#include -#include -#include #include -#include #include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/bsp/gen-cpp2/bsp_platform_mapping_types.h" #include "fboss/mdio/BspDeviceMdio.h" diff --git a/fboss/lib/bsp/BspTransceiverContainer.cpp b/fboss/lib/bsp/BspTransceiverContainer.cpp index b0dcb1e08bfe0..40a5cc3c56b47 100644 --- a/fboss/lib/bsp/BspTransceiverContainer.cpp +++ b/fboss/lib/bsp/BspTransceiverContainer.cpp @@ -1,7 +1,6 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. #include "fboss/lib/bsp/BspTransceiverContainer.h" -#include "fboss/lib/bsp/BspPlatformMapping.h" #include "fboss/lib/bsp/gen-cpp2/bsp_platform_mapping_types.h" namespace facebook { diff --git a/fboss/lib/bsp/BspTransceiverCpldAccess.cpp b/fboss/lib/bsp/BspTransceiverCpldAccess.cpp index 0e508f2c55ffe..a04be60e3aab2 100644 --- a/fboss/lib/bsp/BspTransceiverCpldAccess.cpp +++ b/fboss/lib/bsp/BspTransceiverCpldAccess.cpp @@ -2,18 +2,11 @@ #include "fboss/lib/bsp/BspTransceiverCpldAccess.h" -#include #include #include -#include #include -#include -#include -#include #include -#include #include "fboss/lib/CommonFileUtils.h" -#include "fboss/lib/bsp/BspTransceiverAccess.h" #include "fboss/lib/bsp/gen-cpp2/bsp_platform_mapping_types.h" namespace facebook { diff --git a/fboss/lib/bsp/BspTransceiverGpioAccess.cpp b/fboss/lib/bsp/BspTransceiverGpioAccess.cpp index 64af51fb47f85..d77814f3e3214 100644 --- a/fboss/lib/bsp/BspTransceiverGpioAccess.cpp +++ b/fboss/lib/bsp/BspTransceiverGpioAccess.cpp @@ -2,7 +2,6 @@ #include "fboss/lib/bsp/BspTransceiverGpioAccess.h" #include -#include #include #include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/GpiodLine.h" diff --git a/fboss/lib/bsp/BspTransceiverIO.cpp b/fboss/lib/bsp/BspTransceiverIO.cpp index bf41b0ce4e811..55984b90f51cd 100644 --- a/fboss/lib/bsp/BspTransceiverIO.cpp +++ b/fboss/lib/bsp/BspTransceiverIO.cpp @@ -2,16 +2,10 @@ #include "fboss/lib/bsp/BspTransceiverIO.h" -#include #include #include -#include #include -#include -#include -#include #include -#include #include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/bsp/gen-cpp2/bsp_platform_mapping_types.h" diff --git a/fboss/lib/bsp/morgan800cc/Morgan800ccBspPlatformMapping.cpp b/fboss/lib/bsp/morgan800cc/Morgan800ccBspPlatformMapping.cpp index 259a91168b870..96a2edbb2ff41 100644 --- a/fboss/lib/bsp/morgan800cc/Morgan800ccBspPlatformMapping.cpp +++ b/fboss/lib/bsp/morgan800cc/Morgan800ccBspPlatformMapping.cpp @@ -2254,6 +2254,35 @@ constexpr auto kJsonBspPlatformMappingStr = R"( "7": 128, "8": 128 } + }, + "65": { + "tcvrId": 65, + "accessControl": { + "controllerId": "65", + "type": 1, + "reset": { + "sysfsPath": "/run/devmap/xcvrs/xcvr_65/xcvr_reset", + "mask": 1, + "gpioOffset": 0, + "resetHoldHi": 0 + }, + "presence": { + "sysfsPath": "/run/devmap/xcvrs/xcvr_65/xcvr_present", + "mask": 1, + "gpioOffset": 0, + "presentHoldHi": 0 + }, + "gpioChip": "" + }, + "io": { + "controllerId": "65", + "type": 1, + "devicePath": "/run/devmap/i2c-busses/XCVR_65" + }, + "tcvrLaneToLedId": { + "1": 129, + "2": 129 + } } }, "phyMapping": { @@ -3030,6 +3059,12 @@ constexpr auto kJsonBspPlatformMappingStr = R"( "bluePath": "/sys/class/leds/port64_led2:blue:status", "yellowPath": "/sys/class/leds/port64_led2:yellow:status", "transceiverId": 64 + }, + "129": { + "id": 129, + "bluePath": "/sys/class/leds/port65_led1:blue:status", + "yellowPath": "/sys/class/leds/port65_led1:yellow:status", + "transceiverId": 65 } } } diff --git a/fboss/lib/fpga/BUCK b/fboss/lib/fpga/BUCK index 6ec51a953e9af..b90847b503fba 100644 --- a/fboss/lib/fpga/BUCK +++ b/fboss/lib/fpga/BUCK @@ -51,7 +51,6 @@ cpp_library( "//fboss/agent:utils", "//fboss/lib/i2c:i2c_ctrl", "//fboss/lib/usb:i2-api", - "//folly:cpp_attributes", "//folly:format", "//folly:range", "//folly:synchronized", @@ -74,7 +73,6 @@ cpp_library( "//fboss/agent:utils", "//fboss/lib/i2c:i2c_ctrl", "//fboss/lib/usb:i2-api", - "//folly:cpp_attributes", "//folly:format", "//folly:range", "//folly:synchronized", @@ -161,7 +159,6 @@ cpp_library( ":fb_fpga_i2c", ":wedge400_fpga", "//fboss/agent:utils", - "//fboss/lib:pci_access", "//fboss/lib/usb:i2-api", "//folly:format", "//folly/logging:logging", diff --git a/fboss/lib/fpga/FbFpgaI2c.cpp b/fboss/lib/fpga/FbFpgaI2c.cpp index b4fb2b2ded4f8..61a76d7688e81 100644 --- a/fboss/lib/fpga/FbFpgaI2c.cpp +++ b/fboss/lib/fpga/FbFpgaI2c.cpp @@ -5,7 +5,6 @@ #include "fboss/agent/Utils.h" #include "fboss/lib/fpga/FbFpgaRegisters.h" -#include #include #include #include diff --git a/fboss/lib/fpga/FbFpgaSpi.cpp b/fboss/lib/fpga/FbFpgaSpi.cpp index 5fb7b72aca503..98b76e60e6f9a 100644 --- a/fboss/lib/fpga/FbFpgaSpi.cpp +++ b/fboss/lib/fpga/FbFpgaSpi.cpp @@ -5,7 +5,6 @@ #include "fboss/agent/Utils.h" #include "fboss/lib/fpga/FbFpgaRegisters.h" -#include #include #include #include diff --git a/fboss/lib/fpga/Wedge400I2CBus.cpp b/fboss/lib/fpga/Wedge400I2CBus.cpp index 661193d0532e1..fd3b964f08c21 100644 --- a/fboss/lib/fpga/Wedge400I2CBus.cpp +++ b/fboss/lib/fpga/Wedge400I2CBus.cpp @@ -3,7 +3,6 @@ #include "fboss/lib/fpga/Wedge400I2CBus.h" #include "fboss/agent/Utils.h" -#include "fboss/lib/PciAccess.h" #include "fboss/lib/fpga/Wedge400Fpga.h" #include "fboss/lib/usb/TransceiverI2CApi.h" diff --git a/fboss/lib/i2c/BUCK b/fboss/lib/i2c/BUCK index 47ef7233224c2..d5c4eb2489bae 100644 --- a/fboss/lib/i2c/BUCK +++ b/fboss/lib/i2c/BUCK @@ -44,13 +44,8 @@ cpp_library( ":i2c_controller_stats-cpp2-types", "//fboss/agent:utils", "//folly:format", - "//folly:range", "//folly:synchronized", "//folly/io/async:async_base", - "//folly/lang:bits", "//folly/logging:logging", ], - exported_external_deps = [ - "gflags", - ], ) diff --git a/fboss/lib/i2c/I2cRdWrIo.cpp b/fboss/lib/i2c/I2cRdWrIo.cpp index de26e48dc8c36..10b3821b5fa43 100644 --- a/fboss/lib/i2c/I2cRdWrIo.cpp +++ b/fboss/lib/i2c/I2cRdWrIo.cpp @@ -2,12 +2,7 @@ #include "fboss/lib/i2c/I2cRdWrIo.h" #include -#include #include -#include -#include -#include -#include #include #include #include diff --git a/fboss/lib/i2c/I2cSmbusIo.cpp b/fboss/lib/i2c/I2cSmbusIo.cpp index b4574924aca6c..66f968e25e56d 100644 --- a/fboss/lib/i2c/I2cSmbusIo.cpp +++ b/fboss/lib/i2c/I2cSmbusIo.cpp @@ -2,12 +2,7 @@ #include "fboss/lib/i2c/I2cSmbusIo.h" #include -#include #include -#include -#include -#include -#include #include #include #include diff --git a/fboss/lib/phy/BUCK b/fboss/lib/phy/BUCK index 102eb1c99039c..072ed7816f0e1 100644 --- a/fboss/lib/phy/BUCK +++ b/fboss/lib/phy/BUCK @@ -141,7 +141,6 @@ cpp_library( "//fboss/mka_service/if:mka_structs-cpp2-types", "//folly:synchronized", "//folly/futures:core", - "//folly/json:dynamic", "//folly/logging:logging", "//thrift/lib/cpp/util:enum_utils", ], @@ -177,7 +176,6 @@ cpp_library( "//fboss/lib/phy/facebook/credo:credo", "//fboss/mdio:facebook_fpga_mdio", "//folly:conv", - "//folly:random", "//folly/logging:logging", ], ) diff --git a/fboss/lib/phy/PhyManager.cpp b/fboss/lib/phy/PhyManager.cpp index 1cf9034eab0cc..be709dacce85d 100644 --- a/fboss/lib/phy/PhyManager.cpp +++ b/fboss/lib/phy/PhyManager.cpp @@ -12,7 +12,6 @@ #include "fboss/lib/phy/gen-cpp2/phy_types.h" #include -#include #include #include #include diff --git a/fboss/lib/phy/PhyUtils.cpp b/fboss/lib/phy/PhyUtils.cpp index 32e9349ff52dc..86efc15c3fa23 100644 --- a/fboss/lib/phy/PhyUtils.cpp +++ b/fboss/lib/phy/PhyUtils.cpp @@ -84,6 +84,29 @@ void updateCorrectedBitsAndPreFECBer( utility::ber(correctedBitsDelta, speed, timeDeltaInSeconds); } +void updateFecTail( + phy::RsFecInfo& fecInfo, + const phy::RsFecInfo& oldRsFecInfo) { + if (fecInfo.codewordStats()->empty()) { + return; + } + + short fecTail = 0; + for (const auto& codewordStat : *fecInfo.codewordStats()) { + long previousCodewords = 0; + if (oldRsFecInfo.codewordStats()->find(codewordStat.first) != + oldRsFecInfo.codewordStats()->end()) { + previousCodewords = oldRsFecInfo.codewordStats()->at(codewordStat.first); + } + if (previousCodewords < codewordStat.second) { + // If we have more codewords for a given symbol now than the previous + // codeword, update the fec tail if its more than the previous tail + fecTail = fecTail > codewordStat.first ? fecTail : codewordStat.first; + } + } + fecInfo.fecTail() = fecTail; +} + void updateSignalDetectChangedCount( int changedCount, int lane, diff --git a/fboss/lib/phy/PhyUtils.h b/fboss/lib/phy/PhyUtils.h index aaa142dd20c62..ae0a9ae4126be 100644 --- a/fboss/lib/phy/PhyUtils.h +++ b/fboss/lib/phy/PhyUtils.h @@ -23,6 +23,8 @@ void updateCorrectedBitsAndPreFECBer( phy::FecMode fecMode, cfg::PortSpeed speed); +void updateFecTail(phy::RsFecInfo& fecInfo, const phy::RsFecInfo& oldRsFecInfo); + void updateSignalDetectChangedCount( int changedCount, int lane, diff --git a/fboss/lib/phy/SaiPhyManager.cpp b/fboss/lib/phy/SaiPhyManager.cpp index ba1c489bb62f6..264c3cf9a7fbe 100644 --- a/fboss/lib/phy/SaiPhyManager.cpp +++ b/fboss/lib/phy/SaiPhyManager.cpp @@ -373,7 +373,6 @@ void SaiPhyManager::programOnePort( // Get phy platform auto globalPhyID = getGlobalXphyIDbyPortIDLocked(wLockedCache); auto saiPlatform = getSaiPlatform(globalPhyID); - auto saiSwitch = static_cast(saiPlatform->getHwSwitch()); const auto& desiredPhyPortConfig = getDesiredPhyPortConfig(portId, portProfileId, transceiverInfo); @@ -588,8 +587,6 @@ void SaiPhyManager::setSaiPortLoopbackState( auto saiPlatform = getSaiPlatform(globalPhyID); auto saiSwitch = static_cast(saiPlatform->getHwSwitch()); - auto switchId = saiSwitch->getSaiSwitchId(); - // Get port handle and then get port attributes auto portHandle = saiSwitch->managerTable()->portManager().getPortHandle(swPort); @@ -627,8 +624,6 @@ void SaiPhyManager::setSaiPortAdminState( auto saiPlatform = getSaiPlatform(globalPhyID); auto saiSwitch = static_cast(saiPlatform->getHwSwitch()); - auto switchId = saiSwitch->getSaiSwitchId(); - // Get port handle and then get port attributes auto portHandle = saiSwitch->managerTable()->portManager().getPortHandle(swPort); @@ -1071,7 +1066,6 @@ void SaiPhyManager::xphyPortStateToggle(PortID swPort, phy::Side side) { } auto saiSwitch = static_cast(saiPlatform->getHwSwitch()); - auto switchId = saiSwitch->getSaiSwitchId(); // Get port handle and then get port adapter key (SAI object id) auto portHandle = diff --git a/fboss/lib/phy/phy.thrift b/fboss/lib/phy/phy.thrift index 97d42f588b9ca..ee9786243a817 100644 --- a/fboss/lib/phy/phy.thrift +++ b/fboss/lib/phy/phy.thrift @@ -431,6 +431,7 @@ struct RsFecInfo { // Map of symbol error to number of codewords with that many symbol errors. // Stores cumulative counts 5: map codewordStats; + 6: optional i16 fecTail; } struct PmdInfo { diff --git a/fboss/lib/platforms/PlatformProductInfo.cpp b/fboss/lib/platforms/PlatformProductInfo.cpp index c0af196a58d90..5a6c45a5b5bbe 100644 --- a/fboss/lib/platforms/PlatformProductInfo.cpp +++ b/fboss/lib/platforms/PlatformProductInfo.cpp @@ -133,7 +133,8 @@ void PlatformProductInfo::initMode() { modelName.find("ASY-92493-104") == 0 || modelName.find("ASY-92458-104") == 0 || modelName.find("DCS-DL-7700R4C-38PE-AC-F") == 0 || - modelName.find("DCS-DL-7700R4C-38PE-DC-F") == 0) { + modelName.find("DCS-DL-7700R4C-38PE-DC-F") == 0 || + modelName.find("DCS-DL-7700R4C-38PE-B-F") == 0) { type_ = PlatformType::PLATFORM_MERU800BIA; } else if ( modelName.find("Meru800biab") == 0 || diff --git a/fboss/lib/test/BUCK b/fboss/lib/test/BUCK index 5f5b7f10a0681..49c543036cfc7 100644 --- a/fboss/lib/test/BUCK +++ b/fboss/lib/test/BUCK @@ -169,7 +169,6 @@ cpp_unittest( "CommonPortUtilsTest.cpp", ], deps = [ - "//fboss/agent:fboss-error", "//fboss/lib:common_file_utils", "//fboss/lib:common_port_utils", "//folly:format", @@ -179,6 +178,5 @@ cpp_unittest( ], external_deps = [ "glog", - ("boost", None, "boost_filesystem"), ], ) diff --git a/fboss/lib/test/CommonFileUtilsTest.cpp b/fboss/lib/test/CommonFileUtilsTest.cpp index 49aa35e7efa50..96dd407d68f7d 100644 --- a/fboss/lib/test/CommonFileUtilsTest.cpp +++ b/fboss/lib/test/CommonFileUtilsTest.cpp @@ -1,13 +1,9 @@ // (c) Facebook, Inc. and its affiliates. Confidential and proprietary. #include "fboss/lib/CommonFileUtils.h" -#include #include #include #include -#include "fboss/agent/SysError.h" - -#include namespace facebook::fboss { diff --git a/fboss/lib/test/PciDeviceTest.cpp b/fboss/lib/test/PciDeviceTest.cpp index de7674190083c..df2f070cd9599 100644 --- a/fboss/lib/test/PciDeviceTest.cpp +++ b/fboss/lib/test/PciDeviceTest.cpp @@ -11,7 +11,6 @@ #include #include #include -#include extern "C" { #include diff --git a/fboss/lib/usb/Minipack16QI2CBus.cpp b/fboss/lib/usb/Minipack16QI2CBus.cpp index bc277b7700812..7cf7a851ae0fc 100644 --- a/fboss/lib/usb/Minipack16QI2CBus.cpp +++ b/fboss/lib/usb/Minipack16QI2CBus.cpp @@ -11,7 +11,6 @@ #include "fboss/lib/fpga/MinipackSystemContainer.h" #include -#include namespace facebook::fboss { Minipack16QI2CBus::Minipack16QI2CBus() { diff --git a/fboss/lib/usb/tests/MockTransceiverI2CApi.cpp b/fboss/lib/usb/tests/MockTransceiverI2CApi.cpp index d7d63121e58b7..8bf6b69aec881 100644 --- a/fboss/lib/usb/tests/MockTransceiverI2CApi.cpp +++ b/fboss/lib/usb/tests/MockTransceiverI2CApi.cpp @@ -40,7 +40,7 @@ void MockTransceiverI2CApi::moduleRead( } } else if (const auto tcvrItor = overridenTransceivers_.find(module); tcvrItor != overridenTransceivers_.end()) { - tcvrItor->second->readTransceiver(param, buf); + tcvrItor->second->readTransceiver(param, buf, 0); } else { XLOG(ERR) << "moduleRead(module=" << module << ", i2cAddress=" << i2cAddress diff --git a/fboss/mdio/BUCK b/fboss/mdio/BUCK index 815414985b49f..d0c0f7e2ce6cf 100644 --- a/fboss/mdio/BUCK +++ b/fboss/mdio/BUCK @@ -68,10 +68,6 @@ cpp_library( ":mdio", "//folly:format", "//folly:range", - "//folly/lang:bits", "//folly/logging:logging", ], - exported_external_deps = [ - "gflags", - ], ) diff --git a/fboss/mdio/BspDeviceMdio.cpp b/fboss/mdio/BspDeviceMdio.cpp index f20c385caa50e..b88bdaf5b2ab1 100644 --- a/fboss/mdio/BspDeviceMdio.cpp +++ b/fboss/mdio/BspDeviceMdio.cpp @@ -11,17 +11,9 @@ #include #include #include -#include #include -#include -#include -#include -#include -#include #include -#include #include -#include #include #include "fboss/mdio/MdioError.h" diff --git a/fboss/oss/doc/Building_FBOSS_on_containers.md b/fboss/oss/doc/Building_FBOSS_on_containers.md index 81afec8debeb0..9eb8d54d4e7f6 100644 --- a/fboss/oss/doc/Building_FBOSS_on_containers.md +++ b/fboss/oss/doc/Building_FBOSS_on_containers.md @@ -7,117 +7,119 @@ This document covers how to build FBOSS binaries and all its library dependencies on Docker containers. -## Build system requirements +## Stop any existing containers and clean docker artifacts (optional) -Any VM (preferably CentOS 8) that has Internet access - - -## Initial setup on VM - -Setup the environmental variables based on the container distro (preferably CentOS 8) - +This isn't a strictly required step, although in some cases you may want to +build a completely fresh container to use, in which case the below commands +will stop any existing docker containers and clean the image cache so that the +subsequent steps will build the container from scratch. ``` -# For CentOS Stream 8 build (preferred) -export CONTAINER_TAR=fboss_centos8.tar -export DOCKER_IMAGE=fboss_centos8 -export DOCKER_NAME=FBOSS_CENTOS8 - -# For Debian 10 Buster build -export CONTAINER_TAR=fboss_buster.tar -export DOCKER_IMAGE=fboss_buster -export DOCKER_NAME=FBOSS_BUSTER +sudo docker container kill -a && sudo docker container prune -f +sudo docker image prune -af ``` -## Download container images - -- Create /opt/app/FBOSS_DIR directory in VM (sudo mkdir -p /opt/app/FBOSS_DIR) -- Download $CONTAINER_TAR:- git clone https://fboss@bitbucket.org/fboss/build-containers.git -- Copy build-containers/centos/fboss_centos8.tar to host VM in /opt/app/FBOSS_DIR/ +## Building the FBOSS Docker image - -## Create docker container +The FBOSS GitHub repository contains a Dockerfile that can be used to create +the Docker container image for building FBOSS binaries. The Dockerfile is +located under `fboss/oss/docker/Dockerfile`. You can use the below steps to +build the docker image from this file. Note that the path to the docker file +is relative, so the below commands assume you are currently running them from +the root of the FBOSS git repository. ``` -sudo yum install -y docker -sudo cd /opt/app/FBOSS_DIR -sudo docker import $CONTAINER_TAR -sudo docker images # $IMAGE_ID = IMAGE ID from this command output -sudo docker tag $IMAGE_ID $DOCKER_IMAGE:latest -sudo docker images -# /opt/app/FBOSS_DIR from VM is mapped to /var/FBOSS on container -sudo docker run -d -v /opt/app/FBOSS_DIR:/var/FBOSS:z -it --name=$DOCKER_NAME $DOCKER_IMAGE bash -sudo docker exec -it $DOCKER_NAME bash # drops to container shell +# This builds a docker container image that is tagged as fboss_docker:latest. +# The Dockerfile will set up most of the packages required to build FBOSS OSS. +sudo docker build . -t fboss_docker -f fboss/oss/docker/Dockerfile + +# This command starts the docker container from the image built in the previous +# step, and simply runs a detached bash shell. +# NOTE: if you are building against a precompiled SDK, you will need to add +# some additional parameters to this command. See the section below on +# "Building against a precompiled SDK". +sudo docker run -d -it --name=FBOSS_DOCKER_CONTAINER fboss_docker:latest bash + +# Attaches our current terminal to a new bash shell in the docker container so +# that we can perform the build within it. +sudo docker exec -it FBOSS_DOCKER_CONTAINER bash ``` -## Build ASIC vendor’s SAI SDK library -- Copy the SAI SDK sources from the ASIC vendor to host VM - /opt/app/FBOSS_DIR/ -- Build the SAI SDK library on the container (/var/FBOSS/ in container is mapped - to /opt/app/FBOSS_DIR/ in host VM) -- The SAI experimental headers in SAI SDK source and the libsai.a built in the - above step would be used later to build FBOSS binaries and link with SAI library +Once you've executed the above commands, you should be dropped into a root +shell within the docker container and can proceed with the next steps to start +the build. +## Building FBOSS Binaries -## Build ASIC vendor's SDK kmods -- Copy the target switch's kernel version headers to VM - /opt/app/FBOSS_DIR/ -- Build SDK kmods using the copied kernel headers +Instructions for building FBOSS binaries may have slight differences based on +which SDK you are linking against (more specifically +### Building Fake SAI binaries -## Clone FBOSS sources and switch to latest stable commit +The fake SAI sources are included in the FBOSS git repository, and therefore +don't require any additional steps. You can start the build by using the +commands below: -From container running on VM - ``` -cd /var/FBOSS/ -git clone https://github.com/facebook/fboss fboss.git -cd /var/FBOSS/fboss.git -rm -rf $scratch_dir # remove existing build dir if any -# Optionally, pin the fboss and its dependencies to known -# stable commit hash -rm -rf build/deps/github_hashes/facebook -rm -rf build/deps/github_hashes/facebookincubator -rm -rf build/fbcode_builder/manifests -tar -xvf fboss/oss/stable_commits/latest_stable_hashes.tar.gz +export BUILD_SAI_FAKE=1 +time ./build/fbcode_builder/getdeps.py build --allow-system-packages \ +--extra-cmake-defines='{"CMAKE_BUILD_TYPE": "MinSizeRel", "CMAKE_CXX_STANDARD": "20"}' \ +--scratch-path /var/FBOSS/tmp_bld_dir fboss ``` -## Prepare to build FBOSS +### Building against a precompiled SDK + +This section assumes that you have a precompiled SDK library which you want to +link against. More specifically, you'll need the static library `libsai_impl.a` +for the SDK which you are trying to link against, as well as the associated set +of SAI headers. In order to run the build: -This step involves copying the libsai.a from ASIC vendor SAI SDK build and SAI experimental headers from SAI SDK sources and then running FBOSS’ build helper script. +#### Making the SDK artifacts available within the container -From container running on VM - +You can mount directories from you VM to the container in order to make the SDK +artifacts available. This is done during the run step: ``` -rm -rf /var/FBOSS/built-sai; mkdir -p /var/FBOSS/built-sai/experimental -cp /libsai.a /var/FBOSS/built-sai/libsai_impl.a -cp /include/experimental/*.* /var/FBOSS/built-sai/experimental -cd /var/FBOSS/fboss.git/fboss/oss/scripts -./build-helper.py /var/FBOSS/built-sai/libsai_impl.a /var/FBOSS/built-sai/experimental/ /var/FBOSS/sai_impl_output +# Assuming the existence of /path/to/sdk/lib/libsai_impl.a and /path/to/sdk/include/*.h +for the static library and headers respectively, the below command will mount +those paths to /opt/sdk/lib/libsai_impl.a and /opt/sdk/include/*.h respectively. +sudo docker run -d -v /path/to/sdk:/opt/sdk:z -it --name=FBOSS_DOCKER_CONTAINER fboss_docker:latest bash + ``` -## Build FBOSS +With the SDK artifacts mounted into the container, you can now perform the build: -From container running on VM - ``` -export SAI_ONLY=1 -export SAI_BRCM_IMPL=1 # Needed only for BRCM SAI -export GETDEPS_USE_WGET=1 -# Optionally, set the SAI_SDK_VERSION build flag. -# This flag can be used to build FBOSS to link with a specific version of vendor SAI implementation. -# The default for BRCM SAI implementation is SAI_VERSION_10_0_EA_DNX_ODP. Other possible values are - -# SAI_VERSION_9_2_0_0_ODP, SAI_VERSION_9_0_EA_SIM_ODP, SAI_VERSION_8_2_0_0_ODP, TAJO_SDK_VERSION_1_42_4, etc... -export SAI_SDK_VERSION="SAI_VERSION_9_2_0_0_ODP" -cd /var/FBOSS/fboss.git -time ./build/fbcode_builder/getdeps.py build --allow-system-packages --scratch-path /var/FBOSS/tmp_bld_dir fboss -``` +# Run the build helper to stage the SDK in preparation for the build step. +./fboss/oss/scripts/build-helper.py /opt/sdk/lib/libsai_impl.a /opt/sdk/include/ /var/FBOSS/sai_impl_output -### Building a specific FBOSS target -Instead of building all FBOSS OSS binaries, a specific binary can be built using "--cmake-target" option. +# Run the build +cd /var/FBOSS/fboss -For building the SAI HW test binary only, the following command can be used - +# SDK specific environment variable should be set +export BRCM_SAI_IMPL=1 +# Start the build +time ./build/fbcode_builder/getdeps.py build --allow-system-packages \ +--extra-cmake-defines='{"CMAKE_BUILD_TYPE": "MinSizeRel", "CMAKE_CXX_STANDARD": "20"}' \ +--scratch-path /var/FBOSS/tmp_bld_dir fboss ``` -time ./build/fbcode_builder/getdeps.py build --allow-system-packages --scratch-path /var/FBOSS/tmp_bld_dir fboss --cmake-target sai_test-sai_impl-1.11.0 + +### Build Options + +#### Limiting the build to a specific target + +You can limit the build to a specific target by using the `--cmake-target` flag. +Buildable targets can be found by examining the cmake scripts in the repository. +Any buildable target will be specified in the cmake scripts either by +`add_executable` or `add_library`. Example command below: + ``` -NOTE: If "--cmake-target" option is used, then the binary will not be installed and hence will be available only in /build/fboss/ directory. Due to this, package-fboss.py script (explained in "Packaging and running FBOSS" doc) can't be used if "--cmake-target" option is used. This option can be used when FBOSS OSS was already built, packaged and copied to switch and after this, only a specific binary needs to be recompiled and replaced. +time ./build/fbcode_builder/getdeps.py build --allow-system-packages \ +--extra-cmake-defines='{"CMAKE_BUILD_TYPE": "MinSizeRel", "CMAKE_CXX_STANDARD": "20"}' \ +--scratch-path /var/FBOSS/tmp_bld_dir --cmake-target qsfp_service fboss +``` diff --git a/fboss/oss/docker/Dockerfile b/fboss/oss/docker/Dockerfile index 4e541ac5d77a8..b4ef10f16675c 100644 --- a/fboss/oss/docker/Dockerfile +++ b/fboss/oss/docker/Dockerfile @@ -28,4 +28,7 @@ RUN dnf install bison flex -y RUN dnf group install "Development Tools" -y RUN dnf install openssl* -y RUN python3 -m pip install gitpython +RUN python3 -m pip install meson +RUN python3 -m pip install jinja2 +RUN dnf install gperf libcap-devel libmount-devel -y diff --git a/fboss/oss/hw_known_bad_tests/sai_known_bad_tests.materialized_JSON b/fboss/oss/hw_known_bad_tests/sai_known_bad_tests.materialized_JSON index b084155782959..c3c91c9771f3c 100644 --- a/fboss/oss/hw_known_bad_tests/sai_known_bad_tests.materialized_JSON +++ b/fboss/oss/hw_known_bad_tests/sai_known_bad_tests.materialized_JSON @@ -3218,6 +3218,149 @@ "test_name_regex": "HwAqmTest.verifyEcnTrafficNoDrop" } ], + "brcm/11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/jericho3": [ + { + "test_name_regex": "SaiRouteRollbackTest.rollbackAllWithTrunk" + }, + { + "test_name_regex": "SaiRouteRollbackTest.rollbackManyTimesWithTrunk" + }, + { + "test_name_regex": "SaiQPHRollbackTest.*" + }, + { + "test_name_regex": "HwOverflowTest.*" + }, + { + "test_name_regex": "HwProdInvariants.*" + }, + { + "test_name_regex": "HwHashPolarizationTest*" + }, + { + "test_name_regex": "HwHashConsistencyTest.*" + }, + { + "test_name_regex": "HwIngressBufferTest.validateIngressPoolParamChange" + }, + { + "test_name_regex": "HwIngressBufferTest.validatePGParamChange" + }, + { + "test_name_regex": "HwIngressBufferTest.validatePGQueueChanges" + }, + { + "test_name_regex": "HwAclStatTest/[01].AclStatChangeCounterType" + }, + { + "test_name_regex": "SaiAclTableGroupTest.*" + }, + { + "test_name_regex": "SaiAclTableGroupTrafficTest/[01].*" + }, + { + "test_name_regex": "HwResourceStatsTest/[01].aclStats" + }, + { + "test_name_regex": "HwResourceStatsTest.aclStats" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*Tcp*" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*Icmp*" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*AclModifyQualifier" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*AclIp4Qualifiers" + }, + { + "test_name_regex": "HwAclQualifierTest.*Tcp*" + }, + { + "test_name_regex": "HwAclQualifierTest.*Icmp*" + }, + { + "test_name_regex": "HwAclQualifierTest.*AclModifyQualifier" + }, + { + "test_name_regex": "HwSflowTest.*" + }, + { + "test_name_regex": "HwMirrorTest/[01].*" + }, + { + "test_name_regex": "HwDataPlaneMirrorTest/[01].SpanAclMirror" + }, + { + "test_name_regex": "HwDataPlaneMirrorTest/[01].ErspanAclMirror" + }, + { + "test_name_regex": "HwDataPlaneMirrorTest/[01].TrucatePortErspanMirror" + }, + { + "test_name_regex": "HwDataPlaneMirrorTest/[01].ErspanMirrorWithLagMember" + }, + { + "test_name_regex": "HwNeighborOnMultiplePortsTest.*" + }, + { + "test_name_regex": "HwRouteOverDifferentAddressFamilyNhopTest.*" + }, + { + "test_name_regex": "HwLoadBalancerTestV6RoCE.*" + }, + { + "test_name_regex": "HwLoadBalancerNegativeTestV6RoCE.*" + }, + { + "test_name_regex": "HwLoadBalancerNegativeProtocolMatchTestV6RoCE.*" + }, + { + "test_name_regex": "HwWideEcmpTest.*" + }, + { + "test_name_regex": "HwAqmTest.verifyEcnThreshold" + }, + { + "test_name_regex": "HwResourceStatsTest/[01].l3Stats" + }, + { + "test_name_regex": "HwResourceStatsTest.l3Stats" + }, + { + "test_name_regex": "HwRouteTest/[01].AddHostRouteAndNeighbor" + }, + { + "test_name_regex": "HwRouteTest/[01].VerifyRouting" + }, + { + "test_name_regex": "HwRouteTest/[01].verifyCpuRouteChange" + }, + { + "test_name_regex": "HwSplitAgentCallbackTest.txPacket" + }, + { + "test_name_regex": "HwTrafficPfcTest/HwTrafficPfcGenTest.verifyPfc/WithZeroGlobalHeadRoomCfg" + }, + { + "test_name_regex": "HwIngressBufferTest.validatePGHeadroomLimitChange" + }, + { + "test_name_regex": "warm_boot.HwTrafficPfcTest.PfcWatchdog" + }, + { + "test_name_regex": "warm_boot.HwVerifyPfcConfigInHwTest.PfcWatchdogProgrammingSequence" + }, + { + "test_name_regex": "warm_boot.HwParityErrorTest.verifyParityError" + }, + { + "test_name_regex": "HwAqmTest.verifyEcnTrafficNoDrop" + } + ], "brcm/12.0_ea_dnx_odp/12.0_ea_dnx_odp/jericho3": [ { "test_name_regex": "SaiRouteRollbackTest.rollbackAllWithTrunk" @@ -3835,6 +3978,9 @@ }, { "test_name_regex": "HwRouteTest/[01].UnresolvedAndResolvedNextHop" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*" } ], "brcm/8.2.0.0_odp/8.2.0.0_odp/tomahawk": [ @@ -12148,6 +12294,9 @@ { "test_name_regex": "HwProdInvariantsMmuLosslessTest.*" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*" + }, { "test_name_regex": "HwCoppTest/[01].EapolToHighPriQ" }, diff --git a/fboss/oss/hw_test_configs/darwin.agent.materialized_JSON b/fboss/oss/hw_test_configs/darwin.agent.materialized_JSON index 2c73d7de3af46..9934a438a68a8 100644 --- a/fboss/oss/hw_test_configs/darwin.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/darwin.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/elbert.agent.materialized_JSON b/fboss/oss/hw_test_configs/elbert.agent.materialized_JSON index e6867e7dd3744..63d0d58d98654 100644 --- a/fboss/oss/hw_test_configs/elbert.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/elbert.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/fuji.agent.materialized_JSON b/fboss/oss/hw_test_configs/fuji.agent.materialized_JSON index 807b72041ee14..960e8f84d5ba1 100644 --- a/fboss/oss/hw_test_configs/fuji.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/fuji.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/galaxy_fc.agent.materialized_JSON b/fboss/oss/hw_test_configs/galaxy_fc.agent.materialized_JSON index 98c79b0b0d64e..0b81f5f35f84b 100644 --- a/fboss/oss/hw_test_configs/galaxy_fc.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/galaxy_fc.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/galaxy_lc_left.agent.materialized_JSON b/fboss/oss/hw_test_configs/galaxy_lc_left.agent.materialized_JSON index 129243407c929..ecba7813aa350 100644 --- a/fboss/oss/hw_test_configs/galaxy_lc_left.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/galaxy_lc_left.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/galaxy_lc_right.agent.materialized_JSON b/fboss/oss/hw_test_configs/galaxy_lc_right.agent.materialized_JSON index d3fdbec16ac25..e3d1f1388b4b9 100644 --- a/fboss/oss/hw_test_configs/galaxy_lc_right.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/galaxy_lc_right.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/meru400bfu.agent.materialized_JSON b/fboss/oss/hw_test_configs/meru400bfu.agent.materialized_JSON index c9751a5d4d91d..fd658e857c748 100644 --- a/fboss/oss/hw_test_configs/meru400bfu.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/meru400bfu.agent.materialized_JSON @@ -160,6 +160,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/meru400biu.agent.materialized_JSON b/fboss/oss/hw_test_configs/meru400biu.agent.materialized_JSON index 1469581dee81c..1edf9629229b0 100644 --- a/fboss/oss/hw_test_configs/meru400biu.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/meru400biu.agent.materialized_JSON @@ -131,10 +131,6 @@ "minimum": 0, "maximum": 2047 }, - "systemPortRange": { - "minimum": 10, - "maximum": 29 - }, "switchMac": "02:00:00:00:00:01", "connectionHandle": "68:00", "systemPortRanges": { @@ -192,10 +188,6 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 10, - "maximum": 29 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 11, "platformType": 18, @@ -214,6 +206,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/meru800bia.agent.materialized_JSON b/fboss/oss/hw_test_configs/meru800bia.agent.materialized_JSON index c568370902915..f792dc7fff114 100644 --- a/fboss/oss/hw_test_configs/meru800bia.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/meru800bia.agent.materialized_JSON @@ -159,10 +159,6 @@ "minimum": 0, "maximum": 2047 }, - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "switchMac": "02:00:00:00:00:01", "connectionHandle": "15:00", "systemPortRanges": { @@ -220,10 +216,6 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 14, "platformType": 28, @@ -242,6 +234,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { @@ -257,6 +273,7 @@ "custom_feature_fabric_cgm_ddc_th_tune.BCM8889X": "1", "custom_feature_programmability_standard_image_name.BCM8889X": "AI23", "custom_feature_ser_event_generate": "1", + "custom_feature_shel_arm_enable": "1", "custom_feature_statdma_enable": "0", "custom_feature_use_new_access.BCM8889X": "1", "custom_feature_use_new_access.BCM8889X_ADAPTER": "1", @@ -294,12 +311,13 @@ "dtm_flow_mapping_mode_region_93.BCM8889X": "3", "dtm_flow_mapping_mode_region_94.BCM8889X": "3", "dtm_flow_nof_remote_cores_region.BCM8889X": "4", + "eventor_sbus_dma_channels.BCM8889X": "0,6,0,7", "fabric_connect_mode.BCM8889X": "FE", "fabric_connectivity_based_on_integrity": "0", "fabric_distributed_system_enable": "1", "fail_on_unsupported_attribute": "1", "fw_auto_isolation_arm_core_to_use.0": "5", - "fw_auto_isolation_image_filename.0": "/tmp/db/jericho3ai_a0/BCM8889X_fi.elf", + "fw_auto_isolation_image_filename.0": "/tmp/db/jericho3ai_a0/fi-2.4.0.1-GA.elf", "fw_auto_isolation_log_filename.0": "/tmp/edk_fi.log", "l3_ecmp_max_group_size": "512", "lane_to_serdes_map_fabric_lane0.BCM8889X": "rx0:tx5", diff --git a/fboss/oss/hw_test_configs/minipack.agent.materialized_JSON b/fboss/oss/hw_test_configs/minipack.agent.materialized_JSON index 6fdf5802b9a2e..1bf066a072e9f 100644 --- a/fboss/oss/hw_test_configs/minipack.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/minipack.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/montblanc.agent.materialized_JSON b/fboss/oss/hw_test_configs/montblanc.agent.materialized_JSON index b04b48951c219..7b9a60f21f909 100644 --- a/fboss/oss/hw_test_configs/montblanc.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/montblanc.agent.materialized_JSON @@ -158,6 +158,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/wedge100.agent.materialized_JSON b/fboss/oss/hw_test_configs/wedge100.agent.materialized_JSON index 5f4ac186ffcbb..9b76314bcff50 100644 --- a/fboss/oss/hw_test_configs/wedge100.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/wedge100.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/wedge400.agent.materialized_JSON b/fboss/oss/hw_test_configs/wedge400.agent.materialized_JSON index 803433730718d..533a67d639696 100644 --- a/fboss/oss/hw_test_configs/wedge400.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/wedge400.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/hw_test_configs/yamp.agent.materialized_JSON b/fboss/oss/hw_test_configs/yamp.agent.materialized_JSON index b8a77fd8388eb..2a29dc3c1f7de 100644 --- a/fboss/oss/hw_test_configs/yamp.agent.materialized_JSON +++ b/fboss/oss/hw_test_configs/yamp.agent.materialized_JSON @@ -157,6 +157,30 @@ }, "defaultVoqConfig": [ + ], + "aclTableGroups": [ + { + "name": "acl-table-group-ingress", + "aclTables": [ + { + "name": "AclTable1", + "priority": 0, + "aclEntries": [ + + ], + "actionTypes": [ + + ], + "qualifiers": [ + + ], + "udfGroups": [ + + ] + } + ], + "stage": 0 + } ] }, "platform": { diff --git a/fboss/oss/link_known_bad_tests/fboss_link_known_bad_tests.materialized_JSON b/fboss/oss/link_known_bad_tests/fboss_link_known_bad_tests.materialized_JSON index bca1dcf46d98a..ff9f4c6da9f37 100644 --- a/fboss/oss/link_known_bad_tests/fboss_link_known_bad_tests.materialized_JSON +++ b/fboss/oss/link_known_bad_tests/fboss_link_known_bad_tests.materialized_JSON @@ -7,9 +7,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -84,9 +81,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -161,9 +155,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -238,9 +229,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -315,9 +303,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -392,9 +377,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -469,9 +451,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -546,9 +525,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -623,9 +599,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -700,9 +673,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -774,9 +744,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -848,9 +815,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -922,9 +886,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -996,9 +957,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1070,9 +1028,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1144,9 +1099,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1218,9 +1170,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1292,9 +1241,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1366,9 +1312,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1440,9 +1383,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1514,9 +1454,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1588,9 +1525,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1665,9 +1599,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1742,9 +1673,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1819,9 +1747,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1896,9 +1821,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -1973,9 +1895,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2050,9 +1969,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2127,9 +2043,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2204,9 +2117,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2281,9 +2191,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2355,9 +2262,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2429,9 +2333,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2503,9 +2404,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2577,9 +2475,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2651,9 +2546,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2725,9 +2617,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2799,9 +2688,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2873,9 +2759,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -2947,9 +2830,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3021,9 +2901,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3095,9 +2972,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3169,9 +3043,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3246,9 +3117,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3323,9 +3191,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3400,9 +3265,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3477,9 +3339,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3554,9 +3413,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3631,9 +3487,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3708,9 +3561,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3785,9 +3635,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3862,9 +3709,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -3936,9 +3780,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4010,9 +3851,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4084,9 +3922,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4158,9 +3993,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4232,9 +4064,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4306,9 +4135,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4380,9 +4206,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4454,9 +4277,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4528,9 +4348,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4602,9 +4419,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4676,9 +4490,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -4750,9 +4561,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -4824,9 +4632,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -4898,9 +4703,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -4972,9 +4774,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5046,9 +4845,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5120,9 +4916,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5194,9 +4987,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5268,9 +5058,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5342,9 +5129,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5416,9 +5200,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5487,9 +5268,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5558,9 +5336,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5629,9 +5404,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5700,9 +5472,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5771,9 +5540,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5842,9 +5608,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5913,9 +5676,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -5984,9 +5744,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6055,9 +5812,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6126,9 +5880,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6197,9 +5948,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6268,9 +6016,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6342,9 +6087,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6416,9 +6158,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6490,9 +6229,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6564,9 +6300,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6638,9 +6371,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6712,9 +6442,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6786,9 +6513,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6860,9 +6584,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -6934,9 +6655,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7005,9 +6723,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7076,9 +6791,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7147,9 +6859,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7218,9 +6927,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7289,9 +6995,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7360,9 +7063,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7431,9 +7131,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7502,9 +7199,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7573,9 +7267,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7644,9 +7335,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7715,9 +7403,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "warm_boot.*$" }, @@ -7786,9 +7471,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -7887,9 +7569,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -7988,9 +7667,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8089,9 +7765,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8190,9 +7863,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8291,9 +7961,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8392,9 +8059,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8493,9 +8157,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8594,9 +8255,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8695,9 +8353,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8790,9 +8445,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8885,9 +8537,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -8980,9 +8629,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9075,9 +8721,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9170,9 +8813,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9265,9 +8905,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9360,9 +8997,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9455,9 +9089,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9550,9 +9181,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9645,9 +9273,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9740,9 +9365,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9835,9 +9457,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9906,9 +9525,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -9977,9 +9593,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10048,9 +9661,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10119,9 +9729,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10190,9 +9797,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10261,9 +9865,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10332,9 +9933,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10403,9 +10001,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10474,9 +10069,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10545,9 +10137,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10616,9 +10205,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10687,9 +10273,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10758,9 +10341,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10829,9 +10409,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10900,9 +10477,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -10971,9 +10545,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11042,9 +10613,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11113,9 +10681,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11184,9 +10749,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11255,9 +10817,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11323,9 +10882,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11391,9 +10947,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11459,9 +11012,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11527,9 +11077,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11595,9 +11142,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11663,9 +11207,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11731,9 +11272,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11792,16 +11330,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11841,6 +11376,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -11854,16 +11392,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11903,6 +11438,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -11916,16 +11454,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -11965,6 +11500,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -11978,16 +11516,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12027,6 +11562,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12040,16 +11578,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12089,6 +11624,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12102,16 +11640,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "janga800bic/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "janga800bic/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12151,6 +11686,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12171,9 +11709,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12213,6 +11748,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12233,9 +11771,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12275,6 +11810,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12295,9 +11833,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12337,6 +11872,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -12350,16 +11888,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12451,16 +11986,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12552,16 +12084,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12653,16 +12182,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12754,16 +12280,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12855,16 +12378,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400bfu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru400bfu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -12963,9 +12483,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13064,9 +12581,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13165,9 +12679,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13259,16 +12770,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13357,16 +12865,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13455,16 +12960,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13553,16 +13055,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13651,16 +13150,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13749,16 +13245,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru400biu/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru400biu/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13854,9 +13347,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -13952,9 +13442,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14050,9 +13537,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14141,16 +13625,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14211,6 +13692,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14224,16 +13708,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14294,6 +13775,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14307,16 +13791,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14377,6 +13858,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14390,16 +13874,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14460,6 +13941,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14473,16 +13957,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14543,6 +14024,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14556,16 +14040,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bfa/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru800bfa/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14626,6 +14107,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14646,9 +14130,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14709,6 +14190,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14729,9 +14213,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14792,6 +14273,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14812,9 +14296,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14875,6 +14356,9 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14888,16 +14372,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14937,6 +14418,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -14950,16 +14434,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -14999,6 +14480,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15012,16 +14496,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15061,6 +14542,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15074,16 +14558,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15123,6 +14604,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15136,16 +14620,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15185,6 +14666,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15198,16 +14682,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "meru800bia/sai/asicsdk-11.3.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "meru800bia/sai/asicsdk-11.7.0.0_dnx_odp/12.0_ea_dnx_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15247,6 +14728,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15267,9 +14751,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15309,6 +14790,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15329,9 +14813,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15371,6 +14852,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15391,9 +14875,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15433,6 +14914,9 @@ { "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -15453,9 +14937,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15521,9 +15002,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15589,9 +15067,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15657,9 +15132,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15725,9 +15197,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15793,9 +15262,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15861,9 +15327,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15926,9 +15389,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -15991,9 +15451,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16056,9 +15513,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16121,9 +15575,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16186,9 +15637,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16251,9 +15699,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16316,9 +15761,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16381,9 +15823,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16435,6 +15874,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16458,9 +15900,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16512,6 +15951,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16535,9 +15977,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16589,6 +16028,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16612,9 +16054,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16666,6 +16105,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16689,9 +16131,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16743,6 +16182,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16766,9 +16208,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16820,6 +16259,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16843,9 +16285,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16897,6 +16336,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16920,9 +16362,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -16974,6 +16413,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -16997,9 +16439,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17051,6 +16490,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, @@ -17074,9 +16516,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17128,6 +16567,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17148,9 +16590,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17202,6 +16641,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17222,9 +16664,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17276,6 +16715,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17296,9 +16738,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17350,6 +16789,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17370,9 +16812,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17424,6 +16863,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17444,9 +16886,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17498,6 +16937,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17518,9 +16960,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17572,6 +17011,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17592,9 +17034,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17646,6 +17085,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17666,9 +17108,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17720,6 +17159,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17740,9 +17182,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17794,6 +17233,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17814,9 +17256,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17868,6 +17307,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17888,9 +17330,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -17942,6 +17381,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -17962,9 +17404,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18019,6 +17458,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18042,9 +17484,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18099,6 +17538,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18122,9 +17564,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18179,6 +17618,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18195,16 +17637,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90": [ + "morgan800cc/sai/asicsdk-1.42.8/24.8.3001": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18259,6 +17698,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18275,16 +17717,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90/physdk-credo-0.7.2/credo-0.7.2": [ + "morgan800cc/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18339,6 +17778,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18355,16 +17797,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90/physdk-credo-0.8.4/credo-0.8.4": [ + "morgan800cc/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18419,6 +17858,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18435,16 +17877,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90_yuba": [ + "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18499,6 +17938,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18515,16 +17957,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90_yuba/physdk-credo-0.7.2/credo-0.7.2": [ + "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18579,6 +18018,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18595,16 +18037,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.4.90_yuba/physdk-credo-0.8.4/credo-0.8.4": [ + "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18659,6 +18098,9 @@ { "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, + { + "test_name_regex": "LinkTest.testOpticsRemediation$" + }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, @@ -18675,16 +18117,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.8.3001": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.26": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18701,13 +18140,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -18725,46 +18164,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18781,13 +18217,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -18805,46 +18241,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18861,13 +18294,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -18885,46 +18318,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90/24.4.90": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -18941,13 +18371,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -18965,46 +18395,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90/24.4.90/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19021,13 +18448,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19045,46 +18472,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90/24.4.90/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19101,13 +18525,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19125,46 +18549,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90_yuba/24.4.90_yuba": [ + "tahan800bc/bcm/asicsdk-6.5.28/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19181,13 +18602,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19205,46 +18626,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90_yuba/24.4.90_yuba/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19261,13 +18679,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19285,46 +18703,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.4.90_yuba/24.4.90_yuba/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19341,13 +18756,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19365,46 +18780,43 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001": [ + "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19421,13 +18833,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19445,19 +18857,19 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -19466,25 +18878,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19501,13 +18907,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19525,19 +18931,19 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -19546,25 +18952,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "morgan800cc/sai/asicsdk-24.8.3001/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19581,13 +18981,13 @@ "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "PtpTests.verifyPtpTc.*$" @@ -19605,19 +19005,19 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -19626,25 +19026,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.26": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19697,31 +19091,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19774,31 +19165,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19851,31 +19239,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.28": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -19928,31 +19313,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20005,31 +19387,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20082,31 +19461,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.28/6.5.28": [ + "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20159,31 +19535,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ + "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20236,31 +19609,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ + "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20313,31 +19683,28 @@ "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.26": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20347,27 +19714,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20378,40 +19757,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20421,27 +19794,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20452,40 +19837,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20495,27 +19874,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20526,40 +19917,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20569,27 +19954,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20600,40 +19997,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20643,27 +20034,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20674,40 +20077,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20717,27 +20114,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20748,40 +20157,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ + "wedge100s/bcm/asicsdk-6.5.28/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20791,27 +20194,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20822,40 +20237,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20865,27 +20274,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20896,40 +20317,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -20939,27 +20354,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -20970,40 +20397,34 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ + "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21013,47 +20434,53 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -21068,16 +20495,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21087,47 +20511,53 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -21142,16 +20572,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "tahan800bc/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21161,27 +20588,39 @@ { "test_name_regex": "MacsecStatTest.*$" }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, { "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "LinkTest.testOpticsRemediation" + }, + { + "test_name_regex": "Prbs.*$" }, { "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PtpTests.verifyPtpTc.*$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -21192,16 +20631,10 @@ "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" @@ -21216,99 +20649,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.26": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21367,31 +20714,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21450,31 +20791,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.28": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21533,31 +20868,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21616,31 +20945,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21699,31 +21022,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.28/6.5.28": [ + "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21782,31 +21099,25 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -21865,22 +21176,19 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "MacLearningTest.l2EntryFlap" + "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "SpeedChangeTest.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge100s/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, @@ -21888,2039 +21196,37 @@ "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable" - }, - { - "test_name_regex": "LinkTest.getTransceivers" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation" - }, - { - "test_name_regex": "Prbs.*$" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.26": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.28": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.28/6.5.28": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" - }, - { - "test_name_regex": "MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "SpeedChangeTest.*$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" - }, - { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" - }, - { - "test_name_regex": "LinkTest.xPhyInfoTest" - }, - { - "test_name_regex": "PortStatsTest.xphySanity" - }, - { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" - }, - { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" - }, - { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" - }, - { - "test_name_regex": "LinkTest.testOpticsRemediation$" - }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" - }, - { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" - }, - { - "test_name_regex": "LacpTest.lacpFlap$" - }, - { - "test_name_regex": "LinkTest.verifyIphyFecCounters$" - } - ], - "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ - { - "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" - }, - { - "test_name_regex": "FsdbTest.statsPublishSubscribe$" - }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, - { - "test_name_regex": "MacsecTest.*$" - }, - { - "test_name_regex": "MacsecFsdbTest.*$" - }, - { - "test_name_regex": "MacsecStatTest.*$" - }, - { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" + "test_name_regex": "MacsecTest.*$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "MacsecFsdbTest.*$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" + "test_name_regex": "MacsecStatTest.*$" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" + "test_name_regex": "LinkTest.testOpticsRemediation" }, { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" + "test_name_regex": "Prbs.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" @@ -23928,6 +21234,9 @@ { "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -23937,12 +21246,6 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, @@ -23962,16 +21265,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge100s/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -23982,37 +21282,28 @@ "test_name_regex": "MacsecStatTest.*$" }, { - "test_name_regex": "LinkTest.ptpEnableIsHitless$" - }, - { - "test_name_regex": "LinkTest.fabricLinkHealth$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" - }, - { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" + "test_name_regex": "LinkTest.opticsTxDisableEnable" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" + "test_name_regex": "LinkTest.getTransceivers" }, { - "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" + "test_name_regex": "LinkTest.testOpticsRemediation" }, { - "test_name_regex": "Prbs.*ASIC.*ASIC.*$" + "test_name_regex": "Prbs.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "SpeedChangeTest.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" @@ -24020,6 +21311,9 @@ { "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, + { + "test_name_regex": "Prbs.*ASIC.*$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -24029,12 +21323,6 @@ { "test_name_regex": "LinkTest.testOpticsRemediation$" }, - { - "test_name_regex": "Prbs.*ASIC.*$" - }, - { - "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" }, @@ -24054,16 +21342,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.26": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24134,28 +21419,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24226,28 +21511,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.26/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24318,28 +21603,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24410,28 +21695,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24502,28 +21787,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/bcm/asicsdk-6.5.26/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24594,28 +21879,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ + "wedge400/bcm/asicsdk-6.5.28/6.5.28": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24686,28 +21971,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24778,28 +22063,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/bcm/asicsdk-6.5.28/6.5.28/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24870,28 +22155,28 @@ "test_name_regex": "LinkTest.verifyIphyFecBerCounters$" }, { - "test_name_regex": "warm_boot.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.enablePtpPortDown.*$" }, { - "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" + "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" }, { - "test_name_regex": "LacpTest.lacpFlap$" + "test_name_regex": "MacLearningTest.l2EntryFlap" + }, + { + "test_name_regex": "SpeedChangeTest.*$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/1.42.8": [ + "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -24905,55 +22190,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -24968,25 +22253,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/1.42.8/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25000,29 +22279,41 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" + }, + { + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" + }, + { + "test_name_regex": "LinkTest.xPhyInfoTest" + }, + { + "test_name_regex": "PortStatsTest.xphySanity" }, { "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, + { + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + }, { "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, @@ -25036,19 +22327,7 @@ "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" - }, - { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" - }, - { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" - }, - { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" - }, - { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25063,25 +22342,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/1.42.8/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/sai/asicsdk-10.2.0.0_odp/10.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25095,55 +22368,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25158,25 +22431,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25190,55 +22457,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25253,25 +22520,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25285,55 +22546,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25348,25 +22609,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/8.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25380,55 +22635,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25443,25 +22698,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90_yuba": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25475,55 +22724,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25538,25 +22787,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90_yuba/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25570,55 +22813,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25633,25 +22876,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.4.90_yuba/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/sai/asicsdk-8.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25665,55 +22902,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25728,25 +22965,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.8.3001": [ + "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25760,55 +22991,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25823,25 +23054,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25855,55 +23080,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -25918,25 +23143,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400/sai/asicsdk-9.2.0.0_odp/9.2.0.0_odp/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -25950,55 +23169,55 @@ "test_name_regex": "LinkTest.ptpEnableIsHitless$" }, { - "test_name_regex": "warm_boot.PtpTests.verifyPtpTcDelayRequest$" + "test_name_regex": "LinkTest.fabricLinkHealth$" }, { - "test_name_regex": "LinkTest.fabricLinkHealth$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR1_100G.*$" }, { - "test_name_regex": "Prbs.*$" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_200G.*$" }, { - "test_name_regex": "LinkTest.xPhyInfoTest" + "test_name_regex": "Prbs.*TRANSCEIVER_LINE.*FR4_400G.*$" }, { - "test_name_regex": "PortStatsTest.xphySanity" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR1_100G.*$" }, { - "test_name_regex": "warm_boot.LacpTest.lacpFlap$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_200G.*$" }, { - "test_name_regex": "roundtrip.preprod_2_.*_2_preprod.warm_boot.*$" + "test_name_regex": "Prbs.*ASIC.*TRANSCEIVER_SYS.*FR4_400G.*$" }, { - "test_name_regex": "roundtrip.*.testOpticsRemediation$" + "test_name_regex": "Prbs.*ASIC.*ASIC.*$" }, { - "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" + "test_name_regex": "LinkTest.xPhyInfoTest" }, { - "test_name_regex": "LinkTest.opticsTxDisableEnable$" + "test_name_regex": "PortStatsTest.xphySanity" }, { - "test_name_regex": "LinkTest.testOpticsRemediation$" + "test_name_regex": "roundtrip.*.testOpticsRemediation$" }, { - "test_name_regex": "Prbs.*ASIC.*$" + "test_name_regex": "warm_boot.LacpTest.lacpFlap$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.HUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableRandomPorts$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" + "test_name_regex": "LinkTest.opticsTxDisableEnable$" }, { - "test_name_regex": "cold_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "LinkTest.testOpticsRemediation$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.FOURHUNDREDGToTWOHUNDREDG$" + "test_name_regex": "Prbs.*ASIC.*$" }, { - "test_name_regex": "warm_boot.SpeedChangeTest.TWOHUNDREDGToHUNDREDG$" + "test_name_regex": "SpeedChangeTest.TWOHUNDREDGToFOURHUNDREDG$" }, { "test_name_regex": "LinkTest.opticsVdmPerformanceMonitoring$" @@ -26013,25 +23232,19 @@ "test_name_regex": "CheckInit.MacLearningTest.l2EntryFlap" }, { - "test_name_regex": "PtpTests.enablePtpPortDown.*$" - }, - { - "test_name_regex": "PtpTests.verifyPtpTcAfterLinkFlap.*$" + "test_name_regex": "LacpTest.lacpFlap$" }, { "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90/24.4.90": [ + "wedge400c/sai/asicsdk-1.42.8/1.42.8": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26117,16 +23330,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90/24.4.90/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400c/sai/asicsdk-1.42.8/1.42.8/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26212,16 +23422,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90/24.4.90/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400c/sai/asicsdk-1.42.8/1.42.8/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26307,16 +23514,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90_yuba/24.4.90_yuba": [ + "wedge400c/sai/asicsdk-1.42.8/24.8.3001": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26402,16 +23606,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90_yuba/24.4.90_yuba/physdk-credo-0.7.2/credo-0.7.2": [ + "wedge400c/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.7.2/credo-0.7.2": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26497,16 +23698,13 @@ "test_name_regex": "LinkTest.verifyIphyFecCounters$" } ], - "wedge400c/sai/asicsdk-24.4.90_yuba/24.4.90_yuba/physdk-credo-0.8.4/credo-0.8.4": [ + "wedge400c/sai/asicsdk-1.42.8/24.8.3001/physdk-credo-0.8.4/credo-0.8.4": [ { "test_name_regex": "LinkSanityTestDataPlaneFlood.*$" }, { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26599,9 +23797,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26694,9 +23889,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26789,9 +23981,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26884,9 +24073,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -26973,9 +24159,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27062,9 +24245,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27151,9 +24331,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27240,9 +24417,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27329,9 +24503,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27418,9 +24589,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27507,9 +24675,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27596,9 +24761,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27685,9 +24847,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27771,9 +24930,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27857,9 +25013,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -27943,9 +25096,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28029,9 +25179,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28115,9 +25262,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28201,9 +25345,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28287,9 +25428,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28373,9 +25511,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28459,9 +25594,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28545,9 +25677,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, @@ -28631,9 +25760,6 @@ { "test_name_regex": "FsdbTest.statsPublishSubscribe$" }, - { - "test_name_regex": "cold_boot.QsfpFsdbTest.tcvr$" - }, { "test_name_regex": "MacsecTest.*$" }, diff --git a/fboss/oss/link_test_configs/janga800bic.materialized_JSON b/fboss/oss/link_test_configs/janga800bic.materialized_JSON index d49c43ac63019..7ec929aaae620 100644 --- a/fboss/oss/link_test_configs/janga800bic.materialized_JSON +++ b/fboss/oss/link_test_configs/janga800bic.materialized_JSON @@ -44,7 +44,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -79,7 +80,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -114,7 +116,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -149,7 +152,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -184,7 +188,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -219,7 +224,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -254,7 +260,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -289,7 +296,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -324,7 +332,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -359,7 +368,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -394,7 +404,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -429,7 +440,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -464,7 +476,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -499,7 +512,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -534,7 +548,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -569,7 +584,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -604,7 +620,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 18, @@ -639,7 +656,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 19, @@ -674,7 +692,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 20, @@ -709,7 +728,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 21, @@ -744,7 +764,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 22, @@ -779,7 +800,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 23, @@ -814,7 +836,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 24, @@ -849,7 +872,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 25, @@ -884,7 +908,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 26, @@ -919,7 +944,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 27, @@ -954,7 +980,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 1114, @@ -989,7 +1016,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1115, @@ -1024,7 +1052,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1112, @@ -1059,7 +1088,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1113, @@ -1094,7 +1124,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1119, @@ -1129,7 +1160,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1117, @@ -1164,7 +1196,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1118, @@ -1199,7 +1232,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1116, @@ -1234,7 +1268,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1106, @@ -1269,7 +1304,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1107, @@ -1304,7 +1340,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1104, @@ -1339,7 +1376,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1105, @@ -1374,7 +1412,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1111, @@ -1409,7 +1448,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1109, @@ -1444,7 +1484,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1110, @@ -1479,7 +1520,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1108, @@ -1514,7 +1556,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1143, @@ -1549,7 +1592,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1141, @@ -1584,7 +1628,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1142, @@ -1619,7 +1664,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1140, @@ -1654,7 +1700,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1138, @@ -1689,7 +1736,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1136, @@ -1724,7 +1772,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1137, @@ -1759,7 +1808,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1139, @@ -1794,7 +1844,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1130, @@ -1829,7 +1880,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1131, @@ -1864,7 +1916,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1128, @@ -1899,7 +1952,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1129, @@ -1934,7 +1988,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1133, @@ -1969,7 +2024,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1135, @@ -2004,7 +2060,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1134, @@ -2039,7 +2096,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1132, @@ -2074,7 +2132,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1122, @@ -2109,7 +2168,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1123, @@ -2144,7 +2204,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1120, @@ -2179,7 +2240,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1121, @@ -2214,7 +2276,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1125, @@ -2249,7 +2312,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1127, @@ -2284,7 +2348,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1126, @@ -2319,7 +2384,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1124, @@ -2354,7 +2420,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1162, @@ -2389,7 +2456,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1163, @@ -2424,7 +2492,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1165, @@ -2459,7 +2528,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1167, @@ -2494,7 +2564,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1164, @@ -2529,7 +2600,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1161, @@ -2564,7 +2636,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1166, @@ -2599,7 +2672,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1160, @@ -2634,7 +2708,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1155, @@ -2669,7 +2744,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1154, @@ -2704,7 +2780,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1153, @@ -2739,7 +2816,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1152, @@ -2774,7 +2852,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1159, @@ -2809,7 +2888,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1157, @@ -2844,7 +2924,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1158, @@ -2879,7 +2960,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1156, @@ -2914,7 +2996,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1146, @@ -2949,7 +3032,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1147, @@ -2984,7 +3068,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1144, @@ -3019,7 +3104,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1145, @@ -3054,7 +3140,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1149, @@ -3089,7 +3176,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1151, @@ -3124,7 +3212,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1148, @@ -3159,7 +3248,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1150, @@ -3194,7 +3284,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1171, @@ -3229,7 +3320,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1175, @@ -3264,7 +3356,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1170, @@ -3299,7 +3392,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1169, @@ -3334,7 +3428,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1172, @@ -3369,7 +3464,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1173, @@ -3404,7 +3500,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1174, @@ -3439,7 +3536,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1168, @@ -3474,7 +3572,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1182, @@ -3509,7 +3608,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1176, @@ -3544,7 +3644,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1178, @@ -3579,7 +3680,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1181, @@ -3614,7 +3716,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1179, @@ -3649,7 +3752,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1177, @@ -3684,7 +3788,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1180, @@ -3719,7 +3824,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1183, @@ -3754,7 +3860,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1099, @@ -3789,7 +3896,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1103, @@ -3824,7 +3932,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1097, @@ -3859,7 +3968,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1098, @@ -3894,7 +4004,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1100, @@ -3929,7 +4040,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1101, @@ -3964,7 +4076,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1102, @@ -3999,7 +4112,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1096, @@ -4034,7 +4148,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1078, @@ -4069,7 +4184,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1072, @@ -4104,7 +4220,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1077, @@ -4139,7 +4256,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1074, @@ -4174,7 +4292,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1073, @@ -4209,7 +4328,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1076, @@ -4244,7 +4364,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1079, @@ -4279,7 +4400,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1075, @@ -4314,7 +4436,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1084, @@ -4349,7 +4472,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1086, @@ -4384,7 +4508,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1087, @@ -4419,7 +4544,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1085, @@ -4454,7 +4580,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1081, @@ -4489,7 +4616,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1080, @@ -4524,7 +4652,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1083, @@ -4559,7 +4688,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1082, @@ -4594,7 +4724,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1094, @@ -4629,7 +4760,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1092, @@ -4664,7 +4796,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1093, @@ -4699,7 +4832,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1095, @@ -4734,7 +4868,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1088, @@ -4769,7 +4904,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1091, @@ -4804,7 +4940,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1090, @@ -4839,7 +4976,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1089, @@ -4874,7 +5012,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1070, @@ -4909,7 +5048,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1064, @@ -4944,7 +5084,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1068, @@ -4979,7 +5120,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1069, @@ -5014,7 +5156,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1065, @@ -5049,7 +5192,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1066, @@ -5084,7 +5228,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1067, @@ -5119,7 +5264,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1071, @@ -5154,7 +5300,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1060, @@ -5189,7 +5336,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1061, @@ -5224,7 +5372,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1062, @@ -5259,7 +5408,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1056, @@ -5294,7 +5444,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1063, @@ -5329,7 +5480,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1057, @@ -5364,7 +5516,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1059, @@ -5399,7 +5552,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1058, @@ -5434,7 +5588,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1052, @@ -5469,7 +5624,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1053, @@ -5504,7 +5660,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1054, @@ -5539,7 +5696,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1048, @@ -5574,7 +5732,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1050, @@ -5609,7 +5768,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1055, @@ -5644,7 +5804,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1051, @@ -5679,7 +5840,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1049, @@ -5714,7 +5876,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1043, @@ -5749,7 +5912,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1041, @@ -5784,7 +5948,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1047, @@ -5819,7 +5984,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1042, @@ -5854,7 +6020,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1040, @@ -5889,7 +6056,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1046, @@ -5924,7 +6092,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1045, @@ -5959,7 +6128,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1044, @@ -5994,7 +6164,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1036, @@ -6029,7 +6200,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1037, @@ -6064,7 +6236,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1038, @@ -6099,7 +6272,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1032, @@ -6134,7 +6308,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1039, @@ -6169,7 +6344,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1033, @@ -6204,7 +6380,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1035, @@ -6239,7 +6416,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1034, @@ -6274,7 +6452,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1028, @@ -6309,7 +6488,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1029, @@ -6344,7 +6524,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1030, @@ -6379,7 +6560,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1024, @@ -6414,7 +6596,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1026, @@ -6449,7 +6632,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1031, @@ -6484,7 +6668,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1027, @@ -6519,7 +6704,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1025, @@ -6554,7 +6740,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2049, @@ -6589,7 +6776,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2050, @@ -6624,7 +6812,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2051, @@ -6659,7 +6848,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2052, @@ -6694,7 +6884,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2053, @@ -6729,7 +6920,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2054, @@ -6764,7 +6956,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2055, @@ -6799,7 +6992,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2056, @@ -6834,7 +7028,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2057, @@ -6869,7 +7064,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2058, @@ -6904,7 +7100,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2059, @@ -6939,7 +7136,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2060, @@ -6974,7 +7172,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2061, @@ -7009,7 +7208,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2062, @@ -7044,7 +7244,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2063, @@ -7079,7 +7280,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2064, @@ -7114,7 +7316,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2065, @@ -7149,7 +7352,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2066, @@ -7184,7 +7388,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2067, @@ -7219,7 +7424,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2068, @@ -7254,7 +7460,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2069, @@ -7289,7 +7496,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2070, @@ -7324,7 +7532,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2071, @@ -7359,7 +7568,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2072, @@ -7394,7 +7604,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2073, @@ -7429,7 +7640,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2074, @@ -7464,7 +7676,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2075, @@ -7499,7 +7712,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 3162, @@ -7534,7 +7748,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3163, @@ -7569,7 +7784,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3160, @@ -7604,7 +7820,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3161, @@ -7639,7 +7856,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3165, @@ -7674,7 +7892,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3167, @@ -7709,7 +7928,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3166, @@ -7744,7 +7964,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3164, @@ -7779,7 +8000,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3154, @@ -7814,7 +8036,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3155, @@ -7849,7 +8072,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3152, @@ -7884,7 +8108,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3153, @@ -7919,7 +8144,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3157, @@ -7954,7 +8180,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3159, @@ -7989,7 +8216,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3158, @@ -8024,7 +8252,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3156, @@ -8059,7 +8288,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3186, @@ -8094,7 +8324,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3187, @@ -8129,7 +8360,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3184, @@ -8164,7 +8396,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3185, @@ -8199,7 +8432,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3189, @@ -8234,7 +8468,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3191, @@ -8269,7 +8504,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3188, @@ -8304,7 +8540,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3190, @@ -8339,7 +8576,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3181, @@ -8374,7 +8612,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3180, @@ -8409,7 +8648,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3176, @@ -8444,7 +8684,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3182, @@ -8479,7 +8720,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3183, @@ -8514,7 +8756,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3178, @@ -8549,7 +8792,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3179, @@ -8584,7 +8828,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3177, @@ -8619,7 +8864,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3175, @@ -8654,7 +8900,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3173, @@ -8689,7 +8936,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3174, @@ -8724,7 +8972,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3172, @@ -8759,7 +9008,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3170, @@ -8794,7 +9044,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3168, @@ -8829,7 +9080,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3169, @@ -8864,7 +9116,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3171, @@ -8899,7 +9152,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3211, @@ -8934,7 +9188,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3210, @@ -8969,7 +9224,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3209, @@ -9004,7 +9260,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3208, @@ -9039,7 +9296,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3215, @@ -9074,7 +9332,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3213, @@ -9109,7 +9368,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3214, @@ -9144,7 +9404,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3212, @@ -9179,7 +9440,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3202, @@ -9214,7 +9476,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3203, @@ -9249,7 +9512,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3200, @@ -9284,7 +9548,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3201, @@ -9319,7 +9584,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3205, @@ -9354,7 +9620,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3207, @@ -9389,7 +9656,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3204, @@ -9424,7 +9692,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3206, @@ -9459,7 +9728,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3198, @@ -9494,7 +9764,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3192, @@ -9529,7 +9800,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3196, @@ -9564,7 +9836,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3197, @@ -9599,7 +9872,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3194, @@ -9634,7 +9908,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3193, @@ -9669,7 +9944,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3195, @@ -9704,7 +9980,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3199, @@ -9739,7 +10016,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3218, @@ -9774,7 +10052,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3219, @@ -9809,7 +10088,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3221, @@ -9844,7 +10124,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3223, @@ -9879,7 +10160,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3220, @@ -9914,7 +10196,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3217, @@ -9949,7 +10232,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3222, @@ -9984,7 +10268,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3216, @@ -10019,7 +10304,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3227, @@ -10054,7 +10340,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3231, @@ -10089,7 +10376,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3226, @@ -10124,7 +10412,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3225, @@ -10159,7 +10448,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3228, @@ -10194,7 +10484,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3229, @@ -10229,7 +10520,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3230, @@ -10264,7 +10556,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3224, @@ -10299,7 +10592,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3147, @@ -10334,7 +10628,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3148, @@ -10369,7 +10664,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3145, @@ -10404,7 +10700,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3144, @@ -10439,7 +10736,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3150, @@ -10474,7 +10772,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3151, @@ -10509,7 +10808,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3149, @@ -10544,7 +10844,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3146, @@ -10579,7 +10880,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3124, @@ -10614,7 +10916,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3126, @@ -10649,7 +10952,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3127, @@ -10684,7 +10988,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3125, @@ -10719,7 +11024,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3121, @@ -10754,7 +11060,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3120, @@ -10789,7 +11096,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3123, @@ -10824,7 +11132,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3122, @@ -10859,7 +11168,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3134, @@ -10894,7 +11204,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3132, @@ -10929,7 +11240,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3133, @@ -10964,7 +11276,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3135, @@ -10999,7 +11312,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3128, @@ -11034,7 +11348,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3131, @@ -11069,7 +11384,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3130, @@ -11104,7 +11420,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3129, @@ -11139,7 +11456,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3139, @@ -11174,7 +11492,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3143, @@ -11209,7 +11528,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3137, @@ -11244,7 +11564,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3138, @@ -11279,7 +11600,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3140, @@ -11314,7 +11636,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3141, @@ -11349,7 +11672,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3142, @@ -11384,7 +11708,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3136, @@ -11419,7 +11744,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3118, @@ -11454,7 +11780,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3112, @@ -11489,7 +11816,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3117, @@ -11524,7 +11852,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3114, @@ -11559,7 +11888,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3113, @@ -11594,7 +11924,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3116, @@ -11629,7 +11960,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3119, @@ -11664,7 +11996,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3115, @@ -11699,7 +12032,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3110, @@ -11734,7 +12068,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3108, @@ -11769,7 +12104,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3109, @@ -11804,7 +12140,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3111, @@ -11839,7 +12176,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3104, @@ -11874,7 +12212,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3105, @@ -11909,7 +12248,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3106, @@ -11944,7 +12284,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3107, @@ -11979,7 +12320,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3100, @@ -12014,7 +12356,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3102, @@ -12049,7 +12392,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3103, @@ -12084,7 +12428,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3101, @@ -12119,7 +12464,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3097, @@ -12154,7 +12500,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3096, @@ -12189,7 +12536,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3098, @@ -12224,7 +12572,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3099, @@ -12259,7 +12608,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3090, @@ -12294,7 +12644,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3089, @@ -12329,7 +12680,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3094, @@ -12364,7 +12716,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3091, @@ -12399,7 +12752,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3088, @@ -12434,7 +12788,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3095, @@ -12469,7 +12824,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3092, @@ -12504,7 +12860,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3093, @@ -12539,7 +12896,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3080, @@ -12574,7 +12932,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3081, @@ -12609,7 +12968,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3082, @@ -12644,7 +13004,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3083, @@ -12679,7 +13040,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3084, @@ -12714,7 +13076,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3085, @@ -12749,7 +13112,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3086, @@ -12784,7 +13148,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3087, @@ -12819,7 +13184,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3072, @@ -12854,7 +13220,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3073, @@ -12889,7 +13256,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3074, @@ -12924,7 +13292,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3075, @@ -12959,7 +13328,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3076, @@ -12994,7 +13364,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3077, @@ -13029,7 +13400,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3078, @@ -13064,7 +13436,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3079, @@ -13099,7 +13472,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -13388,6 +13762,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -13436,7 +13811,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13448,7 +13823,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13460,7 +13835,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13470,11 +13845,11 @@ "matcher": "cpuPolicing-mid-linkLocal-v6", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13482,11 +13857,11 @@ "matcher": "cpuPolicing-mid-ff02::/16", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13496,7 +13871,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13508,7 +13883,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13520,7 +13895,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13532,7 +13907,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13544,7 +13919,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13556,7 +13931,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13568,7 +13943,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13580,7 +13955,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13592,7 +13967,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13604,7 +13979,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13616,7 +13991,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13628,7 +14003,7 @@ "sendToQueue": { "queueId": 7 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { "tcValue": 7 } @@ -13638,11 +14013,11 @@ "matcher": "cpuPolicing-mid-lldp-dstMac0E", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13650,11 +14025,11 @@ "matcher": "cpuPolicing-mid-lldp-dstMac03", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13662,11 +14037,11 @@ "matcher": "cpuPolicing-mid-lldp-dstMac00", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13674,11 +14049,11 @@ "matcher": "cpuPolicing-mid-Ip2Me-Ip4", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } }, @@ -13686,11 +14061,11 @@ "matcher": "cpuPolicing-mid-Ip2Me-Ip6", "action": { "sendToQueue": { - "queueId": 2 + "queueId": 3 }, - "toCpuAction": 0, + "toCpuAction": 1, "setTc": { - "tcValue": 2 + "tcValue": 3 } } } @@ -13699,15 +14074,19 @@ "rxReasonToQueueOrderedList": [ { "rxReason": 2, - "queueId": 2 + "queueId": 3 }, { "rxReason": 17, - "queueId": 2 + "queueId": 3 }, { "rxReason": 6, "queueId": 0 + }, + { + "rxReason": 21, + "queueId": 0 } ] }, @@ -13758,7 +14137,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, @@ -13771,12 +14150,19 @@ "minimum": 0, "maximum": 2047 }, - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "switchMac": "02:00:00:00:00:01", - "connectionHandle": "15:00" + "connectionHandle": "15:00", + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 53 + } + ] + }, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "inbandPortId": 1 }, "4": { "switchType": 2, @@ -13786,12 +14172,19 @@ "minimum": 2048, "maximum": 4095 }, - "systemPortRange": { - "minimum": 54, - "maximum": 97 - }, "switchMac": "02:00:00:00:00:01", - "connectionHandle": "18:00" + "connectionHandle": "18:00", + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 54, + "maximum": 97 + } + ] + }, + "localSystemPortOffset": 54, + "globalSystemPortOffset": 54, + "inbandPortId": 2049 } }, "vendorMacOuis": [ @@ -13813,13 +14206,20 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 14, - "platformType": 32 + "platformType": 32, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 53 + } + ] + }, + "inbandPortId": 1 }, "4": { "name": "intfNode1", @@ -13828,13 +14228,20 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 54, - "maximum": 97 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 14, - "platformType": 32 + "platformType": 32, + "localSystemPortOffset": 54, + "globalSystemPortOffset": 54, + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 54, + "maximum": 97 + } + ] + }, + "inbandPortId": 2049 } }, "defaultVoqConfig": [ @@ -13854,9 +14261,11 @@ "custom_feature_fabric_cgm_ddc_th_tune.BCM8889X": "1", "custom_feature_programmability_standard_image_name.BCM88890": "AI23", "custom_feature_ser_event_generate": "1", + "custom_feature_shel_arm_enable": "1", "custom_feature_statdma_enable": "0", "custom_feature_use_new_access.BCM8889X": "1", "custom_feature_use_new_access.BCM8889X_ADAPTER": "1", + "custom_feature_vsqd_lossless_reject_enable": "1", "dpp_db_path": "/tmp/db", "dram_temperature_monitor_enable.BCM8889X_ADAPTER": "0", "dtm_flow_mapping_mode_region_65.BCM8889X": "3", @@ -13890,6 +14299,7 @@ "dtm_flow_mapping_mode_region_93.BCM8889X": "3", "dtm_flow_mapping_mode_region_94.BCM8889X": "3", "dtm_flow_nof_remote_cores_region.BCM8889X": "4", + "eventor_sbus_dma_channels.BCM8889X": "0,6,0,7", "fabric_connect_mode.BCM8889X": "FE", "fabric_connectivity_based_on_integrity": "0", "fabric_distributed_system_enable": "1", @@ -13985,6 +14395,7 @@ "sai_l3_max_ecmp_paths": "512", "sai_macro_flow_based_hash": "1", "sai_mmu_qgroups_default": "1", + "sai_ocb_fc_config": "2", "sai_optimize_acl_ipv6_addr_qual": "0", "sai_optimized_mmu": "0x1", "sai_pfc_defaults_disable": "0x1", @@ -13992,6 +14403,7 @@ "sai_pkt_rx_custom_cfg": "1", "sai_pkt_rx_pkt_size": "16512", "sai_recycle_port_lane_base": "440", + "sai_tc_mirror_buffer_size_bytes": "1", "sai_trigger_linkscan_remote_local_faults": "1", "sai_voq_wm_latency_enable": "1", "sat_enable.BCM8889X_ADAPTER": "1", diff --git a/fboss/oss/link_test_configs/meru400bfu.materialized_JSON b/fboss/oss/link_test_configs/meru400bfu.materialized_JSON index c3b0993e17d37..00b3ff821308d 100644 --- a/fboss/oss/link_test_configs/meru400bfu.materialized_JSON +++ b/fboss/oss/link_test_configs/meru400bfu.materialized_JSON @@ -45,7 +45,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 73, @@ -81,7 +82,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 74, @@ -117,7 +119,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 75, @@ -153,7 +156,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 76, @@ -189,7 +193,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 77, @@ -225,7 +230,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 78, @@ -261,7 +267,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 79, @@ -297,7 +304,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 84, @@ -333,7 +341,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 85, @@ -369,7 +378,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 86, @@ -405,7 +415,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 87, @@ -441,7 +452,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 36, @@ -477,7 +489,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 37, @@ -513,7 +526,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 38, @@ -549,7 +563,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 39, @@ -585,7 +600,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 28, @@ -621,7 +637,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 29, @@ -657,7 +674,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 30, @@ -693,7 +711,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 31, @@ -729,7 +748,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 24, @@ -765,7 +785,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 25, @@ -801,7 +822,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 26, @@ -837,7 +859,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 27, @@ -873,7 +896,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -909,7 +933,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -945,7 +970,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 18, @@ -981,7 +1007,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 19, @@ -1017,7 +1044,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 20, @@ -1053,7 +1081,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 21, @@ -1089,7 +1118,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 22, @@ -1125,7 +1155,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 23, @@ -1161,7 +1192,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -1197,7 +1229,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -1233,7 +1266,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -1269,7 +1303,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -1305,7 +1340,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -1341,7 +1377,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -1377,7 +1414,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -1413,7 +1451,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -1449,7 +1488,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -1485,7 +1525,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -1521,7 +1562,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -1557,7 +1599,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -1593,7 +1636,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 0, @@ -1629,7 +1673,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1, @@ -1665,7 +1710,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -1701,7 +1747,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -1737,7 +1784,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 148, @@ -1773,7 +1821,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 149, @@ -1809,7 +1858,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 150, @@ -1845,7 +1895,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 151, @@ -1881,7 +1932,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 144, @@ -1917,7 +1969,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 145, @@ -1953,7 +2006,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 146, @@ -1989,7 +2043,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 147, @@ -2025,7 +2080,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 152, @@ -2061,7 +2117,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 153, @@ -2097,7 +2154,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 154, @@ -2133,7 +2191,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 155, @@ -2169,7 +2228,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 156, @@ -2205,7 +2265,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 157, @@ -2241,7 +2302,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 158, @@ -2277,7 +2339,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 159, @@ -2313,7 +2376,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 160, @@ -2349,7 +2413,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 161, @@ -2385,7 +2450,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 162, @@ -2421,7 +2487,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 163, @@ -2457,7 +2524,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 164, @@ -2493,7 +2561,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 165, @@ -2529,7 +2598,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 166, @@ -2565,7 +2635,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 167, @@ -2601,7 +2672,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 172, @@ -2637,7 +2709,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 173, @@ -2673,7 +2746,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 174, @@ -2709,7 +2783,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 175, @@ -2745,7 +2820,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 168, @@ -2781,7 +2857,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 169, @@ -2817,7 +2894,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 170, @@ -2853,7 +2931,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 171, @@ -2889,7 +2968,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 132, @@ -2925,7 +3005,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 133, @@ -2961,7 +3042,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 134, @@ -2997,7 +3079,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 135, @@ -3033,7 +3116,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 180, @@ -3069,7 +3153,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 181, @@ -3105,7 +3190,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 182, @@ -3141,7 +3227,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 183, @@ -3177,7 +3264,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 120, @@ -3213,7 +3301,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 121, @@ -3249,7 +3338,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 122, @@ -3285,7 +3375,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 123, @@ -3321,7 +3412,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 124, @@ -3357,7 +3449,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 125, @@ -3393,7 +3486,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 126, @@ -3429,7 +3523,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 127, @@ -3465,7 +3560,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 48, @@ -3501,7 +3597,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 49, @@ -3537,7 +3634,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 50, @@ -3573,7 +3671,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 51, @@ -3609,7 +3708,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 52, @@ -3645,7 +3745,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 53, @@ -3681,7 +3782,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 54, @@ -3717,7 +3819,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 55, @@ -3753,7 +3856,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 60, @@ -3789,7 +3893,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 61, @@ -3825,7 +3930,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 62, @@ -3861,7 +3967,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 63, @@ -3897,7 +4004,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 56, @@ -3933,7 +4041,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 57, @@ -3969,7 +4078,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 58, @@ -4005,7 +4115,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 59, @@ -4041,7 +4152,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 68, @@ -4077,7 +4189,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 69, @@ -4113,7 +4226,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 70, @@ -4149,7 +4263,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 71, @@ -4185,7 +4300,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 64, @@ -4221,7 +4337,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 65, @@ -4257,7 +4374,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 66, @@ -4293,7 +4411,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 67, @@ -4329,7 +4448,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 80, @@ -4365,7 +4485,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 81, @@ -4401,7 +4522,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 82, @@ -4437,7 +4559,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 83, @@ -4473,7 +4596,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 88, @@ -4509,7 +4633,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 89, @@ -4545,7 +4670,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 90, @@ -4581,7 +4707,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 91, @@ -4617,7 +4744,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 92, @@ -4653,7 +4781,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 93, @@ -4689,7 +4818,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 94, @@ -4725,7 +4855,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 95, @@ -4761,7 +4892,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 44, @@ -4797,7 +4929,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 45, @@ -4833,7 +4966,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 46, @@ -4869,7 +5003,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 47, @@ -4905,7 +5040,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 40, @@ -4941,7 +5077,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 41, @@ -4977,7 +5114,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 42, @@ -5013,7 +5151,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 43, @@ -5049,7 +5188,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 32, @@ -5085,7 +5225,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 33, @@ -5121,7 +5262,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 34, @@ -5157,7 +5299,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 35, @@ -5193,7 +5336,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 176, @@ -5229,7 +5373,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 177, @@ -5265,7 +5410,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 178, @@ -5301,7 +5447,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 179, @@ -5337,7 +5484,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 184, @@ -5373,7 +5521,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 185, @@ -5409,7 +5558,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 186, @@ -5445,7 +5595,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 187, @@ -5481,7 +5632,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 188, @@ -5517,7 +5669,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 189, @@ -5553,7 +5706,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 190, @@ -5589,7 +5743,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 191, @@ -5625,7 +5780,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 140, @@ -5661,7 +5817,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 141, @@ -5697,7 +5854,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 142, @@ -5733,7 +5891,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 143, @@ -5769,7 +5928,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 136, @@ -5805,7 +5965,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 137, @@ -5841,7 +6002,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 138, @@ -5877,7 +6039,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 139, @@ -5913,7 +6076,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 128, @@ -5949,7 +6113,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 129, @@ -5985,7 +6150,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 130, @@ -6021,7 +6187,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 131, @@ -6057,7 +6224,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 112, @@ -6093,7 +6261,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 113, @@ -6129,7 +6298,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 114, @@ -6165,7 +6335,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 115, @@ -6201,7 +6372,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 116, @@ -6237,7 +6409,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 117, @@ -6273,7 +6446,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 118, @@ -6309,7 +6483,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 119, @@ -6345,7 +6520,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 104, @@ -6381,7 +6557,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 105, @@ -6417,7 +6594,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 106, @@ -6453,7 +6631,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 107, @@ -6489,7 +6668,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 108, @@ -6525,7 +6705,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 109, @@ -6561,7 +6742,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 110, @@ -6597,7 +6779,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 111, @@ -6633,7 +6816,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 100, @@ -6669,7 +6853,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 101, @@ -6705,7 +6890,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 102, @@ -6741,7 +6927,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 103, @@ -6777,7 +6964,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 96, @@ -6813,7 +7001,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 97, @@ -6849,7 +7038,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 98, @@ -6885,7 +7075,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 99, @@ -6921,7 +7112,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -6960,6 +7152,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -7023,7 +7216,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, diff --git a/fboss/oss/link_test_configs/meru400biu.materialized_JSON b/fboss/oss/link_test_configs/meru400biu.materialized_JSON index 3c3208f962bd6..e5b61dfa563f9 100644 --- a/fboss/oss/link_test_configs/meru400biu.materialized_JSON +++ b/fboss/oss/link_test_configs/meru400biu.materialized_JSON @@ -45,7 +45,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 377, @@ -80,7 +81,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 378, @@ -115,7 +117,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 379, @@ -150,7 +153,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 396, @@ -185,7 +189,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 397, @@ -220,7 +225,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 398, @@ -255,7 +261,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 399, @@ -290,7 +297,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 380, @@ -325,7 +333,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 381, @@ -360,7 +369,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 382, @@ -395,7 +405,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 383, @@ -430,7 +441,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 392, @@ -465,7 +477,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 393, @@ -500,7 +513,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 394, @@ -535,7 +549,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 395, @@ -570,7 +585,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 368, @@ -605,7 +621,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 369, @@ -640,7 +657,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 370, @@ -675,7 +693,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 371, @@ -710,7 +729,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 388, @@ -745,7 +765,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 389, @@ -780,7 +801,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 390, @@ -815,7 +837,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 391, @@ -850,7 +873,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 372, @@ -885,7 +909,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 373, @@ -920,7 +945,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 374, @@ -955,7 +981,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 375, @@ -990,7 +1017,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 384, @@ -1025,7 +1053,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 385, @@ -1060,7 +1089,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 386, @@ -1095,7 +1125,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 387, @@ -1130,7 +1161,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 416, @@ -1165,7 +1197,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 417, @@ -1200,7 +1233,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 418, @@ -1235,7 +1269,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 419, @@ -1270,7 +1305,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 412, @@ -1305,7 +1341,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 413, @@ -1340,7 +1377,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 414, @@ -1375,7 +1413,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 415, @@ -1410,7 +1449,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 420, @@ -1445,7 +1485,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 421, @@ -1480,7 +1521,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 422, @@ -1515,7 +1557,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 423, @@ -1550,7 +1593,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 408, @@ -1585,7 +1629,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 409, @@ -1620,7 +1665,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 410, @@ -1655,7 +1701,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 411, @@ -1690,7 +1737,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 428, @@ -1725,7 +1773,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 429, @@ -1760,7 +1809,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 430, @@ -1795,7 +1845,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 431, @@ -1830,7 +1881,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 404, @@ -1865,7 +1917,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 405, @@ -1900,7 +1953,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 406, @@ -1935,7 +1989,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 407, @@ -1970,7 +2025,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 424, @@ -2005,7 +2061,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 425, @@ -2040,7 +2097,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 426, @@ -2075,7 +2133,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 427, @@ -2110,7 +2169,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 400, @@ -2145,7 +2205,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 401, @@ -2180,7 +2241,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 402, @@ -2215,7 +2277,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 403, @@ -2250,7 +2313,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 344, @@ -2285,7 +2349,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 345, @@ -2320,7 +2385,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 346, @@ -2355,7 +2421,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 347, @@ -2390,7 +2457,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 432, @@ -2425,7 +2493,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 433, @@ -2460,7 +2529,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 434, @@ -2495,7 +2565,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 435, @@ -2530,7 +2601,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 348, @@ -2565,7 +2637,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 349, @@ -2600,7 +2673,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 350, @@ -2635,7 +2709,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 351, @@ -2670,7 +2745,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 436, @@ -2705,7 +2781,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 437, @@ -2740,7 +2817,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 438, @@ -2775,7 +2853,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 439, @@ -2810,7 +2889,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 336, @@ -2845,7 +2925,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 337, @@ -2880,7 +2961,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 338, @@ -2915,7 +2997,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 339, @@ -2950,7 +3033,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 440, @@ -2985,7 +3069,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 441, @@ -3020,7 +3105,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 442, @@ -3055,7 +3141,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 443, @@ -3090,7 +3177,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 340, @@ -3125,7 +3213,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 341, @@ -3160,7 +3249,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 342, @@ -3195,7 +3285,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 343, @@ -3230,7 +3321,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 444, @@ -3265,7 +3357,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 445, @@ -3300,7 +3393,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 446, @@ -3335,7 +3429,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 447, @@ -3370,7 +3465,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 328, @@ -3405,7 +3501,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 329, @@ -3440,7 +3537,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 330, @@ -3475,7 +3573,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 331, @@ -3510,7 +3609,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 316, @@ -3545,7 +3645,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 317, @@ -3580,7 +3681,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 318, @@ -3615,7 +3717,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 319, @@ -3650,7 +3753,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 332, @@ -3685,7 +3789,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 333, @@ -3720,7 +3825,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 334, @@ -3755,7 +3861,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 335, @@ -3790,7 +3897,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 312, @@ -3825,7 +3933,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 313, @@ -3860,7 +3969,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 314, @@ -3895,7 +4005,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 315, @@ -3930,7 +4041,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 320, @@ -3965,7 +4077,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 321, @@ -4000,7 +4113,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 322, @@ -4035,7 +4149,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 323, @@ -4070,7 +4185,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 308, @@ -4105,7 +4221,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 309, @@ -4140,7 +4257,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 310, @@ -4175,7 +4293,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 311, @@ -4210,7 +4329,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 324, @@ -4245,7 +4365,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 325, @@ -4280,7 +4401,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 326, @@ -4315,7 +4437,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 327, @@ -4350,7 +4473,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 304, @@ -4385,7 +4509,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 305, @@ -4420,7 +4545,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 306, @@ -4455,7 +4581,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 307, @@ -4490,7 +4617,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 280, @@ -4525,7 +4653,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 281, @@ -4560,7 +4689,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 282, @@ -4595,7 +4725,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 283, @@ -4630,7 +4761,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 300, @@ -4665,7 +4797,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 301, @@ -4700,7 +4833,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 302, @@ -4735,7 +4869,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 303, @@ -4770,7 +4905,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 284, @@ -4805,7 +4941,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 285, @@ -4840,7 +4977,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 286, @@ -4875,7 +5013,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 287, @@ -4910,7 +5049,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 296, @@ -4945,7 +5085,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 297, @@ -4980,7 +5121,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 298, @@ -5015,7 +5157,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 299, @@ -5050,7 +5193,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 276, @@ -5085,7 +5229,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 277, @@ -5120,7 +5265,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 278, @@ -5155,7 +5301,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 279, @@ -5190,7 +5337,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 288, @@ -5225,7 +5373,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 289, @@ -5260,7 +5409,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 290, @@ -5295,7 +5445,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 291, @@ -5330,7 +5481,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 272, @@ -5365,7 +5517,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 273, @@ -5400,7 +5553,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 274, @@ -5435,7 +5589,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 275, @@ -5470,7 +5625,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 292, @@ -5505,7 +5661,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 293, @@ -5540,7 +5697,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 294, @@ -5575,7 +5733,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 295, @@ -5610,7 +5769,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 256, @@ -5645,7 +5805,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 257, @@ -5680,7 +5841,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 258, @@ -5715,7 +5877,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 259, @@ -5750,7 +5913,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 260, @@ -5785,7 +5949,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 261, @@ -5820,7 +5985,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 262, @@ -5855,7 +6021,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 263, @@ -5890,7 +6057,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 264, @@ -5925,7 +6093,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 265, @@ -5960,7 +6129,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 266, @@ -5995,7 +6165,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 267, @@ -6030,7 +6201,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 268, @@ -6065,7 +6237,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 269, @@ -6100,7 +6273,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 270, @@ -6135,7 +6309,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 271, @@ -6170,7 +6345,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 352, @@ -6205,7 +6381,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 353, @@ -6240,7 +6417,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 354, @@ -6275,7 +6453,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 355, @@ -6310,7 +6489,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 356, @@ -6345,7 +6525,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 357, @@ -6380,7 +6561,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 358, @@ -6415,7 +6597,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 359, @@ -6450,7 +6633,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 360, @@ -6485,7 +6669,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 361, @@ -6520,7 +6705,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 362, @@ -6555,7 +6741,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 363, @@ -6590,7 +6777,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 364, @@ -6625,7 +6813,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 365, @@ -6660,7 +6849,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 366, @@ -6695,7 +6885,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 367, @@ -6730,7 +6921,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -6765,7 +6957,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -6800,7 +6993,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -6835,7 +7029,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -6870,7 +7065,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -6905,7 +7101,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -6940,7 +7137,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -6975,7 +7173,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -7010,7 +7209,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -7045,7 +7245,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -7080,7 +7281,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -7115,7 +7317,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -7150,7 +7353,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -7185,7 +7389,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -7220,7 +7425,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -7255,7 +7461,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -7290,7 +7497,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 1, @@ -7325,7 +7533,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -7441,6 +7650,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -7680,7 +7890,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, @@ -7693,12 +7903,19 @@ "minimum": 0, "maximum": 2047 }, - "systemPortRange": { - "minimum": 10, - "maximum": 29 - }, "switchMac": "02:00:00:00:00:01", - "connectionHandle": "68:00" + "connectionHandle": "68:00", + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 29 + } + ] + }, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "inbandPortId": 1 } }, "vendorMacOuis": [ @@ -7720,13 +7937,20 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 10, - "maximum": 29 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 11, - "platformType": 18 + "platformType": 18, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 29 + } + ] + }, + "inbandPortId": 1 } }, "defaultVoqConfig": [ diff --git a/fboss/oss/link_test_configs/meru800bfa.materialized_JSON b/fboss/oss/link_test_configs/meru800bfa.materialized_JSON index 1b819775d281d..a3331ca2497c9 100644 --- a/fboss/oss/link_test_configs/meru800bfa.materialized_JSON +++ b/fboss/oss/link_test_configs/meru800bfa.materialized_JSON @@ -46,7 +46,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 262, @@ -82,7 +83,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2296, @@ -118,7 +120,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -154,7 +157,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2558, @@ -190,7 +194,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 258, @@ -226,7 +231,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2300, @@ -262,7 +268,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 0, @@ -298,7 +305,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2546, @@ -334,7 +342,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 270, @@ -370,7 +379,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2288, @@ -406,7 +416,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -442,7 +453,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2550, @@ -478,7 +490,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 266, @@ -514,7 +527,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2292, @@ -550,7 +564,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -586,7 +601,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2555, @@ -622,7 +638,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 263, @@ -658,7 +675,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2297, @@ -694,7 +712,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -730,7 +749,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2559, @@ -766,7 +786,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 259, @@ -802,7 +823,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2301, @@ -838,7 +860,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1, @@ -874,7 +897,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2547, @@ -910,7 +934,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 271, @@ -946,7 +971,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2289, @@ -982,7 +1008,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -1018,7 +1045,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2551, @@ -1054,7 +1082,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 267, @@ -1090,7 +1119,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2293, @@ -1126,7 +1156,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -1162,7 +1193,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2302, @@ -1198,7 +1230,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -1234,7 +1267,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2556, @@ -1270,7 +1304,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 256, @@ -1306,7 +1341,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2298, @@ -1342,7 +1378,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -1378,7 +1415,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2552, @@ -1414,7 +1452,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 260, @@ -1450,7 +1489,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2294, @@ -1486,7 +1526,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -1522,7 +1563,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2548, @@ -1558,7 +1600,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 264, @@ -1594,7 +1637,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2290, @@ -1630,7 +1674,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -1666,7 +1711,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2544, @@ -1702,7 +1748,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 268, @@ -1738,7 +1785,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2303, @@ -1774,7 +1822,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -1810,7 +1859,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2557, @@ -1846,7 +1896,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 257, @@ -1882,7 +1933,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2299, @@ -1918,7 +1970,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -1954,7 +2007,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2553, @@ -1990,7 +2044,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 261, @@ -2026,7 +2081,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2295, @@ -2062,7 +2118,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -2098,7 +2155,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2549, @@ -2134,7 +2192,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 265, @@ -2170,7 +2229,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2291, @@ -2206,7 +2266,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -2242,7 +2303,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2545, @@ -2278,7 +2340,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 269, @@ -2314,7 +2377,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2536, @@ -2350,7 +2414,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 276, @@ -2386,7 +2451,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2280, @@ -2422,7 +2488,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 20, @@ -2458,7 +2525,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2540, @@ -2494,7 +2562,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 272, @@ -2530,7 +2599,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2284, @@ -2566,7 +2636,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -2602,7 +2673,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2528, @@ -2638,7 +2710,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 284, @@ -2674,7 +2747,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2272, @@ -2710,7 +2784,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 28, @@ -2746,7 +2821,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2532, @@ -2782,7 +2858,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 280, @@ -2818,7 +2895,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2276, @@ -2854,7 +2932,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 24, @@ -2890,7 +2969,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2537, @@ -2926,7 +3006,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 277, @@ -2962,7 +3043,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2281, @@ -2998,7 +3080,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 21, @@ -3034,7 +3117,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2541, @@ -3070,7 +3154,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 273, @@ -3106,7 +3191,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2285, @@ -3142,7 +3228,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -3178,7 +3265,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2529, @@ -3214,7 +3302,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 285, @@ -3250,7 +3339,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2273, @@ -3286,7 +3376,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 29, @@ -3322,7 +3413,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2533, @@ -3358,7 +3450,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 281, @@ -3394,7 +3487,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2277, @@ -3430,7 +3524,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 25, @@ -3466,7 +3561,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2282, @@ -3502,7 +3598,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 22, @@ -3538,7 +3635,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2538, @@ -3574,7 +3672,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 278, @@ -3610,7 +3709,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2286, @@ -3646,7 +3746,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 18, @@ -3682,7 +3783,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2542, @@ -3718,7 +3820,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 274, @@ -3754,7 +3857,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2274, @@ -3790,7 +3894,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 30, @@ -3826,7 +3931,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2530, @@ -3862,7 +3968,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 286, @@ -3898,7 +4005,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2278, @@ -3934,7 +4042,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 26, @@ -3970,7 +4079,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2534, @@ -4006,7 +4116,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 282, @@ -4042,7 +4153,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2283, @@ -4078,7 +4190,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 23, @@ -4114,7 +4227,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2539, @@ -4150,7 +4264,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 279, @@ -4186,7 +4301,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2287, @@ -4222,7 +4338,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 19, @@ -4258,7 +4375,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2543, @@ -4294,7 +4412,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 275, @@ -4330,7 +4449,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2275, @@ -4366,7 +4486,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 31, @@ -4402,7 +4523,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2531, @@ -4438,7 +4560,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 287, @@ -4474,7 +4597,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2279, @@ -4510,7 +4634,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 27, @@ -4546,7 +4671,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2535, @@ -4582,7 +4708,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 283, @@ -4618,7 +4745,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2520, @@ -4654,7 +4782,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 292, @@ -4690,7 +4819,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2264, @@ -4726,7 +4856,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 36, @@ -4762,7 +4893,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2524, @@ -4798,7 +4930,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 288, @@ -4834,7 +4967,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2268, @@ -4870,7 +5004,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 32, @@ -4906,7 +5041,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2512, @@ -4942,7 +5078,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 300, @@ -4978,7 +5115,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2256, @@ -5014,7 +5152,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 44, @@ -5050,7 +5189,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2516, @@ -5086,7 +5226,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 296, @@ -5122,7 +5263,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2260, @@ -5158,7 +5300,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 40, @@ -5194,7 +5337,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2521, @@ -5230,7 +5374,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 293, @@ -5266,7 +5411,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2265, @@ -5302,7 +5448,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 37, @@ -5338,7 +5485,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2525, @@ -5374,7 +5522,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 289, @@ -5410,7 +5559,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2269, @@ -5446,7 +5596,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 33, @@ -5482,7 +5633,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2513, @@ -5518,7 +5670,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 301, @@ -5554,7 +5707,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2257, @@ -5590,7 +5744,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 45, @@ -5626,7 +5781,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2517, @@ -5662,7 +5818,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 297, @@ -5698,7 +5855,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2261, @@ -5734,7 +5892,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 41, @@ -5770,7 +5929,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2266, @@ -5806,7 +5966,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 38, @@ -5842,7 +6003,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2522, @@ -5878,7 +6040,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 294, @@ -5914,7 +6077,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2270, @@ -5950,7 +6114,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 34, @@ -5986,7 +6151,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2526, @@ -6022,7 +6188,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 290, @@ -6058,7 +6225,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2258, @@ -6094,7 +6262,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 46, @@ -6130,7 +6299,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2514, @@ -6166,7 +6336,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 302, @@ -6202,7 +6373,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2262, @@ -6238,7 +6410,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 42, @@ -6274,7 +6447,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2518, @@ -6310,7 +6484,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 298, @@ -6346,7 +6521,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2267, @@ -6382,7 +6558,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 39, @@ -6418,7 +6595,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2523, @@ -6454,7 +6632,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 295, @@ -6490,7 +6669,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2271, @@ -6526,7 +6706,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 35, @@ -6562,7 +6743,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2527, @@ -6598,7 +6780,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 291, @@ -6634,7 +6817,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2259, @@ -6670,7 +6854,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 47, @@ -6706,7 +6891,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2515, @@ -6742,7 +6928,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 303, @@ -6778,7 +6965,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2263, @@ -6814,7 +7002,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 43, @@ -6850,7 +7039,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2519, @@ -6886,7 +7076,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 299, @@ -6922,7 +7113,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2504, @@ -6958,7 +7150,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 308, @@ -6994,7 +7187,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2248, @@ -7030,7 +7224,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 52, @@ -7066,7 +7261,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2508, @@ -7102,7 +7298,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 304, @@ -7138,7 +7335,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2252, @@ -7174,7 +7372,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 48, @@ -7210,7 +7409,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2496, @@ -7246,7 +7446,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 316, @@ -7282,7 +7483,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2240, @@ -7318,7 +7520,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 60, @@ -7354,7 +7557,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2500, @@ -7390,7 +7594,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 312, @@ -7426,7 +7631,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2244, @@ -7462,7 +7668,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 56, @@ -7498,7 +7705,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2505, @@ -7534,7 +7742,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 309, @@ -7570,7 +7779,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2249, @@ -7606,7 +7816,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 53, @@ -7642,7 +7853,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2509, @@ -7678,7 +7890,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 305, @@ -7714,7 +7927,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2253, @@ -7750,7 +7964,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 49, @@ -7786,7 +8001,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2497, @@ -7822,7 +8038,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 317, @@ -7858,7 +8075,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2241, @@ -7894,7 +8112,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 61, @@ -7930,7 +8149,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2501, @@ -7966,7 +8186,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 313, @@ -8002,7 +8223,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2245, @@ -8038,7 +8260,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 57, @@ -8074,7 +8297,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2250, @@ -8110,7 +8334,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 54, @@ -8146,7 +8371,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2506, @@ -8182,7 +8408,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 310, @@ -8218,7 +8445,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2254, @@ -8254,7 +8482,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 50, @@ -8290,7 +8519,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2510, @@ -8326,7 +8556,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 306, @@ -8362,7 +8593,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2242, @@ -8398,7 +8630,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 62, @@ -8434,7 +8667,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2498, @@ -8470,7 +8704,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 318, @@ -8506,7 +8741,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2246, @@ -8542,7 +8778,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 58, @@ -8578,7 +8815,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2502, @@ -8614,7 +8852,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 314, @@ -8650,7 +8889,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2251, @@ -8686,7 +8926,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 55, @@ -8722,7 +8963,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2507, @@ -8758,7 +9000,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 311, @@ -8794,7 +9037,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2255, @@ -8830,7 +9074,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 51, @@ -8866,7 +9111,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2511, @@ -8902,7 +9148,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 307, @@ -8938,7 +9185,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2243, @@ -8974,7 +9222,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 63, @@ -9010,7 +9259,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2499, @@ -9046,7 +9296,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 319, @@ -9082,7 +9333,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2247, @@ -9118,7 +9370,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 59, @@ -9154,7 +9407,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2503, @@ -9190,7 +9444,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 315, @@ -9226,7 +9481,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2488, @@ -9262,7 +9518,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 324, @@ -9298,7 +9555,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2232, @@ -9334,7 +9592,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 68, @@ -9370,7 +9629,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2492, @@ -9406,7 +9666,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 320, @@ -9442,7 +9703,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2236, @@ -9478,7 +9740,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 64, @@ -9514,7 +9777,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2480, @@ -9550,7 +9814,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 332, @@ -9586,7 +9851,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2224, @@ -9622,7 +9888,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 76, @@ -9658,7 +9925,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2484, @@ -9694,7 +9962,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 328, @@ -9730,7 +9999,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2228, @@ -9766,7 +10036,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 72, @@ -9802,7 +10073,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2489, @@ -9838,7 +10110,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 325, @@ -9874,7 +10147,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2233, @@ -9910,7 +10184,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 69, @@ -9946,7 +10221,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2493, @@ -9982,7 +10258,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 321, @@ -10018,7 +10295,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2237, @@ -10054,7 +10332,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 65, @@ -10090,7 +10369,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2481, @@ -10126,7 +10406,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 333, @@ -10162,7 +10443,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2225, @@ -10198,7 +10480,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 77, @@ -10234,7 +10517,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2485, @@ -10270,7 +10554,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 329, @@ -10306,7 +10591,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2229, @@ -10342,7 +10628,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 73, @@ -10378,7 +10665,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2234, @@ -10414,7 +10702,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 70, @@ -10450,7 +10739,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2490, @@ -10486,7 +10776,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 326, @@ -10522,7 +10813,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2238, @@ -10558,7 +10850,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 66, @@ -10594,7 +10887,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2494, @@ -10630,7 +10924,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 322, @@ -10666,7 +10961,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2226, @@ -10702,7 +10998,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 78, @@ -10738,7 +11035,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2482, @@ -10774,7 +11072,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 334, @@ -10810,7 +11109,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2230, @@ -10846,7 +11146,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 74, @@ -10882,7 +11183,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2486, @@ -10918,7 +11220,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 330, @@ -10954,7 +11257,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2235, @@ -10990,7 +11294,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 71, @@ -11026,7 +11331,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2491, @@ -11062,7 +11368,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 327, @@ -11098,7 +11405,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2239, @@ -11134,7 +11442,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 67, @@ -11170,7 +11479,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2495, @@ -11206,7 +11516,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 323, @@ -11242,7 +11553,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2227, @@ -11278,7 +11590,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 79, @@ -11314,7 +11627,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2483, @@ -11350,7 +11664,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 335, @@ -11386,7 +11701,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2231, @@ -11422,7 +11738,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 75, @@ -11458,7 +11775,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2487, @@ -11494,7 +11812,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 331, @@ -11530,7 +11849,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2472, @@ -11566,7 +11886,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 340, @@ -11602,7 +11923,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2216, @@ -11638,7 +11960,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 84, @@ -11674,7 +11997,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2476, @@ -11710,7 +12034,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 336, @@ -11746,7 +12071,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2220, @@ -11782,7 +12108,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 80, @@ -11818,7 +12145,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2464, @@ -11854,7 +12182,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 348, @@ -11890,7 +12219,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2208, @@ -11926,7 +12256,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 92, @@ -11962,7 +12293,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2468, @@ -11998,7 +12330,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 344, @@ -12034,7 +12367,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2212, @@ -12070,7 +12404,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 88, @@ -12106,7 +12441,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2473, @@ -12142,7 +12478,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 341, @@ -12178,7 +12515,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2217, @@ -12214,7 +12552,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 85, @@ -12250,7 +12589,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2477, @@ -12286,7 +12626,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 337, @@ -12322,7 +12663,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2221, @@ -12358,7 +12700,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 81, @@ -12394,7 +12737,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2465, @@ -12430,7 +12774,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 349, @@ -12466,7 +12811,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2209, @@ -12502,7 +12848,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 93, @@ -12538,7 +12885,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2469, @@ -12574,7 +12922,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 345, @@ -12610,7 +12959,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2213, @@ -12646,7 +12996,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 89, @@ -12682,7 +13033,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2218, @@ -12718,7 +13070,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 86, @@ -12754,7 +13107,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2474, @@ -12790,7 +13144,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 342, @@ -12826,7 +13181,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2222, @@ -12862,7 +13218,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 82, @@ -12898,7 +13255,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2478, @@ -12934,7 +13292,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 338, @@ -12970,7 +13329,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2210, @@ -13006,7 +13366,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 94, @@ -13042,7 +13403,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2466, @@ -13078,7 +13440,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 350, @@ -13114,7 +13477,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2214, @@ -13150,7 +13514,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 90, @@ -13186,7 +13551,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2470, @@ -13222,7 +13588,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 346, @@ -13258,7 +13625,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2219, @@ -13294,7 +13662,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 87, @@ -13330,7 +13699,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2475, @@ -13366,7 +13736,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 343, @@ -13402,7 +13773,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2223, @@ -13438,7 +13810,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 83, @@ -13474,7 +13847,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2479, @@ -13510,7 +13884,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 339, @@ -13546,7 +13921,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2211, @@ -13582,7 +13958,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 95, @@ -13618,7 +13995,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2467, @@ -13654,7 +14032,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 351, @@ -13690,7 +14069,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2215, @@ -13726,7 +14106,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 91, @@ -13762,7 +14143,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2471, @@ -13798,7 +14180,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 347, @@ -13834,7 +14217,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2456, @@ -13870,7 +14254,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 356, @@ -13906,7 +14291,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2200, @@ -13942,7 +14328,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 100, @@ -13978,7 +14365,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2460, @@ -14014,7 +14402,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 352, @@ -14050,7 +14439,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2204, @@ -14086,7 +14476,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 96, @@ -14122,7 +14513,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2448, @@ -14158,7 +14550,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 364, @@ -14194,7 +14587,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2192, @@ -14230,7 +14624,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 108, @@ -14266,7 +14661,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2452, @@ -14302,7 +14698,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 360, @@ -14338,7 +14735,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2196, @@ -14374,7 +14772,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 104, @@ -14410,7 +14809,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2457, @@ -14446,7 +14846,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 357, @@ -14482,7 +14883,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2201, @@ -14518,7 +14920,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 101, @@ -14554,7 +14957,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2461, @@ -14590,7 +14994,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 353, @@ -14626,7 +15031,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2205, @@ -14662,7 +15068,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 97, @@ -14698,7 +15105,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2449, @@ -14734,7 +15142,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 365, @@ -14770,7 +15179,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2193, @@ -14806,7 +15216,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 109, @@ -14842,7 +15253,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2453, @@ -14878,7 +15290,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 361, @@ -14914,7 +15327,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2197, @@ -14950,7 +15364,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 105, @@ -14986,7 +15401,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2202, @@ -15022,7 +15438,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 102, @@ -15058,7 +15475,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2458, @@ -15094,7 +15512,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 358, @@ -15130,7 +15549,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2206, @@ -15166,7 +15586,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 98, @@ -15202,7 +15623,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2462, @@ -15238,7 +15660,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 354, @@ -15274,7 +15697,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2194, @@ -15310,7 +15734,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 110, @@ -15346,7 +15771,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2450, @@ -15382,7 +15808,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 366, @@ -15418,7 +15845,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2198, @@ -15454,7 +15882,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 106, @@ -15490,7 +15919,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2454, @@ -15526,7 +15956,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 362, @@ -15562,7 +15993,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2203, @@ -15598,7 +16030,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 103, @@ -15634,7 +16067,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2459, @@ -15670,7 +16104,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 359, @@ -15706,7 +16141,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2207, @@ -15742,7 +16178,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 99, @@ -15778,7 +16215,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2463, @@ -15814,7 +16252,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 355, @@ -15850,7 +16289,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2195, @@ -15886,7 +16326,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 111, @@ -15922,7 +16363,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2451, @@ -15958,7 +16400,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 367, @@ -15994,7 +16437,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2199, @@ -16030,7 +16474,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 107, @@ -16066,7 +16511,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2455, @@ -16102,7 +16548,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 363, @@ -16138,7 +16585,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2440, @@ -16174,7 +16622,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 372, @@ -16210,7 +16659,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2186, @@ -16246,7 +16696,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 118, @@ -16282,7 +16733,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2444, @@ -16318,7 +16770,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 368, @@ -16354,7 +16807,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2190, @@ -16390,7 +16844,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 114, @@ -16426,7 +16881,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2432, @@ -16462,7 +16918,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 380, @@ -16498,7 +16955,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2178, @@ -16534,7 +16992,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 126, @@ -16570,7 +17029,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2436, @@ -16606,7 +17066,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 376, @@ -16642,7 +17103,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2182, @@ -16678,7 +17140,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 122, @@ -16714,7 +17177,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2441, @@ -16750,7 +17214,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 373, @@ -16786,7 +17251,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2187, @@ -16822,7 +17288,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 119, @@ -16858,7 +17325,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2445, @@ -16894,7 +17362,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 369, @@ -16930,7 +17399,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2191, @@ -16966,7 +17436,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 115, @@ -17002,7 +17473,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2433, @@ -17038,7 +17510,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 381, @@ -17074,7 +17547,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2179, @@ -17110,7 +17584,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 127, @@ -17146,7 +17621,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2437, @@ -17182,7 +17658,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 377, @@ -17218,7 +17695,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2183, @@ -17254,7 +17732,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 123, @@ -17290,7 +17769,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2188, @@ -17326,7 +17806,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 112, @@ -17362,7 +17843,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2446, @@ -17398,7 +17880,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 370, @@ -17434,7 +17917,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2184, @@ -17470,7 +17954,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 116, @@ -17506,7 +17991,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2442, @@ -17542,7 +18028,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 374, @@ -17578,7 +18065,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2180, @@ -17614,7 +18102,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 120, @@ -17650,7 +18139,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2438, @@ -17686,7 +18176,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 378, @@ -17722,7 +18213,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2176, @@ -17758,7 +18250,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 124, @@ -17794,7 +18287,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2434, @@ -17830,7 +18324,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 382, @@ -17866,7 +18361,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2189, @@ -17902,7 +18398,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 113, @@ -17938,7 +18435,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2447, @@ -17974,7 +18472,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 371, @@ -18010,7 +18509,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2185, @@ -18046,7 +18546,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 117, @@ -18082,7 +18583,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2443, @@ -18118,7 +18620,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 375, @@ -18154,7 +18657,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2181, @@ -18190,7 +18694,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 121, @@ -18226,7 +18731,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2439, @@ -18262,7 +18768,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 379, @@ -18298,7 +18805,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2177, @@ -18334,7 +18842,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 125, @@ -18370,7 +18879,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2435, @@ -18406,7 +18916,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 383, @@ -18442,7 +18953,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2430, @@ -18478,7 +18990,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 386, @@ -18514,7 +19027,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2172, @@ -18550,7 +19064,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 128, @@ -18586,7 +19101,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2426, @@ -18622,7 +19138,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 390, @@ -18658,7 +19175,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2168, @@ -18694,7 +19212,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 132, @@ -18730,7 +19249,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2422, @@ -18766,7 +19286,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 394, @@ -18802,7 +19323,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2164, @@ -18838,7 +19360,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 136, @@ -18874,7 +19397,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2418, @@ -18910,7 +19434,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 398, @@ -18946,7 +19471,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2160, @@ -18982,7 +19508,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 140, @@ -19018,7 +19545,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2431, @@ -19054,7 +19582,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 387, @@ -19090,7 +19619,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2173, @@ -19126,7 +19656,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 129, @@ -19162,7 +19693,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2427, @@ -19198,7 +19730,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 391, @@ -19234,7 +19767,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2169, @@ -19270,7 +19804,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 133, @@ -19306,7 +19841,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2423, @@ -19342,7 +19878,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 395, @@ -19378,7 +19915,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2165, @@ -19414,7 +19952,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 137, @@ -19450,7 +19989,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2419, @@ -19486,7 +20026,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 399, @@ -19522,7 +20063,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2161, @@ -19558,7 +20100,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 141, @@ -19594,7 +20137,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2170, @@ -19630,7 +20174,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 134, @@ -19666,7 +20211,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2424, @@ -19702,7 +20248,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 388, @@ -19738,7 +20285,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2174, @@ -19774,7 +20322,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 130, @@ -19810,7 +20359,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2428, @@ -19846,7 +20396,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 384, @@ -19882,7 +20433,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2162, @@ -19918,7 +20470,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 142, @@ -19954,7 +20507,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2416, @@ -19990,7 +20544,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 396, @@ -20026,7 +20581,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2166, @@ -20062,7 +20618,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 138, @@ -20098,7 +20655,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2420, @@ -20134,7 +20692,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 392, @@ -20170,7 +20729,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2171, @@ -20206,7 +20766,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 135, @@ -20242,7 +20803,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2425, @@ -20278,7 +20840,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 389, @@ -20314,7 +20877,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2175, @@ -20350,7 +20914,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 131, @@ -20386,7 +20951,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2429, @@ -20422,7 +20988,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 385, @@ -20458,7 +21025,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2163, @@ -20494,7 +21062,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 143, @@ -20530,7 +21099,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2417, @@ -20566,7 +21136,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 397, @@ -20602,7 +21173,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2167, @@ -20638,7 +21210,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 139, @@ -20674,7 +21247,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2421, @@ -20710,7 +21284,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 393, @@ -20746,7 +21321,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2408, @@ -20782,7 +21358,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 404, @@ -20818,7 +21395,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2152, @@ -20854,7 +21432,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 148, @@ -20890,7 +21469,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2412, @@ -20926,7 +21506,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 400, @@ -20962,7 +21543,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2156, @@ -20998,7 +21580,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 144, @@ -21034,7 +21617,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2400, @@ -21070,7 +21654,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 412, @@ -21106,7 +21691,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2144, @@ -21142,7 +21728,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 156, @@ -21178,7 +21765,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2404, @@ -21214,7 +21802,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 408, @@ -21250,7 +21839,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2148, @@ -21286,7 +21876,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 152, @@ -21322,7 +21913,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2409, @@ -21358,7 +21950,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 405, @@ -21394,7 +21987,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2153, @@ -21430,7 +22024,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 149, @@ -21466,7 +22061,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2413, @@ -21502,7 +22098,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 401, @@ -21538,7 +22135,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2157, @@ -21574,7 +22172,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 145, @@ -21610,7 +22209,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2401, @@ -21646,7 +22246,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 413, @@ -21682,7 +22283,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2145, @@ -21718,7 +22320,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 157, @@ -21754,7 +22357,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2405, @@ -21790,7 +22394,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 409, @@ -21826,7 +22431,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2149, @@ -21862,7 +22468,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 153, @@ -21898,7 +22505,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2154, @@ -21934,7 +22542,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 150, @@ -21970,7 +22579,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2410, @@ -22006,7 +22616,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 406, @@ -22042,7 +22653,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2158, @@ -22078,7 +22690,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 146, @@ -22114,7 +22727,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2414, @@ -22150,7 +22764,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 402, @@ -22186,7 +22801,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2146, @@ -22222,7 +22838,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 158, @@ -22258,7 +22875,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2402, @@ -22294,7 +22912,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 414, @@ -22330,7 +22949,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2150, @@ -22366,7 +22986,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 154, @@ -22402,7 +23023,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2406, @@ -22438,7 +23060,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 410, @@ -22474,7 +23097,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2155, @@ -22510,7 +23134,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 151, @@ -22546,7 +23171,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2411, @@ -22582,7 +23208,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 407, @@ -22618,7 +23245,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2159, @@ -22654,7 +23282,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 147, @@ -22690,7 +23319,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2415, @@ -22726,7 +23356,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 403, @@ -22762,7 +23393,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2147, @@ -22798,7 +23430,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 159, @@ -22834,7 +23467,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2403, @@ -22870,7 +23504,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 415, @@ -22906,7 +23541,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2151, @@ -22942,7 +23578,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 155, @@ -22978,7 +23615,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2407, @@ -23014,7 +23652,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 411, @@ -23050,7 +23689,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2392, @@ -23086,7 +23726,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 420, @@ -23122,7 +23763,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2136, @@ -23158,7 +23800,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 164, @@ -23194,7 +23837,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2396, @@ -23230,7 +23874,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 416, @@ -23266,7 +23911,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2140, @@ -23302,7 +23948,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 160, @@ -23338,7 +23985,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2384, @@ -23374,7 +24022,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 428, @@ -23410,7 +24059,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2128, @@ -23446,7 +24096,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 172, @@ -23482,7 +24133,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2388, @@ -23518,7 +24170,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 424, @@ -23554,7 +24207,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2132, @@ -23590,7 +24244,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 168, @@ -23626,7 +24281,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2393, @@ -23662,7 +24318,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 421, @@ -23698,7 +24355,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2137, @@ -23734,7 +24392,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 165, @@ -23770,7 +24429,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2397, @@ -23806,7 +24466,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 417, @@ -23842,7 +24503,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2141, @@ -23878,7 +24540,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 161, @@ -23914,7 +24577,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2385, @@ -23950,7 +24614,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 429, @@ -23986,7 +24651,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2129, @@ -24022,7 +24688,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 173, @@ -24058,7 +24725,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2389, @@ -24094,7 +24762,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 425, @@ -24130,7 +24799,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2133, @@ -24166,7 +24836,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 169, @@ -24202,7 +24873,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2138, @@ -24238,7 +24910,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 166, @@ -24274,7 +24947,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2394, @@ -24310,7 +24984,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 422, @@ -24346,7 +25021,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2142, @@ -24382,7 +25058,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 162, @@ -24418,7 +25095,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2398, @@ -24454,7 +25132,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 418, @@ -24490,7 +25169,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2130, @@ -24526,7 +25206,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 174, @@ -24562,7 +25243,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2386, @@ -24598,7 +25280,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 430, @@ -24634,7 +25317,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2134, @@ -24670,7 +25354,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 170, @@ -24706,7 +25391,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2390, @@ -24742,7 +25428,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 426, @@ -24778,7 +25465,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2139, @@ -24814,7 +25502,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 167, @@ -24850,7 +25539,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2395, @@ -24886,7 +25576,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 423, @@ -24922,7 +25613,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2143, @@ -24958,7 +25650,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 163, @@ -24994,7 +25687,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2399, @@ -25030,7 +25724,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 419, @@ -25066,7 +25761,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2131, @@ -25102,7 +25798,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 175, @@ -25138,7 +25835,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2387, @@ -25174,7 +25872,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 431, @@ -25210,7 +25909,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2135, @@ -25246,7 +25946,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 171, @@ -25282,7 +25983,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2391, @@ -25318,7 +26020,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 427, @@ -25354,7 +26057,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2376, @@ -25390,7 +26094,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 436, @@ -25426,7 +26131,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2120, @@ -25462,7 +26168,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 180, @@ -25498,7 +26205,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2380, @@ -25534,7 +26242,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 432, @@ -25570,7 +26279,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2124, @@ -25606,7 +26316,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 176, @@ -25642,7 +26353,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2368, @@ -25678,7 +26390,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 444, @@ -25714,7 +26427,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2112, @@ -25750,7 +26464,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 188, @@ -25786,7 +26501,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2372, @@ -25822,7 +26538,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 440, @@ -25858,7 +26575,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2116, @@ -25894,7 +26612,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 184, @@ -25930,7 +26649,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2377, @@ -25966,7 +26686,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 437, @@ -26002,7 +26723,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2121, @@ -26038,7 +26760,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 181, @@ -26074,7 +26797,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2381, @@ -26110,7 +26834,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 433, @@ -26146,7 +26871,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2125, @@ -26182,7 +26908,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 177, @@ -26218,7 +26945,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2369, @@ -26254,7 +26982,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 445, @@ -26290,7 +27019,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2113, @@ -26326,7 +27056,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 189, @@ -26362,7 +27093,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2373, @@ -26398,7 +27130,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 441, @@ -26434,7 +27167,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2117, @@ -26470,7 +27204,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 185, @@ -26506,7 +27241,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2122, @@ -26542,7 +27278,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 182, @@ -26578,7 +27315,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2378, @@ -26614,7 +27352,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 438, @@ -26650,7 +27389,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2126, @@ -26686,7 +27426,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 178, @@ -26722,7 +27463,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2382, @@ -26758,7 +27500,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 434, @@ -26794,7 +27537,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2114, @@ -26830,7 +27574,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 190, @@ -26866,7 +27611,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2370, @@ -26902,7 +27648,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 446, @@ -26938,7 +27685,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2118, @@ -26974,7 +27722,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 186, @@ -27010,7 +27759,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2374, @@ -27046,7 +27796,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 442, @@ -27082,7 +27833,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2123, @@ -27118,7 +27870,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 183, @@ -27154,7 +27907,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2379, @@ -27190,7 +27944,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 439, @@ -27226,7 +27981,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2127, @@ -27262,7 +28018,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 179, @@ -27298,7 +28055,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2383, @@ -27334,7 +28092,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 435, @@ -27370,7 +28129,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2115, @@ -27406,7 +28166,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 191, @@ -27442,7 +28203,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2371, @@ -27478,7 +28240,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 447, @@ -27514,7 +28277,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2119, @@ -27550,7 +28314,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 187, @@ -27586,7 +28351,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2375, @@ -27622,7 +28388,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 443, @@ -27658,7 +28425,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2360, @@ -27694,7 +28462,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 452, @@ -27730,7 +28499,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2104, @@ -27766,7 +28536,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 196, @@ -27802,7 +28573,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2364, @@ -27838,7 +28610,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 448, @@ -27874,7 +28647,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2108, @@ -27910,7 +28684,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 192, @@ -27946,7 +28721,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2352, @@ -27982,7 +28758,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 460, @@ -28018,7 +28795,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2096, @@ -28054,7 +28832,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 204, @@ -28090,7 +28869,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2356, @@ -28126,7 +28906,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 456, @@ -28162,7 +28943,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2100, @@ -28198,7 +28980,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 200, @@ -28234,7 +29017,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2361, @@ -28270,7 +29054,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 453, @@ -28306,7 +29091,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2105, @@ -28342,7 +29128,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 197, @@ -28378,7 +29165,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2365, @@ -28414,7 +29202,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 449, @@ -28450,7 +29239,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2109, @@ -28486,7 +29276,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 193, @@ -28522,7 +29313,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2353, @@ -28558,7 +29350,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 461, @@ -28594,7 +29387,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2097, @@ -28630,7 +29424,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 205, @@ -28666,7 +29461,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2357, @@ -28702,7 +29498,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 457, @@ -28738,7 +29535,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2101, @@ -28774,7 +29572,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 201, @@ -28810,7 +29609,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2106, @@ -28846,7 +29646,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 198, @@ -28882,7 +29683,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2362, @@ -28918,7 +29720,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 454, @@ -28954,7 +29757,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2110, @@ -28990,7 +29794,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 194, @@ -29026,7 +29831,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2366, @@ -29062,7 +29868,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 450, @@ -29098,7 +29905,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2098, @@ -29134,7 +29942,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 206, @@ -29170,7 +29979,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2354, @@ -29206,7 +30016,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 462, @@ -29242,7 +30053,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2102, @@ -29278,7 +30090,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 202, @@ -29314,7 +30127,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2358, @@ -29350,7 +30164,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 458, @@ -29386,7 +30201,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2107, @@ -29422,7 +30238,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 199, @@ -29458,7 +30275,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2363, @@ -29494,7 +30312,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 455, @@ -29530,7 +30349,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2111, @@ -29566,7 +30386,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 195, @@ -29602,7 +30423,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2367, @@ -29638,7 +30460,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 451, @@ -29674,7 +30497,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2099, @@ -29710,7 +30534,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 207, @@ -29746,7 +30571,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2355, @@ -29782,7 +30608,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 463, @@ -29818,7 +30645,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2103, @@ -29854,7 +30682,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 203, @@ -29890,7 +30719,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2359, @@ -29926,7 +30756,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 459, @@ -29962,7 +30793,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2344, @@ -29998,7 +30830,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 468, @@ -30034,7 +30867,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2088, @@ -30070,7 +30904,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 212, @@ -30106,7 +30941,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2348, @@ -30142,7 +30978,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 464, @@ -30178,7 +31015,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2092, @@ -30214,7 +31052,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 208, @@ -30250,7 +31089,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2336, @@ -30286,7 +31126,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 476, @@ -30322,7 +31163,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2080, @@ -30358,7 +31200,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 220, @@ -30394,7 +31237,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2340, @@ -30430,7 +31274,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 472, @@ -30466,7 +31311,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2084, @@ -30502,7 +31348,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 216, @@ -30538,7 +31385,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2345, @@ -30574,7 +31422,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 469, @@ -30610,7 +31459,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2089, @@ -30646,7 +31496,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 213, @@ -30682,7 +31533,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2349, @@ -30718,7 +31570,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 465, @@ -30754,7 +31607,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2093, @@ -30790,7 +31644,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 209, @@ -30826,7 +31681,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2337, @@ -30862,7 +31718,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 477, @@ -30898,7 +31755,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2081, @@ -30934,7 +31792,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 221, @@ -30970,7 +31829,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2341, @@ -31006,7 +31866,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 473, @@ -31042,7 +31903,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2085, @@ -31078,7 +31940,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 217, @@ -31114,7 +31977,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2090, @@ -31150,7 +32014,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 214, @@ -31186,7 +32051,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2346, @@ -31222,7 +32088,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 470, @@ -31258,7 +32125,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2094, @@ -31294,7 +32162,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 210, @@ -31330,7 +32199,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2350, @@ -31366,7 +32236,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 466, @@ -31402,7 +32273,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2082, @@ -31438,7 +32310,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 222, @@ -31474,7 +32347,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2338, @@ -31510,7 +32384,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 478, @@ -31546,7 +32421,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2086, @@ -31582,7 +32458,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 218, @@ -31618,7 +32495,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2342, @@ -31654,7 +32532,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 474, @@ -31690,7 +32569,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2091, @@ -31726,7 +32606,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 215, @@ -31762,7 +32643,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2347, @@ -31798,7 +32680,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 471, @@ -31834,7 +32717,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2095, @@ -31870,7 +32754,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 211, @@ -31906,7 +32791,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2351, @@ -31942,7 +32828,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 467, @@ -31978,7 +32865,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2083, @@ -32014,7 +32902,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 223, @@ -32050,7 +32939,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2339, @@ -32086,7 +32976,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 479, @@ -32122,7 +33013,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2087, @@ -32158,7 +33050,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 219, @@ -32194,7 +33087,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2343, @@ -32230,7 +33124,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 475, @@ -32266,7 +33161,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2328, @@ -32302,7 +33198,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 484, @@ -32338,7 +33235,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2072, @@ -32374,7 +33272,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 228, @@ -32410,7 +33309,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2332, @@ -32446,7 +33346,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 480, @@ -32482,7 +33383,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2076, @@ -32518,7 +33420,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 224, @@ -32554,7 +33457,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2320, @@ -32590,7 +33494,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 492, @@ -32626,7 +33531,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2064, @@ -32662,7 +33568,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 236, @@ -32698,7 +33605,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2324, @@ -32734,7 +33642,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 488, @@ -32770,7 +33679,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2068, @@ -32806,7 +33716,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 232, @@ -32842,7 +33753,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2329, @@ -32878,7 +33790,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 485, @@ -32914,7 +33827,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2073, @@ -32950,7 +33864,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 229, @@ -32986,7 +33901,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2333, @@ -33022,7 +33938,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 481, @@ -33058,7 +33975,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2077, @@ -33094,7 +34012,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 225, @@ -33130,7 +34049,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2321, @@ -33166,7 +34086,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 493, @@ -33202,7 +34123,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2065, @@ -33238,7 +34160,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 237, @@ -33274,7 +34197,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2325, @@ -33310,7 +34234,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 489, @@ -33346,7 +34271,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2069, @@ -33382,7 +34308,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 233, @@ -33418,7 +34345,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2074, @@ -33454,7 +34382,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 230, @@ -33490,7 +34419,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2330, @@ -33526,7 +34456,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 486, @@ -33562,7 +34493,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2078, @@ -33598,7 +34530,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 226, @@ -33634,7 +34567,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2334, @@ -33670,7 +34604,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 482, @@ -33706,7 +34641,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2066, @@ -33742,7 +34678,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 238, @@ -33778,7 +34715,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2322, @@ -33814,7 +34752,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 494, @@ -33850,7 +34789,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2070, @@ -33886,7 +34826,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 234, @@ -33922,7 +34863,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2326, @@ -33958,7 +34900,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 490, @@ -33994,7 +34937,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2075, @@ -34030,7 +34974,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 231, @@ -34066,7 +35011,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2331, @@ -34102,7 +35048,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 487, @@ -34138,7 +35085,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2079, @@ -34174,7 +35122,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 227, @@ -34210,7 +35159,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2335, @@ -34246,7 +35196,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 483, @@ -34282,7 +35233,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2067, @@ -34318,7 +35270,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 239, @@ -34354,7 +35307,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2323, @@ -34390,7 +35344,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 495, @@ -34426,7 +35381,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2071, @@ -34462,7 +35418,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 235, @@ -34498,7 +35455,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2327, @@ -34534,7 +35492,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 491, @@ -34570,7 +35529,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2312, @@ -34606,7 +35566,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 500, @@ -34642,7 +35603,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2058, @@ -34678,7 +35640,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 246, @@ -34714,7 +35677,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2316, @@ -34750,7 +35714,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 496, @@ -34786,7 +35751,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2062, @@ -34822,7 +35788,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 242, @@ -34858,7 +35825,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2304, @@ -34894,7 +35862,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 508, @@ -34930,7 +35899,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2050, @@ -34966,7 +35936,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 254, @@ -35002,7 +35973,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2308, @@ -35038,7 +36010,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 504, @@ -35074,7 +36047,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2054, @@ -35110,7 +36084,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 250, @@ -35146,7 +36121,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2313, @@ -35182,7 +36158,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 501, @@ -35218,7 +36195,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2059, @@ -35254,7 +36232,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 247, @@ -35290,7 +36269,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2317, @@ -35326,7 +36306,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 497, @@ -35362,7 +36343,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2063, @@ -35398,7 +36380,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 243, @@ -35434,7 +36417,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2305, @@ -35470,7 +36454,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 509, @@ -35506,7 +36491,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2051, @@ -35542,7 +36528,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 255, @@ -35578,7 +36565,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2309, @@ -35614,7 +36602,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 505, @@ -35650,7 +36639,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2055, @@ -35686,7 +36676,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 251, @@ -35722,7 +36713,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2060, @@ -35758,7 +36750,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 240, @@ -35794,7 +36787,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2318, @@ -35830,7 +36824,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 498, @@ -35866,7 +36861,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2056, @@ -35902,7 +36898,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 244, @@ -35938,7 +36935,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2314, @@ -35974,7 +36972,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 502, @@ -36010,7 +37009,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2052, @@ -36046,7 +37046,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 248, @@ -36082,7 +37083,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2310, @@ -36118,7 +37120,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 506, @@ -36154,7 +37157,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2048, @@ -36190,7 +37194,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 252, @@ -36226,7 +37231,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2306, @@ -36262,7 +37268,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 510, @@ -36298,7 +37305,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2061, @@ -36334,7 +37342,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 241, @@ -36370,7 +37379,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2319, @@ -36406,7 +37416,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 499, @@ -36442,7 +37453,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2057, @@ -36478,7 +37490,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 245, @@ -36514,7 +37527,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2315, @@ -36550,7 +37564,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 503, @@ -36586,7 +37601,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2053, @@ -36622,7 +37638,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 249, @@ -36658,7 +37675,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2311, @@ -36694,7 +37712,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 507, @@ -36730,7 +37749,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2049, @@ -36766,7 +37786,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 253, @@ -36802,7 +37823,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2307, @@ -36838,7 +37860,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 511, @@ -36874,7 +37897,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -36913,6 +37937,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -36976,7 +38001,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, diff --git a/fboss/oss/link_test_configs/meru800bia.materialized_JSON b/fboss/oss/link_test_configs/meru800bia.materialized_JSON index fd8f9b650219d..2188c610cac8b 100644 --- a/fboss/oss/link_test_configs/meru800bia.materialized_JSON +++ b/fboss/oss/link_test_configs/meru800bia.materialized_JSON @@ -44,7 +44,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -79,7 +80,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -114,7 +116,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -149,7 +152,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -184,7 +188,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -219,7 +224,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -254,7 +260,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 1093, @@ -289,7 +296,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1089, @@ -324,7 +332,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1088, @@ -359,7 +368,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1091, @@ -394,7 +404,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1092, @@ -429,7 +440,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1090, @@ -464,7 +476,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1094, @@ -499,7 +512,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1095, @@ -534,7 +548,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1096, @@ -569,7 +584,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1103, @@ -604,7 +620,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1098, @@ -639,7 +656,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1097, @@ -674,7 +692,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1100, @@ -709,7 +728,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1101, @@ -744,7 +764,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1102, @@ -779,7 +800,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1099, @@ -814,7 +836,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1080, @@ -849,7 +872,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1081, @@ -884,7 +908,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1082, @@ -919,7 +944,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1083, @@ -954,7 +980,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1084, @@ -989,7 +1016,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1085, @@ -1024,7 +1052,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1086, @@ -1059,7 +1088,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1087, @@ -1094,7 +1124,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1074, @@ -1129,7 +1160,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1075, @@ -1164,7 +1196,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1072, @@ -1199,7 +1232,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1073, @@ -1234,7 +1268,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1076, @@ -1269,7 +1304,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1077, @@ -1304,7 +1340,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1078, @@ -1339,7 +1376,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1079, @@ -1374,7 +1412,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1070, @@ -1409,7 +1448,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1071, @@ -1444,7 +1484,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1069, @@ -1479,7 +1520,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1065, @@ -1514,7 +1556,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1068, @@ -1549,7 +1592,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1066, @@ -1584,7 +1628,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1064, @@ -1619,7 +1664,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1067, @@ -1654,7 +1700,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1061, @@ -1689,7 +1736,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1063, @@ -1724,7 +1772,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1062, @@ -1759,7 +1808,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1057, @@ -1794,7 +1844,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1060, @@ -1829,7 +1880,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1058, @@ -1864,7 +1916,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1056, @@ -1899,7 +1952,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1059, @@ -1934,7 +1988,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1048, @@ -1969,7 +2024,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1049, @@ -2004,7 +2060,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1050, @@ -2039,7 +2096,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1051, @@ -2074,7 +2132,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1052, @@ -2109,7 +2168,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1053, @@ -2144,7 +2204,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1054, @@ -2179,7 +2240,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1055, @@ -2214,7 +2276,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1042, @@ -2249,7 +2312,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1043, @@ -2284,7 +2348,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1040, @@ -2319,7 +2384,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1041, @@ -2354,7 +2420,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1044, @@ -2389,7 +2456,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1045, @@ -2424,7 +2492,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1046, @@ -2459,7 +2528,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1047, @@ -2494,7 +2564,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1034, @@ -2529,7 +2600,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1033, @@ -2564,7 +2636,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1032, @@ -2599,7 +2672,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1039, @@ -2634,7 +2708,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1035, @@ -2669,7 +2744,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1038, @@ -2704,7 +2780,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1037, @@ -2739,7 +2816,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1036, @@ -2774,7 +2852,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1026, @@ -2809,7 +2888,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1025, @@ -2844,7 +2924,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1024, @@ -2879,7 +2960,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1031, @@ -2914,7 +2996,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1027, @@ -2949,7 +3032,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1030, @@ -2984,7 +3068,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1029, @@ -3019,7 +3104,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1028, @@ -3054,7 +3140,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 20, @@ -3089,7 +3176,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 21, @@ -3124,7 +3212,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 24, @@ -3159,7 +3248,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 25, @@ -3194,7 +3284,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 18, @@ -3229,7 +3320,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 19, @@ -3264,7 +3356,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 22, @@ -3299,7 +3392,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 23, @@ -3334,7 +3428,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -3369,7 +3464,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -3404,7 +3500,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -3439,7 +3536,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -3474,7 +3572,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -3509,7 +3608,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -3544,7 +3644,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -3579,7 +3680,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -3614,7 +3716,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -3649,7 +3752,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -3684,7 +3788,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 26, @@ -3719,7 +3824,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 27, @@ -3754,7 +3860,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 30, @@ -3789,7 +3896,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 31, @@ -3824,7 +3932,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 28, @@ -3859,7 +3968,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 29, @@ -3894,7 +4004,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 42, @@ -3929,7 +4040,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 43, @@ -3964,7 +4076,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 32, @@ -3999,7 +4112,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 33, @@ -4034,7 +4148,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 38, @@ -4069,7 +4184,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 39, @@ -4104,7 +4220,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 40, @@ -4139,7 +4256,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 41, @@ -4174,7 +4292,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 34, @@ -4209,7 +4328,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 35, @@ -4244,7 +4364,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 36, @@ -4279,7 +4400,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 37, @@ -4314,7 +4436,8 @@ ], "drainState": 0, - "scope": 1 + "scope": 1, + "conditionalEntropyRehash": false }, { "logicalID": 1117, @@ -4349,7 +4472,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1116, @@ -4384,7 +4508,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1112, @@ -4419,7 +4544,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1119, @@ -4454,7 +4580,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1115, @@ -4489,7 +4616,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1118, @@ -4524,7 +4652,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1114, @@ -4559,7 +4688,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1113, @@ -4594,7 +4724,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1110, @@ -4629,7 +4760,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1111, @@ -4664,7 +4796,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1109, @@ -4699,7 +4832,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1105, @@ -4734,7 +4868,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1108, @@ -4769,7 +4904,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1106, @@ -4804,7 +4940,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1104, @@ -4839,7 +4976,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1107, @@ -4874,7 +5012,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1138, @@ -4909,7 +5048,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1139, @@ -4944,7 +5084,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1141, @@ -4979,7 +5120,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1143, @@ -5014,7 +5156,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1140, @@ -5049,7 +5192,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1136, @@ -5084,7 +5228,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1142, @@ -5119,7 +5264,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1137, @@ -5154,7 +5300,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1120, @@ -5189,7 +5336,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1123, @@ -5224,7 +5372,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1125, @@ -5259,7 +5408,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1121, @@ -5294,7 +5444,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1124, @@ -5329,7 +5480,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1122, @@ -5364,7 +5516,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1126, @@ -5399,7 +5552,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1127, @@ -5434,7 +5588,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1133, @@ -5469,7 +5624,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1132, @@ -5504,7 +5660,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1134, @@ -5539,7 +5696,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1135, @@ -5574,7 +5732,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1131, @@ -5609,7 +5768,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1128, @@ -5644,7 +5804,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1130, @@ -5679,7 +5840,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1129, @@ -5714,7 +5876,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1149, @@ -5749,7 +5912,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1150, @@ -5784,7 +5948,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1144, @@ -5819,7 +5984,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1151, @@ -5854,7 +6020,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1146, @@ -5889,7 +6056,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1148, @@ -5924,7 +6092,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1147, @@ -5959,7 +6128,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1145, @@ -5994,7 +6164,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1168, @@ -6029,7 +6200,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1171, @@ -6064,7 +6236,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1173, @@ -6099,7 +6272,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1169, @@ -6134,7 +6308,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1172, @@ -6169,7 +6344,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1170, @@ -6204,7 +6380,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1174, @@ -6239,7 +6416,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1175, @@ -6274,7 +6452,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1176, @@ -6309,7 +6488,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1177, @@ -6344,7 +6524,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1178, @@ -6379,7 +6560,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1183, @@ -6414,7 +6596,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1181, @@ -6449,7 +6632,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1180, @@ -6484,7 +6668,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1179, @@ -6519,7 +6704,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1182, @@ -6554,7 +6740,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1165, @@ -6589,7 +6776,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1166, @@ -6624,7 +6812,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1160, @@ -6659,7 +6848,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1167, @@ -6694,7 +6884,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1162, @@ -6729,7 +6920,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1164, @@ -6764,7 +6956,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1163, @@ -6799,7 +6992,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1161, @@ -6834,7 +7028,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1156, @@ -6869,7 +7064,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1159, @@ -6904,7 +7100,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1157, @@ -6939,7 +7136,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1153, @@ -6974,7 +7172,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1152, @@ -7009,7 +7208,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1154, @@ -7044,7 +7244,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1158, @@ -7079,7 +7280,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 1155, @@ -7114,7 +7316,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -7484,6 +7687,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -7816,6 +8020,10 @@ { "rxReason": 6, "queueId": 0 + }, + { + "rxReason": 21, + "queueId": 0 } ] }, @@ -7866,7 +8074,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, @@ -7879,12 +8087,19 @@ "minimum": 0, "maximum": 2047 }, - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "switchMac": "02:00:00:00:00:01", - "connectionHandle": "15:00" + "connectionHandle": "15:00", + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 53 + } + ] + }, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "inbandPortId": 1 } }, "vendorMacOuis": [ @@ -7906,13 +8121,20 @@ "loopbackIps": [ ], - "systemPortRange": { - "minimum": 10, - "maximum": 53 - }, "nodeMac": "02:00:00:00:0F:0B", "asicType": 14, - "platformType": 28 + "platformType": 28, + "localSystemPortOffset": 10, + "globalSystemPortOffset": 10, + "systemPortRanges": { + "systemPortRanges": [ + { + "minimum": 10, + "maximum": 53 + } + ] + }, + "inbandPortId": 1 } }, "defaultVoqConfig": [ @@ -7932,9 +8154,11 @@ "custom_feature_fabric_cgm_ddc_th_tune.BCM8889X": "1", "custom_feature_programmability_standard_image_name.BCM8889X": "AI23", "custom_feature_ser_event_generate": "1", + "custom_feature_shel_arm_enable": "1", "custom_feature_statdma_enable": "0", "custom_feature_use_new_access.BCM8889X": "1", "custom_feature_use_new_access.BCM8889X_ADAPTER": "1", + "custom_feature_vsqd_lossless_reject_enable": "1", "dpp_db_path": "/tmp/db", "dram_temperature_monitor_enable.BCM8889X_ADAPTER": "0", "dtm_flow_mapping_mode_region_65.BCM8889X": "3", @@ -7968,6 +8192,7 @@ "dtm_flow_mapping_mode_region_93.BCM8889X": "3", "dtm_flow_mapping_mode_region_94.BCM8889X": "3", "dtm_flow_nof_remote_cores_region.BCM8889X": "4", + "eventor_sbus_dma_channels.BCM8889X": "0,6,0,7", "fabric_connect_mode.BCM8889X": "FE", "fabric_connectivity_based_on_integrity": "0", "fabric_distributed_system_enable": "1", @@ -9007,6 +9232,7 @@ "sai_l3_max_ecmp_paths": "512", "sai_macro_flow_based_hash": "1", "sai_mmu_qgroups_default": "1", + "sai_ocb_fc_config": "2", "sai_optimize_acl_ipv6_addr_qual": "0", "sai_optimized_mmu": "0x1", "sai_pfc_defaults_disable": "0x1", @@ -9014,6 +9240,7 @@ "sai_pkt_rx_custom_cfg": "1", "sai_pkt_rx_pkt_size": "16512", "sai_recycle_port_lane_base": "440", + "sai_tc_mirror_buffer_size_bytes": "1", "sai_trigger_linkscan_remote_local_faults": "1", "sai_voq_wm_latency_enable": "1", "sat_enable.BCM8889X_ADAPTER": "1", diff --git a/fboss/oss/link_test_configs/tahan800bc.materialized_JSON b/fboss/oss/link_test_configs/tahan800bc.materialized_JSON index 612627993b6c2..fd6b8f6aac13b 100644 --- a/fboss/oss/link_test_configs/tahan800bc.materialized_JSON +++ b/fboss/oss/link_test_configs/tahan800bc.materialized_JSON @@ -43,7 +43,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 2, @@ -78,7 +79,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 3, @@ -113,7 +115,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 4, @@ -148,7 +151,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 5, @@ -183,7 +187,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 6, @@ -218,7 +223,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 7, @@ -253,7 +259,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 8, @@ -288,7 +295,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 9, @@ -323,7 +331,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 10, @@ -358,7 +367,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 11, @@ -393,7 +403,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 12, @@ -428,7 +439,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 13, @@ -463,7 +475,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 14, @@ -498,7 +511,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 15, @@ -533,7 +547,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 16, @@ -568,7 +583,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 17, @@ -603,7 +619,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 18, @@ -638,7 +655,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 19, @@ -673,7 +691,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 20, @@ -708,7 +727,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 21, @@ -743,7 +763,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 22, @@ -778,7 +799,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 23, @@ -813,7 +835,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 24, @@ -848,7 +871,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 25, @@ -883,7 +907,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 26, @@ -918,7 +943,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 27, @@ -953,7 +979,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 28, @@ -988,7 +1015,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 29, @@ -1023,7 +1051,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 30, @@ -1058,7 +1087,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 31, @@ -1093,7 +1123,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 32, @@ -1128,7 +1159,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 33, @@ -1163,7 +1195,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 34, @@ -1198,7 +1231,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 35, @@ -1233,7 +1267,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 36, @@ -1268,7 +1303,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 37, @@ -1303,7 +1339,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 38, @@ -1338,7 +1375,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 39, @@ -1373,7 +1411,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 40, @@ -1408,7 +1447,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 41, @@ -1443,7 +1483,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 42, @@ -1478,7 +1519,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 43, @@ -1513,7 +1555,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 44, @@ -1548,7 +1591,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 45, @@ -1583,7 +1627,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 46, @@ -1618,7 +1663,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 47, @@ -1653,7 +1699,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 48, @@ -1688,7 +1735,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 49, @@ -1723,7 +1771,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 50, @@ -1758,7 +1807,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 51, @@ -1793,7 +1843,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 52, @@ -1828,7 +1879,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 53, @@ -1863,7 +1915,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 54, @@ -1898,7 +1951,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 55, @@ -1933,7 +1987,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 56, @@ -1968,7 +2023,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 57, @@ -2003,7 +2059,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 58, @@ -2038,7 +2095,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 59, @@ -2073,7 +2131,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 60, @@ -2108,7 +2167,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 61, @@ -2143,7 +2203,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 62, @@ -2178,7 +2239,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 63, @@ -2213,7 +2275,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 64, @@ -2248,7 +2311,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 65, @@ -2283,7 +2347,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 66, @@ -2318,7 +2383,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 67, @@ -2353,7 +2419,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 68, @@ -2388,7 +2455,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 69, @@ -2423,7 +2491,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 70, @@ -2458,7 +2527,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 71, @@ -2493,7 +2563,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 72, @@ -2528,7 +2599,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 73, @@ -2563,7 +2635,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 74, @@ -2598,7 +2671,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 75, @@ -2633,7 +2707,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 76, @@ -2668,7 +2743,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 77, @@ -2703,7 +2779,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 78, @@ -2738,7 +2815,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 79, @@ -2773,7 +2851,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 80, @@ -2808,7 +2887,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 81, @@ -2843,7 +2923,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 82, @@ -2878,7 +2959,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 83, @@ -2913,7 +2995,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 84, @@ -2948,7 +3031,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 85, @@ -2983,7 +3067,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 86, @@ -3018,7 +3103,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 87, @@ -3053,7 +3139,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 88, @@ -3088,7 +3175,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 89, @@ -3123,7 +3211,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 90, @@ -3158,7 +3247,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 91, @@ -3193,7 +3283,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 92, @@ -3228,7 +3319,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 93, @@ -3263,7 +3355,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 94, @@ -3298,7 +3391,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 95, @@ -3333,7 +3427,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 96, @@ -3368,7 +3463,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false }, { "logicalID": 97, @@ -3403,7 +3499,8 @@ ], "drainState": 0, - "scope": 0 + "scope": 0, + "conditionalEntropyRehash": false } ], "vlans": [ @@ -6378,6 +6475,7 @@ "1": 1, "2": 0, "3": 0, + "4": 0, "700": 255, "786": 10 }, @@ -6745,7 +6843,7 @@ "exactMatchTableConfigs": [ ], - "switchIdToSwitchType": { + "switchIdToSwitchType_DEPRECATED": { }, "switchDrainState": 0, diff --git a/fboss/oss/production_features/asic_production_features.materialized_JSON b/fboss/oss/production_features/asic_production_features.materialized_JSON index 892ad4c64dc8b..a2842d3f95f08 100644 --- a/fboss/oss/production_features/asic_production_features.materialized_JSON +++ b/fboss/oss/production_features/asic_production_features.materialized_JSON @@ -115,7 +115,8 @@ 36, 37, 41, - 44 + 44, + 46 ], "tomahawk3": [ 2, @@ -372,7 +373,8 @@ "RSW_ROUTE_SCALE", "FSW_ROUTE_SCALE", "TH_ALPM_ROUTE_SCALE", - "VLAN" + "VLAN", + "LED_PROGRAMMING" ], "tomahawk3": [ "CPU_RX_TX", diff --git a/fboss/oss/qsfp_known_bad_tests/fboss_qsfp_known_bad_tests.materialized_JSON b/fboss/oss/qsfp_known_bad_tests/fboss_qsfp_known_bad_tests.materialized_JSON index 1548e15a09c7e..759f2cc66e46f 100644 --- a/fboss/oss/qsfp_known_bad_tests/fboss_qsfp_known_bad_tests.materialized_JSON +++ b/fboss/oss/qsfp_known_bad_tests/fboss_qsfp_known_bad_tests.materialized_JSON @@ -289,18 +289,6 @@ { "test_name_regex": "HwTransceiverConfigValidationTest.validateAllActiveTransceivers$" }, - { - "test_name_regex": "HwTest_PROFILE_10G_1_NRZ_NOFEC_OPTICAL.TestProfile$" - }, - { - "test_name_regex": "HwXphyPortStatsCollectionTest.*$" - }, - { - "test_name_regex": "HwXphyPrbsStatsCollectionTest.*$" - }, - { - "test_name_regex": "HwXphyPortInfoTest.*$" - }, { "test_name_regex": "HwPortPrbsTest.*._true.SetPrbs$" }, diff --git a/fboss/oss/qsfp_test_configs/janga800bic.materialized_JSON b/fboss/oss/qsfp_test_configs/janga800bic.materialized_JSON index bc51bf035ceb5..fa6f7b1b13e9c 100644 --- a/fboss/oss/qsfp_test_configs/janga800bic.materialized_JSON +++ b/fboss/oss/qsfp_test_configs/janga800bic.materialized_JSON @@ -653,7 +653,19 @@ "versions": [ { "fwType": 1, - "version": "1.15" + "version": "1.16" + } + ] + }, + "QDD-400G-XDR4": { + "versions": [ + { + "fwType": 1, + "version": "2.1" + }, + { + "fwType": 2, + "version": "0.0" } ] }, diff --git a/fboss/oss/qsfp_test_configs/meru400bfu.materialized_JSON b/fboss/oss/qsfp_test_configs/meru400bfu.materialized_JSON index ca3064b6d1fe4..2588dde1797fc 100644 --- a/fboss/oss/qsfp_test_configs/meru400bfu.materialized_JSON +++ b/fboss/oss/qsfp_test_configs/meru400bfu.materialized_JSON @@ -75,7 +75,19 @@ "versions": [ { "fwType": 1, - "version": "1.15" + "version": "1.16" + } + ] + }, + "QDD-400G-XDR4": { + "versions": [ + { + "fwType": 1, + "version": "2.1" + }, + { + "fwType": 2, + "version": "0.0" } ] }, diff --git a/fboss/oss/qsfp_test_configs/meru400biu.materialized_JSON b/fboss/oss/qsfp_test_configs/meru400biu.materialized_JSON index 7920a82cc6999..812a1023d5df0 100644 --- a/fboss/oss/qsfp_test_configs/meru400biu.materialized_JSON +++ b/fboss/oss/qsfp_test_configs/meru400biu.materialized_JSON @@ -80,7 +80,19 @@ "versions": [ { "fwType": 1, - "version": "1.15" + "version": "1.16" + } + ] + }, + "QDD-400G-XDR4": { + "versions": [ + { + "fwType": 1, + "version": "2.1" + }, + { + "fwType": 2, + "version": "0.0" } ] }, diff --git a/fboss/oss/qsfp_test_configs/tahan800bc.materialized_JSON b/fboss/oss/qsfp_test_configs/tahan800bc.materialized_JSON index b052d896a6403..0cc3c31fe23aa 100644 --- a/fboss/oss/qsfp_test_configs/tahan800bc.materialized_JSON +++ b/fboss/oss/qsfp_test_configs/tahan800bc.materialized_JSON @@ -122,7 +122,19 @@ "versions": [ { "fwType": 1, - "version": "1.15" + "version": "1.16" + } + ] + }, + "QDD-400G-XDR4": { + "versions": [ + { + "fwType": 1, + "version": "2.1" + }, + { + "fwType": 2, + "version": "0.0" } ] }, diff --git a/fboss/oss/qsfp_unsupported_tests/fboss_qsfp_unsupported_tests.materialized_JSON b/fboss/oss/qsfp_unsupported_tests/fboss_qsfp_unsupported_tests.materialized_JSON index 0ea44a616b8b1..61bf3951d4073 100644 --- a/fboss/oss/qsfp_unsupported_tests/fboss_qsfp_unsupported_tests.materialized_JSON +++ b/fboss/oss/qsfp_unsupported_tests/fboss_qsfp_unsupported_tests.materialized_JSON @@ -1632,6 +1632,9 @@ { "test_name_regex": "HwMacsecTest.*$" }, + { + "test_name_regex": "PhyIOTest.phyIOStats$" + }, { "test_name_regex": "HwTest_PROFILE_DEFAULT.TestProfile$" }, @@ -1790,6 +1793,9 @@ { "test_name_regex": "HwMacsecTest.*$" }, + { + "test_name_regex": "PhyIOTest.phyIOStats$" + }, { "test_name_regex": "HwTest_PROFILE_DEFAULT.TestProfile$" }, @@ -3997,6 +4003,9 @@ { "test_name_regex": "HwPortPrbsTest_LINE_PAM4.*$" }, + { + "test_name_regex": "HwTest.cmisPageChange$" + }, { "test_name_regex": "HwTest_PROFILE_DEFAULT.TestProfile$" }, @@ -4239,9 +4248,6 @@ { "test_name_regex": "HwTest_PROFILE_100G_4_NRZ_RS528_COPPER.TestProfile$" }, - { - "test_name_regex": "HwTest_PROFILE_100G_4_NRZ_RS528_OPTICAL.TestProfile$" - }, { "test_name_regex": "HwTest_PROFILE_200G_4_PAM4_RS544X2N_COPPER.TestProfile$" }, @@ -4412,9 +4418,6 @@ { "test_name_regex": "HwTest_PROFILE_100G_4_NRZ_RS528_COPPER.TestProfile$" }, - { - "test_name_regex": "HwTest_PROFILE_100G_4_NRZ_RS528_OPTICAL.TestProfile$" - }, { "test_name_regex": "HwTest_PROFILE_200G_4_PAM4_RS544X2N_COPPER.TestProfile$" }, @@ -5599,9 +5602,6 @@ { "test_name_regex": "HwTest_PROFILE_400G_8_PAM4_RS544X2N.TestProfile$" }, - { - "test_name_regex": "HwTest_PROFILE_10G_1_NRZ_NOFEC_COPPER.TestProfile$" - }, { "test_name_regex": "HwTest_PROFILE_20G_2_NRZ_NOFEC_COPPER.TestProfile$" }, @@ -5757,9 +5757,6 @@ { "test_name_regex": "HwTest_PROFILE_400G_8_PAM4_RS544X2N.TestProfile$" }, - { - "test_name_regex": "HwTest_PROFILE_10G_1_NRZ_NOFEC_COPPER.TestProfile$" - }, { "test_name_regex": "HwTest_PROFILE_20G_2_NRZ_NOFEC_COPPER.TestProfile$" }, diff --git a/fboss/oss/sai_hw_unsupported_tests/sai_hw_unsupported_tests.materialized_JSON b/fboss/oss/sai_hw_unsupported_tests/sai_hw_unsupported_tests.materialized_JSON index 58aff04fb06b8..615558d698aa4 100644 --- a/fboss/oss/sai_hw_unsupported_tests/sai_hw_unsupported_tests.materialized_JSON +++ b/fboss/oss/sai_hw_unsupported_tests/sai_hw_unsupported_tests.materialized_JSON @@ -52,6 +52,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "warm_boot.*" }, @@ -189,6 +192,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "warm_boot.*" }, @@ -326,6 +332,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "HwRouteScaleTest.anticipatedRouteScaleGenerator$" }, @@ -393,6 +402,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/10.2.0.0_odp/10.2.0.0_odp/tomahawk4": [ @@ -446,6 +458,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/10.2.0.0_odp/10.2.0.0_odp/tomahawk5": [ @@ -499,6 +514,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/11.3.0.0_dnx_odp/11.3.0.0_dnx_odp/jericho3": [ @@ -734,6 +752,239 @@ "test_name_regex": "HwLoadBalancerNegativeTestV6RoCE.*$" } ], + "brcm/11.7.0.0_dnx_odp/11.7.0.0_dnx_odp/jericho3": [ + { + "test_name_regex": "HwFlowletAclCounterTest.*$" + }, + { + "test_name_regex": "HwFlowletSwitching.*$" + }, + { + "test_name_regex": "HwEcmpFlowletSwitching.*$" + }, + { + "test_name_regex": "HwLoadBalancerTestV6Flowlet.*$" + }, + { + "test_name_regex": "HwLoadBalancerTestV6EcmpToFlowlet.*$" + }, + { + "test_name_regex": "AgentFlowletSwitchingTest.*$" + }, + { + "test_name_regex": "HwTeFlowTest.*$" + }, + { + "test_name_regex": "HwTeFlowTrafficTest.*$" + }, + { + "test_name_regex": "HwUdfAcl.*$" + }, + { + "test_name_regex": "HwEcmpTest.Ucmp.*" + }, + { + "test_name_regex": "HwLoadBalancerTestV[46].*Ucmp.*" + }, + { + "test_name_regex": "HwVlanTest.VlanApplyConfig" + }, + { + "test_name_regex": "HwPacketFloodTest.*" + }, + { + "test_name_regex": "HwPacketSendTest.ArpRequestToFrontPanelPortSwitched" + }, + { + "test_name_regex": "HwPacketSendReceiveLagTest.LacpPacketReceiveSrcPort" + }, + { + "test_name_regex": "HwTrunkLoadBalancerTest.*" + }, + { + "test_name_regex": "HwNeighborTest/[1357].*" + }, + { + "test_name_regex": "HwHashTrunk.*" + }, + { + "test_name_regex": "HwEcmpTrunkTest.*" + }, + { + "test_name_regex": "HwTrunkTest.*" + }, + { + "test_name_regex": "HwFlexPortTest.*" + }, + { + "test_name_regex": "HwCoppTest/1.*" + }, + { + "test_name_regex": "HwRouteCounterOverflowTest.*" + }, + { + "test_name_regex": "HwRouteStatTest.*" + }, + { + "test_name_regex": "HwPortBandwidthTest.*" + }, + { + "test_name_regex": "HwMPLSTest/[01].*" + }, + { + "test_name_regex": "HwLabelSwitchRouteTest/[01].*" + }, + { + "test_name_regex": "HwLabelEdgeRouteTest/[01].*" + }, + { + "test_name_regex": "HwRouteScaleTest.turboFabricScaleTest" + }, + { + "test_name_regex": "HwLoadBalancerTestsV[46]InMplsPhp.*" + }, + { + "test_name_regex": "HwLoadBalancerTestsV[46]InMplsSwap.*" + }, + { + "test_name_regex": "HwLoadBalancerTestV[46]ToMpls.*" + }, + { + "test_name_regex": "HwLabelSwitchRouteTest/[01].*" + }, + { + "test_name_regex": "HwLabelEdgeRouteTest/[01].*" + }, + { + "test_name_regex": "HwTest_PROFILE*" + }, + { + "test_name_regex": "HwFlexPortTest.*" + }, + { + "test_name_regex": "HwMacLearningAndNeighborResolutionTest.*" + }, + { + "test_name_regex": "HwMacSwLearningModeTest.*" + }, + { + "test_name_regex": "HwMacLearningTest.*" + }, + { + "test_name_regex": "HwMacLearningMacMoveTest.*" + }, + { + "test_name_regex": "HwMacLearningStaticEntriesTest.*" + }, + { + "test_name_regex": "HwMacLearningAndMyStationInteractionTest.*" + }, + { + "test_name_regex": "HwMacLearningBatchEntriesTest.*" + }, + { + "test_name_regex": "HwL2ClassIDTest.*" + }, + { + "test_name_regex": "HwQueuePerHostL2Test.*" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*VlanID*" + }, + { + "test_name_regex": "HwAclQualifierTest.*VlanID*" + }, + { + "test_name_regex": "HwPtpTcTest.*" + }, + { + "test_name_regex": "HwIpInIpTunnelTest.*" + }, + { + "test_name_regex": "HwNeighborTest/[01234567].ResolvePendingEntryThenChangeLookupClass" + }, + { + "test_name_regex": "HwQueuePerHostRouteTest/[01].*" + }, + { + "test_name_regex": "HwQueuePerHostTest/[0123].*" + }, + { + "test_name_regex": "SaiQPHRollbackTest.*" + }, + { + "test_name_regex": "HwRouteTest/[01].VerifyClassID*" + }, + { + "test_name_regex": "HwRouteTest/[01].StaticIp2MplsRoutes" + }, + { + "test_name_regex": "HwRouteTest/[01].VerifyClassIdWithNhopResolutionFlap" + }, + { + "test_name_regex": "HwAclQualifierTest/[01].*LookupClass*" + }, + { + "test_name_regex": "HwAclQualifierTest.*LookupClass*" + }, + { + "test_name_regex": "HwFabricSwitchTest.*" + }, + { + "test_name_regex": "HwProdInvariantsRswStrictPriorityTest.verifyInvariants" + }, + { + "test_name_regex": "HwProdInvariantsRswTest.verifyInvariants" + }, + { + "test_name_regex": "HwPortLedTest.*" + }, + { + "test_name_regex": "HwUdfTest.*" + }, + { + "test_name_regex": "HwL3Test.*" + }, + { + "test_name_regex": "HwMmuTuningTest.*" + }, + { + "test_name_regex": "HwFabricSwitchTest.*" + }, + { + "test_name_regex": "HwDscpMarkingTest.*" + }, + { + "test_name_regex": "HwProdInvariants.*" + }, + { + "test_name_regex": "HwAqmTest.verifyPerQueueWredDropStats" + }, + { + "test_name_regex": "HwAqmTest.verifyWredThreshold" + }, + { + "test_name_regex": "HwSflowMirrorTest.*" + }, + { + "test_name_regex": "HwSflowTest.*" + }, + { + "test_name_regex": "HwMirrorTest/[01].*" + }, + { + "test_name_regex": "HwSplitAgentCallbackTest.*" + }, + { + "test_name_regex": "HwIngressBufferTest.validatePGQueueChanges$" + }, + { + "test_name_regex": "HwInPauseFloodTest.*$" + }, + { + "test_name_regex": "HwLoadBalancerNegativeTestV6RoCE.*$" + } + ], "brcm/12.0_ea_dnx_odp/12.0_ea_dnx_odp/jericho3": [ { "test_name_regex": "HwFlowletAclCounterTest.*$" @@ -998,6 +1249,9 @@ { "test_name_regex": "HwLoadBalancerTestV[46].Ucmp.*$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "HwInPauseFloodTest.*$" } @@ -1054,6 +1308,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "HwRouteScaleTest.anticipatedRouteScaleGenerator$" }, @@ -1121,6 +1378,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/8.2.0.0_odp/8.2.0.0_odp/tomahawk4": [ @@ -1174,6 +1434,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/8.2.0.0_odp/9.2.0.0_odp/tomahawk": [ @@ -1228,6 +1491,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "HwRouteScaleTest.anticipatedRouteScaleGenerator$" }, @@ -1295,6 +1561,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/8.2.0.0_odp/9.2.0.0_odp/tomahawk4": [ @@ -1348,6 +1617,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/8.2.0.0_sim_odp/8.2.0.0_sim_odp/tomahawk4/simulator": [ @@ -1402,6 +1674,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "warm_boot.*" }, @@ -1539,6 +1814,9 @@ { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" + }, { "test_name_regex": "HwRouteScaleTest.anticipatedRouteScaleGenerator$" }, @@ -1606,6 +1884,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "brcm/9.2.0.0_odp/9.2.0.0_odp/tomahawk4": [ @@ -1659,6 +1940,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/1.42.8/1.42.8/gibraltar": [ @@ -1742,6 +2026,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].*$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/1.42.8/1.42.8/simulator": [ @@ -1795,6 +2082,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/1.65.1/1.65.1/gibraltar": [ @@ -1848,6 +2138,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/1.68.0/1.68.0/graphene200/simulator": [ @@ -1901,6 +2194,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/24.4.90/24.4.90/gibraltar": [ @@ -1954,6 +2250,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/24.4.90_yuba/24.4.90_yuba/graphene200": [ @@ -2007,6 +2306,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ], "leaba/24.8.3001/24.8.3001/gibraltar": [ @@ -2060,6 +2362,9 @@ }, { "test_name_regex": "HwAclCounterTest/[01].VerifyCounterBumpOnBthOpcodeHitFrontPanel$" + }, + { + "test_name_regex": "HwAsicDefaultProgrammingTest.*$" } ] } diff --git a/fboss/oss/stable_commits/github_hashes_11112024_152622.tar.gz b/fboss/oss/stable_commits/github_hashes_11112024_152622.tar.gz new file mode 100644 index 0000000000000..0f26b8c24915a Binary files /dev/null and b/fboss/oss/stable_commits/github_hashes_11112024_152622.tar.gz differ diff --git a/fboss/oss/stable_commits/github_hashes_11132024_094640.tar.gz b/fboss/oss/stable_commits/github_hashes_11132024_094640.tar.gz new file mode 100644 index 0000000000000..5aa7b56905b05 Binary files /dev/null and b/fboss/oss/stable_commits/github_hashes_11132024_094640.tar.gz differ diff --git a/fboss/oss/stable_commits/github_hashes_11182024_134423.tar.gz b/fboss/oss/stable_commits/github_hashes_11182024_134423.tar.gz new file mode 100644 index 0000000000000..204e24e6d359f Binary files /dev/null and b/fboss/oss/stable_commits/github_hashes_11182024_134423.tar.gz differ diff --git a/fboss/oss/stable_commits/latest_stable_hashes.tar.gz b/fboss/oss/stable_commits/latest_stable_hashes.tar.gz index cb0961ecaffed..673ee0d3c2794 120000 --- a/fboss/oss/stable_commits/latest_stable_hashes.tar.gz +++ b/fboss/oss/stable_commits/latest_stable_hashes.tar.gz @@ -1 +1 @@ -github_hashes_10212024_124153.tar.gz \ No newline at end of file +github_hashes_11182024_134423.tar.gz \ No newline at end of file diff --git a/fboss/platform/BUCK b/fboss/platform/BUCK index 1ef4c81528e65..854665fccdb26 100644 --- a/fboss/platform/BUCK +++ b/fboss/platform/BUCK @@ -5,7 +5,6 @@ oncall("fboss_platform") fbpkg.builder( name = "fboss.platform.stack", - buck_opts = fbpkg.buck_opts(version = "v2"), expire_days = 10, override_log_paths = ["fboss/platform"], path_actions = { diff --git a/fboss/platform/bsp_tests/test_runner.py b/fboss/platform/bsp_tests/test_runner.py index f69eef23e22b0..b2d38a5b16661 100644 --- a/fboss/platform/bsp_tests/test_runner.py +++ b/fboss/platform/bsp_tests/test_runner.py @@ -1,3 +1,4 @@ +# pyre-unsafe import argparse import os from dataclasses import dataclass diff --git a/fboss/platform/bsp_tests/tests/conftest.py b/fboss/platform/bsp_tests/tests/conftest.py index d81f40f204b37..1a64b867d9a6e 100644 --- a/fboss/platform/bsp_tests/tests/conftest.py +++ b/fboss/platform/bsp_tests/tests/conftest.py @@ -1,3 +1,4 @@ +# pyre-unsafe import os from pathlib import Path from typing import List, Tuple diff --git a/fboss/platform/bsp_tests/tests/test_cdev.py b/fboss/platform/bsp_tests/tests/test_cdev.py index 8536082d3f4fe..f3109d28c8731 100644 --- a/fboss/platform/bsp_tests/tests/test_cdev.py +++ b/fboss/platform/bsp_tests/tests/test_cdev.py @@ -1,3 +1,4 @@ +# pyre-unsafe import fcntl import os from time import sleep diff --git a/fboss/platform/bsp_tests/tests/test_gpio.py b/fboss/platform/bsp_tests/tests/test_gpio.py index 6c136273420e7..f5c896051e115 100644 --- a/fboss/platform/bsp_tests/tests/test_gpio.py +++ b/fboss/platform/bsp_tests/tests/test_gpio.py @@ -1,3 +1,4 @@ +# pyre-unsafe from typing import List, Tuple import pytest diff --git a/fboss/platform/bsp_tests/tests/test_hwmon.py b/fboss/platform/bsp_tests/tests/test_hwmon.py index 3d57c19568b9b..fefe0c087a0e8 100644 --- a/fboss/platform/bsp_tests/tests/test_hwmon.py +++ b/fboss/platform/bsp_tests/tests/test_hwmon.py @@ -1,3 +1,4 @@ +# pyre-unsafe import pytest import sensors diff --git a/fboss/platform/bsp_tests/tests/test_i2c.py b/fboss/platform/bsp_tests/tests/test_i2c.py index 9c7ec04276c4a..82754e1bbb732 100644 --- a/fboss/platform/bsp_tests/tests/test_i2c.py +++ b/fboss/platform/bsp_tests/tests/test_i2c.py @@ -1,3 +1,4 @@ +# pyre-unsafe import concurrent.futures import os import re diff --git a/fboss/platform/bsp_tests/tests/test_kmods.py b/fboss/platform/bsp_tests/tests/test_kmods.py index 37dad68f12837..6b1555f2e3f77 100644 --- a/fboss/platform/bsp_tests/tests/test_kmods.py +++ b/fboss/platform/bsp_tests/tests/test_kmods.py @@ -1,3 +1,4 @@ +# pyre-unsafe import pytest from fboss.platform.bsp_tests.utils.kmod_utils import ( diff --git a/fboss/platform/bsp_tests/tests/test_led.py b/fboss/platform/bsp_tests/tests/test_led.py index 07fa56f6d6da6..2a95045dcfdc0 100644 --- a/fboss/platform/bsp_tests/tests/test_led.py +++ b/fboss/platform/bsp_tests/tests/test_led.py @@ -1,3 +1,4 @@ +# pyre-unsafe import glob import os diff --git a/fboss/platform/bsp_tests/tests/test_watchdog.py b/fboss/platform/bsp_tests/tests/test_watchdog.py index 28aa9b88e528a..905f1204b03a2 100644 --- a/fboss/platform/bsp_tests/tests/test_watchdog.py +++ b/fboss/platform/bsp_tests/tests/test_watchdog.py @@ -1,3 +1,4 @@ +# pyre-unsafe import pytest from fboss.platform.bsp_tests.utils.cdev_utils import delete_device diff --git a/fboss/platform/bsp_tests/tests/test_xcvr.py b/fboss/platform/bsp_tests/tests/test_xcvr.py index 166d201582fff..2bd5a2271af6e 100644 --- a/fboss/platform/bsp_tests/tests/test_xcvr.py +++ b/fboss/platform/bsp_tests/tests/test_xcvr.py @@ -1,3 +1,4 @@ +# pyre-unsafe import glob import os from typing import Dict, Optional diff --git a/fboss/platform/bsp_tests/utils/cdev_types.py b/fboss/platform/bsp_tests/utils/cdev_types.py index 40d77a224f274..bc10af244a45b 100644 --- a/fboss/platform/bsp_tests/utils/cdev_types.py +++ b/fboss/platform/bsp_tests/utils/cdev_types.py @@ -1,3 +1,4 @@ +# pyre-unsafe import ctypes from dataclasses import dataclass, field from enum import Enum diff --git a/fboss/platform/bsp_tests/utils/cdev_utils.py b/fboss/platform/bsp_tests/utils/cdev_utils.py index a64815a709215..d35469b07e87e 100644 --- a/fboss/platform/bsp_tests/utils/cdev_utils.py +++ b/fboss/platform/bsp_tests/utils/cdev_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import fcntl import os from typing import Dict, List diff --git a/fboss/platform/bsp_tests/utils/cmd_utils.py b/fboss/platform/bsp_tests/utils/cmd_utils.py index 109c1d1d2d7b4..1cde49e7ef788 100644 --- a/fboss/platform/bsp_tests/utils/cmd_utils.py +++ b/fboss/platform/bsp_tests/utils/cmd_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import subprocess diff --git a/fboss/platform/bsp_tests/utils/gpio_utils.py b/fboss/platform/bsp_tests/utils/gpio_utils.py index 450cd5abad5a9..d7aa2392890e5 100644 --- a/fboss/platform/bsp_tests/utils/gpio_utils.py +++ b/fboss/platform/bsp_tests/utils/gpio_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import re from dataclasses import dataclass from typing import List, Optional diff --git a/fboss/platform/bsp_tests/utils/i2c_utils.py b/fboss/platform/bsp_tests/utils/i2c_utils.py index 38811bad89dc6..2c054adcc1b71 100644 --- a/fboss/platform/bsp_tests/utils/i2c_utils.py +++ b/fboss/platform/bsp_tests/utils/i2c_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import os import subprocess from collections import namedtuple diff --git a/fboss/platform/bsp_tests/utils/kmod_utils.py b/fboss/platform/bsp_tests/utils/kmod_utils.py index df6206210329c..602538ef86180 100644 --- a/fboss/platform/bsp_tests/utils/kmod_utils.py +++ b/fboss/platform/bsp_tests/utils/kmod_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import shutil from typing import List diff --git a/fboss/platform/bsp_tests/utils/watchdog_utils.py b/fboss/platform/bsp_tests/utils/watchdog_utils.py index 460d8cee1602c..a981869269e9b 100644 --- a/fboss/platform/bsp_tests/utils/watchdog_utils.py +++ b/fboss/platform/bsp_tests/utils/watchdog_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe import ctypes import fcntl import glob diff --git a/fboss/platform/config_lib/BUCK b/fboss/platform/config_lib/BUCK index f8adfe1394f9b..bec9608cb8829 100644 --- a/fboss/platform/config_lib/BUCK +++ b/fboss/platform/config_lib/BUCK @@ -12,7 +12,7 @@ cpp_binary( ], deps = [ "//fboss/platform/data_corral_service/if:led_manager-cpp2-types", - "//fboss/platform/fan_service:utils", + "//fboss/platform/fan_service:config_validator", "//fboss/platform/fan_service/if:fan_service-cpp2-types", "//fboss/platform/fw_util/if:fw_util_config-cpp2-types", "//fboss/platform/platform_manager:config_validator", diff --git a/fboss/platform/configs/janga800bic/fan_service.json b/fboss/platform/configs/janga800bic/fan_service.json index 7d0dfc60b044e..0fbbe05a9be27 100644 --- a/fboss/platform/configs/janga800bic/fan_service.json +++ b/fboss/platform/configs/janga800bic/fan_service.json @@ -2,7 +2,7 @@ "pwmBoostOnNumDeadFan": 1, "pwmBoostOnNumDeadSensor": 0, "pwmBoostOnNoQsfpAfterInSec": 55, - "pwmBoostValue": 75, + "pwmBoostValue": 100, "pwmTransitionValue": 50, "pwmLowerThreshold": 30, "pwmUpperThreshold": 100, diff --git a/fboss/platform/configs/janga800bic/platform_manager.json b/fboss/platform/configs/janga800bic/platform_manager.json index 83f821b28cdf5..c0e51d050fbfa 100644 --- a/fboss/platform/configs/janga800bic/platform_manager.json +++ b/fboss/platform/configs/janga800bic/platform_manager.json @@ -147,13 +147,13 @@ }, { "busName": "INCOMING@3", - "address": "0x21", + "address": "0x2f", "kernelDeviceName": "bp4f_mp2891", "pmUnitScopedName": "SMB_U337_PMBUS_1" }, { "busName": "INCOMING@3", - "address": "0x2f", + "address": "0x21", "kernelDeviceName": "bp4f_mp2891", "pmUnitScopedName": "SMB_U177_PMBUS_2" }, @@ -2114,10 +2114,18 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, + { + "busName": "SMB_IOB_I2C_MASTER_23", + "address": "0x4c", + "kernelDeviceName": "tmp422", + "pmUnitScopedName": "SMB_U68_TMP422" + }, { "busName": "SMB_IOB_I2C_MASTER_25", "address": "0x37", @@ -2126,7 +2134,9 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, @@ -2138,10 +2148,18 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, + { + "busName": "SMB_IOB_I2C_MASTER_25", + "address": "0x4c", + "kernelDeviceName": "tmp422", + "pmUnitScopedName": "SMB_U351_TMP422" + }, { "busName": "SMB_IOB_I2C_MASTER_26", "address": "0x37", @@ -2150,7 +2168,9 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, @@ -2162,10 +2182,18 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, + { + "busName": "SMB_IOB_I2C_MASTER_26", + "address": "0x4c", + "kernelDeviceName": "tmp422", + "pmUnitScopedName": "SMB_U352_TMP422" + }, { "busName": "SMB_IOB_I2C_MASTER_27", "address": "0x37", @@ -2174,7 +2202,9 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, @@ -2186,7 +2216,9 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, @@ -2198,10 +2230,24 @@ "initRegSettings": [ { "regOffset": 11, - "ioBuf": [2] + "ioBuf": [ + 2 + ] } ] }, + { + "busName": "SMB_IOB_I2C_MASTER_28", + "address": "0x4c", + "kernelDeviceName": "tmp422", + "pmUnitScopedName": "SMB_U150_TMP422" + }, + { + "busName": "SMB_IOB_I2C_MASTER_29", + "address": "0x4c", + "kernelDeviceName": "tmp422", + "pmUnitScopedName": "SMB_U152_TMP422" + }, { "busName": "SMB_IOB_I2C_MASTER_10", "address": "0x3e", @@ -2452,13 +2498,18 @@ "/run/devmap/sensors/SMB_U279_ADM1272_1": "/[SMB_U279_ADM1272_1]", "/run/devmap/sensors/SMB_U104_LM75B_2": "/[SMB_U104_LM75B_2]", "/run/devmap/sensors/SMB_U355_ADC128D818_1": "/[SMB_U355_ADC128D818_1]", + "/run/devmap/sensors/SMB_U68_TMP422": "/[SMB_U68_TMP422]", "/run/devmap/sensors/SMB_U356_ADC128D818_1": "/[SMB_U356_ADC128D818_1]", "/run/devmap/sensors/SMB_U360_ADC128D818_2": "/[SMB_U360_ADC128D818_2]", + "/run/devmap/sensors/SMB_U351_TMP422": "/[SMB_U351_TMP422]", "/run/devmap/sensors/SMB_U361_ADC128D818_1": "/[SMB_U361_ADC128D818_1]", "/run/devmap/sensors/SMB_U357_ADC128D818_2": "/[SMB_U357_ADC128D818_2]", + "/run/devmap/sensors/SMB_U352_TMP422": "/[SMB_U352_TMP422]", "/run/devmap/sensors/SMB_U354_ADC128D818_1": "/[SMB_U354_ADC128D818_1]", "/run/devmap/sensors/SMB_U288_ADC128D818_2": "/[SMB_U288_ADC128D818_2]", "/run/devmap/sensors/SMB_U353_ADC128D818_3": "/[SMB_U353_ADC128D818_3]", + "/run/devmap/sensors/SMB_U150_TMP422": "/[SMB_U150_TMP422]", + "/run/devmap/sensors/SMB_U152_TMP422": "/[SMB_U152_TMP422]", "/run/devmap/sensors/PDB_PMBUS_BRICK_1": "/PDB_SLOT@0/[PDB_PMBUS_BRICK_1]", "/run/devmap/sensors/PDB_PMBUS_BRICK_2": "/PDB_SLOT@0/[PDB_PMBUS_BRICK_2]", "/run/devmap/sensors/PDB_U1_LM75B": "/PDB_SLOT@0/[PDB_U1_LM75B]", diff --git a/fboss/platform/configs/janga800bic/sensor_service.json b/fboss/platform/configs/janga800bic/sensor_service.json index d03314e4ce6ee..96664f3b9bb01 100644 --- a/fboss/platform/configs/janga800bic/sensor_service.json +++ b/fboss/platform/configs/janga800bic/sensor_service.json @@ -1006,6 +1006,105 @@ }, "compute": "(1000/3650)*@/1000.0" } + ], + "versionedSensors": [ + { + "sensors": [ + { + "name": "SMB_U68_TMP422_J3_A_TEMPDIODE_NIF1", + "sysfsPath": "/run/devmap/sensors/SMB_U68_TMP422/temp2_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U68_TMP422_J3_A_TEMPDIODE_HBM_PHY0", + "sysfsPath": "/run/devmap/sensors/SMB_U68_TMP422/temp3_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U150_TMP422_J3_A_TEMPDIODE_FAB1", + "sysfsPath": "/run/devmap/sensors/SMB_U150_TMP422/temp2_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U150_TMP422_J3_A_TEMPDIODE_HBM_PHY2", + "sysfsPath": "/run/devmap/sensors/SMB_U150_TMP422/temp3_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U351_TMP422_J3_B_TEMPDIODE_PADS", + "sysfsPath": "/run/devmap/sensors/SMB_U351_TMP422/temp2_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U351_TMP422_J3_B_TEMPDIODE_NIF0", + "sysfsPath": "/run/devmap/sensors/SMB_U351_TMP422/temp3_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U352_TMP422_J3_B_TEMPDIODE_NIF1", + "sysfsPath": "/run/devmap/sensors/SMB_U352_TMP422/temp2_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U352_TMP422_J3_B_TEMPDIODE_HBM_PHY0", + "sysfsPath": "/run/devmap/sensors/SMB_U352_TMP422/temp3_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U152_TMP422_J3_B_TEMPDIODE_FAB1", + "sysfsPath": "/run/devmap/sensors/SMB_U152_TMP422/temp2_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + }, + { + "name": "SMB_U152_TMP422_J3_B_TEMPDIODE_HBM_PHY2", + "sysfsPath": "/run/devmap/sensors/SMB_U152_TMP422/temp3_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 110 + }, + "compute": "@/1000.0" + } + ], + "productProductionState": 2, + "productVersion": 4, + "productSubVersion": 20 + } ] }, { diff --git a/fboss/platform/configs/meru800bfa/platform_manager.json b/fboss/platform/configs/meru800bfa/platform_manager.json index d451bd298d2c4..5a574e7e58959 100644 --- a/fboss/platform/configs/meru800bfa/platform_manager.json +++ b/fboss/platform/configs/meru800bfa/platform_manager.json @@ -106,7 +106,14 @@ ], "spiMasterConfigs": [], "ledCtrlConfigs": [], - "xcvrCtrlConfigs": [] + "xcvrCtrlConfigs": [], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SCM_FPGA_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } + ] } ], "embeddedSensorConfigs": [ @@ -1327,6 +1334,13 @@ }, "portNumber": 60 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA0_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] }, { @@ -2229,6 +2243,13 @@ }, "portNumber": 64 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA1_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] }, { @@ -3167,6 +3188,13 @@ }, "portNumber": 124 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA2_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] }, { @@ -4069,6 +4097,13 @@ }, "portNumber": 128 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA3_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] } ] @@ -4098,6 +4133,7 @@ ], "symbolicLinkToDevicePath": { "/run/devmap/fpgas/MERU_SCM_CPLD": "/[SCM_FPGA]", + "/run/devmap/fpgas/MERU_SCM_FPGA_INFO_ROM": "/[SCM_FPGA_INFO_ROM]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH0": "/[SCM_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH1": "/[SCM_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH2": "/[SCM_I2C_MASTER0@2]", @@ -4125,6 +4161,10 @@ "/run/devmap/fpgas/MERU800BFA_SMB_FPGA1": "/SMB_SLOT@0/[SMB_FPGA1]", "/run/devmap/fpgas/MERU800BFA_SMB_FPGA2": "/SMB_SLOT@0/[SMB_FPGA2]", "/run/devmap/fpgas/MERU800BFA_SMB_FPGA3": "/SMB_SLOT@0/[SMB_FPGA3]", + "/run/devmap/fpgas/MERU800BFA_SMB_FPGA0_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA0_INFO_ROM]", + "/run/devmap/fpgas/MERU800BFA_SMB_FPGA1_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA1_INFO_ROM]", + "/run/devmap/fpgas/MERU800BFA_SMB_FPGA2_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA2_INFO_ROM]", + "/run/devmap/fpgas/MERU800BFA_SMB_FPGA3_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA3_INFO_ROM]", "/run/devmap/i2c-busses/MERU800BFA_SMB_FPGA0_SMBUS0_CH0": "/SMB_SLOT@0/[SMB_FPGA0_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU800BFA_SMB_FPGA0_SMBUS0_CH1": "/SMB_SLOT@0/[SMB_FPGA0_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU800BFA_SMB_FPGA0_SMBUS0_CH2": "/SMB_SLOT@0/[SMB_FPGA0_I2C_MASTER0@2]", @@ -4446,14 +4486,15 @@ "/run/devmap/sensors/PSU4_PMBUS": "/SMB_SLOT@0/PSU_SLOT@3/[PSU_PMBUS]" }, "bspKmodsRpmName": "arista_bsp_kmods", - "bspKmodsRpmVersion": "0.7.4-1", + "bspKmodsRpmVersion": "0.7.6-1", "bspKmodsToReload": [ "scd-xcvr", "scd-spi", "scd-leds", "scd-smbus", "dsf-fan-cpld", - "decker-cpld" + "decker-cpld", + "scd_info" ], "sharedKmodsToReload": [ "scd" diff --git a/fboss/platform/configs/meru800bia/platform_manager.json b/fboss/platform/configs/meru800bia/platform_manager.json index 1e36508301ece..aa47b7d7b52a5 100644 --- a/fboss/platform/configs/meru800bia/platform_manager.json +++ b/fboss/platform/configs/meru800bia/platform_manager.json @@ -105,7 +105,14 @@ ], "spiMasterConfigs": [], "ledCtrlConfigs": [], - "xcvrCtrlConfigs": [] + "xcvrCtrlConfigs": [], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SCM_FPGA_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } + ] } ], "embeddedSensorConfigs": [ @@ -1449,6 +1456,13 @@ }, "portNumber": 39 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] } ] @@ -1478,6 +1492,7 @@ ], "symbolicLinkToDevicePath": { "/run/devmap/fpgas/MERU_SCM_CPLD": "/[SCM_FPGA]", + "/run/devmap/fpgas/MERU_SCM_CPLD_INFO_ROM": "/[SCM_FPGA_INFO_ROM]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH0": "/[SCM_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH1": "/[SCM_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH2": "/[SCM_I2C_MASTER0@2]", @@ -1502,6 +1517,7 @@ "/run/devmap/sensors/CPU_PXM1310_2": "/[SCM_PXM1310_2]", "/run/devmap/sensors/CPU_CORE_TEMP": "/[CPU_CORE_TEMP]", "/run/devmap/fpgas/MERU800BIA_SMB_FPGA": "/SMB_SLOT@0/[SMB_FPGA]", + "/run/devmap/fpgas/MERU800BIA_SMB_FPGA_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA_INFO_ROM]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH0": "/SMB_SLOT@0/[SMB_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH1": "/SMB_SLOT@0/[SMB_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH2": "/SMB_SLOT@0/[SMB_I2C_MASTER0@2]", @@ -1605,12 +1621,13 @@ "/run/devmap/sensors/PSU2_PMBUS": "/SMB_SLOT@0/PSU_SLOT@1/[PSU_PMBUS]" }, "bspKmodsRpmName": "arista_bsp_kmods", - "bspKmodsRpmVersion": "0.7.4-1", + "bspKmodsRpmVersion": "0.7.6-1", "bspKmodsToReload": [ "scd-xcvr", "scd-spi", "scd-leds", "scd-smbus", + "scd-info", "dsf-fan-cpld" ], "sharedKmodsToReload": [ diff --git a/fboss/platform/configs/meru800biab/platform_manager.json b/fboss/platform/configs/meru800biab/platform_manager.json index 34be9158862bc..08d5a5595e957 100644 --- a/fboss/platform/configs/meru800biab/platform_manager.json +++ b/fboss/platform/configs/meru800biab/platform_manager.json @@ -80,7 +80,14 @@ ], "spiMasterConfigs": [], "ledCtrlConfigs": [], - "xcvrCtrlConfigs": [] + "xcvrCtrlConfigs": [], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SCM_FPGA_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } + ] } ], "embeddedSensorConfigs": [ @@ -1428,6 +1435,13 @@ }, "portNumber": 39 } + ], + "infoRomConfigs": [ + { + "pmUnitScopedName": "SMB_FPGA_INFO_ROM", + "deviceName": "fpga_info_iob", + "csrOffset": "0x0000" + } ] } ] @@ -1457,6 +1471,7 @@ ], "symbolicLinkToDevicePath": { "/run/devmap/fpgas/MERU_SCM_CPLD": "/[SCM_FPGA]", + "/run/devmap/fpgas/MERU_SCM_CPLD_INFO_ROM": "/[SCM_FPGA_INFO_ROM]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH0": "/[SCM_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH1": "/[SCM_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU_SCM_CPLD_SMBUS0_CH2": "/[SCM_I2C_MASTER0@2]", @@ -1478,6 +1493,7 @@ "/run/devmap/sensors/CPU_CORE_TEMP": "/[CPU_CORE_TEMP]", "/run/devmap/sensors/NVME_TEMP": "/[NVME_TEMP]", "/run/devmap/fpgas/MERU800BIA_SMB_FPGA": "/SMB_SLOT@0/[SMB_FPGA]", + "/run/devmap/fpgas/MERU800BIA_SMB_FPGA_INFO_ROM": "/SMB_SLOT@0/[SMB_FPGA_INFO_ROM]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH0": "/SMB_SLOT@0/[SMB_I2C_MASTER0@0]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH1": "/SMB_SLOT@0/[SMB_I2C_MASTER0@1]", "/run/devmap/i2c-busses/MERU800BIA_SMB_FPGA_SMBUS0_CH2": "/SMB_SLOT@0/[SMB_I2C_MASTER0@2]", @@ -1581,12 +1597,13 @@ "/run/devmap/sensors/PSU2_PMBUS": "/SMB_SLOT@0/PSU_SLOT@1/[PSU_PMBUS]" }, "bspKmodsRpmName": "arista_bsp_kmods", - "bspKmodsRpmVersion": "0.7.5-1", + "bspKmodsRpmVersion": "0.7.6-1", "bspKmodsToReload": [ "scd-xcvr", "scd-spi", "scd-leds", "scd-smbus", + "scd-info", "dsf-fan-cpld" ], "sharedKmodsToReload": [ diff --git a/fboss/platform/configs/meru800biab/sensor_service.json b/fboss/platform/configs/meru800biab/sensor_service.json index 650fd657af768..b6a843ff1de06 100644 --- a/fboss/platform/configs/meru800biab/sensor_service.json +++ b/fboss/platform/configs/meru800biab/sensor_service.json @@ -425,7 +425,7 @@ }, { "slotPath": "/SMB_SLOT@0/PSU_SLOT@0", - "pmUnitName": "PSU1", + "pmUnitName": "PSU", "sensors": [ { "name": "PSU1_VIN", @@ -519,7 +519,7 @@ }, { "slotPath": "/SMB_SLOT@0/PSU_SLOT@1", - "pmUnitName": "PSU2", + "pmUnitName": "PSU", "sensors": [ { "name": "PSU2_VIN", diff --git a/fboss/platform/configs/montblanc/fw_util.json b/fboss/platform/configs/montblanc/fw_util.json index 9a7b2f1de2bb4..c6cda15ef7505 100644 --- a/fboss/platform/configs/montblanc/fw_util.json +++ b/fboss/platform/configs/montblanc/fw_util.json @@ -10,26 +10,26 @@ "iob_fpga": { "getVersionCmd": "cat /run/devmap/fpgas/MCB_IOB_INFO_ROM/fw_ver", "priority": 2, - "upgradeCmd": "iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -w $iob_fpga_filename -c N25Q128..3E", - "verifyFwCmd": "iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -v $iob_fpga_filename -c N25Q128..3E", - "readFwCmd": "flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -r /tmp/iob_fpga_file_backup -c N25Q128..3E" + "upgradeCmd": "iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -w $iob_fpga_filename -c $fname; fi; done", + "verifyFwCmd": "iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -v $iob_fpga_filename -c $fname; fi; done", + "readFwCmd": "flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1;FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_1_DEVICE_1 -r /tmp/iob_fpga_file_backup -c $fname; fi; done" }, "dom1_fpga": { "preUpgradeCmd": "gpioset $(gpiodetect | grep -E 'fboss_iob_pci.gpiochip.*' | awk '{print $1}') 9=1", "getVersionCmd": "cat /run/devmap/fpgas/SMB_DOM1_INFO_ROM/fw_ver", "priority": 3, - "upgradeCmd": "dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -w $dom1_fpga_filename -c N25Q128..3E", - "verifyFwCmd": "dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -v $dom1_fpga_filename -c N25Q128..3E", - "readFwCmd": "flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -r /tmp/dom1_fpga_file_backup -c N25Q128..3E", + "upgradeCmd": "dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt);FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -w $dom1_fpga_filename -c $fname; fi; done", + "verifyFwCmd": "dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt);FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -v $dom1_fpga_filename -c $fname; fi; done", + "readFwCmd": "FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_2_DEVICE_1 -r /tmp/dom1_fpga_file_backup -c $fname; fi; done", "postUpgradeCmd": "gpioget $(gpiodetect | grep -E 'fboss_iob_pci.gpiochip.*' | awk '{print $1}') 9" }, "dom2_fpga": { "preUpgradeCmd": "gpioset $(gpiodetect | grep -E 'fboss_iob_pci.gpiochip.*' | awk '{print $1}') 10=1", "getVersionCmd": "cat /run/devmap/fpgas/SMB_DOM2_INFO_ROM/fw_ver", "priority": 4, - "upgradeCmd": "dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -w $dom2_fpga_filename -c N25Q128..3E", - "verifyFwCmd": "dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt);flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -v $dom2_fpga_filename -c N25Q128..3E", - "readFwCmd": "flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -r /tmp/dom2_fpga_file_backup -c N25Q128..3E", + "upgradeCmd": "dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt);FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -w $dom2_fpga_filename -c $fname; fi; done", + "verifyFwCmd": "dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt);FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -v $dom2_fpga_filename -c $fname; fi; done", + "readFwCmd": "FLASH_ID=(N25Q128..3E W25Q128.V..M);for fname in ${FLASH_ID[@]}; do if flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 | grep -q $fname ; then flashrom -p linux_spi:dev=/run/devmap/flashes/MCB_SPI_MASTER_3_DEVICE_1 -r /tmp/dom2_fpga_file_backup -c $fname; fi; done", "postUpgradeCmd": "gpioget $(gpiodetect | grep -E 'fboss_iob_pci.gpiochip.*' | awk '{print $1}') 10" }, "mcb_cpld": { diff --git a/fboss/platform/configs/montblanc/sensor_service.json b/fboss/platform/configs/montblanc/sensor_service.json index 90edbb3be68a4..c419aa1b2dc84 100644 --- a/fboss/platform/configs/montblanc/sensor_service.json +++ b/fboss/platform/configs/montblanc/sensor_service.json @@ -4,6 +4,46 @@ "slotPath": "/", "pmUnitName": "MINIPACK3_MCB", "sensors": [ + { + "name": "SMB_LEFT_U51_TEMP", + "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR5/temp1_input", + "type": 3, + "thresholds": { + "upperCriticalVal": 85, + "maxAlarmVal": 80 + }, + "compute": "@/1000" + }, + { + "name": "SMB_OUTLET_U57_TEMP", + "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR2/temp1_input", + "type": 3, + "thresholds": { + "upperCriticalVal": 95, + "maxAlarmVal": 90 + }, + "compute": "@/1000" + }, + { + "name": "SMB_BEHIND_TH5_U39_TEMP", + "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR3/temp1_input", + "type": 3, + "thresholds": { + "upperCriticalVal": 95, + "maxAlarmVal": 90 + }, + "compute": "@/1000" + }, + { + "name": "SMB_RIGHT_U182_TEMP", + "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR6/temp1_input", + "type": 3, + "thresholds": { + "upperCriticalVal": 85, + "maxAlarmVal": 80 + }, + "compute": "@/1000" + }, { "name": "CPU_UNCORE_TEMP", "sysfsPath": "/run/devmap/sensors/CPU_CORE_TEMP/temp1_input", @@ -598,26 +638,6 @@ "slotPath": "/SCM_SLOT@0/COMESE_SLOT@0", "pmUnitName": "NETLAKE", "sensors": [ - { - "name": "COME_U18_INLET_SENSOR_TMP75_TEMP", - "sysfsPath": "/run/devmap/sensors/COME_TSENSOR1/temp1_input", - "type": 3, - "thresholds": { - "maxAlarmVal": 60, - "upperCriticalVal": 65 - }, - "compute": "@/1000" - }, - { - "name": "COME_U39_OUTLET_SENSOR_TMP75_TEMP", - "sysfsPath": "/run/devmap/sensors/COME_TSENSOR2/temp1_input", - "type": 3, - "thresholds": { - "maxAlarmVal": 60, - "upperCriticalVal": 65 - }, - "compute": "@/1000" - }, { "name": "COME_PU31_TDA38640_PVNN_PCH_VIN", "sysfsPath": "/run/devmap/sensors/COME_VOLTAGE_MONITOR1/in1_input", @@ -1388,6 +1408,26 @@ "slotPath": "/SCM_SLOT@0", "pmUnitName": "MINIPACK3_SCM", "sensors": [ + { + "name": "COME_U18_INLET_SENSOR_TMP75_TEMP", + "sysfsPath": "/run/devmap/sensors/COME_TSENSOR1/temp1_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 60, + "upperCriticalVal": 65 + }, + "compute": "@/1000" + }, + { + "name": "COME_U39_OUTLET_SENSOR_TMP75_TEMP", + "sysfsPath": "/run/devmap/sensors/COME_TSENSOR2/temp1_input", + "type": 3, + "thresholds": { + "maxAlarmVal": 60, + "upperCriticalVal": 65 + }, + "compute": "@/1000" + }, { "name": "SCM_M2_SSD_TEMP", "sysfsPath": "/run/devmap/sensors/SCM_M2_SSD_TEMP/temp1_input", @@ -1669,46 +1709,6 @@ "slotPath": "/SMB_SLOT@0", "pmUnitName": "MINIPACK3_SMB", "sensors": [ - { - "name": "SMB_LEFT_U51_TEMP", - "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR5/temp1_input", - "type": 3, - "thresholds": { - "upperCriticalVal": 85, - "maxAlarmVal": 80 - }, - "compute": "@/1000" - }, - { - "name": "SMB_OUTLET_U57_TEMP", - "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR2/temp1_input", - "type": 3, - "thresholds": { - "upperCriticalVal": 95, - "maxAlarmVal": 90 - }, - "compute": "@/1000" - }, - { - "name": "SMB_BEHIND_TH5_U39_TEMP", - "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR3/temp1_input", - "type": 3, - "thresholds": { - "upperCriticalVal": 95, - "maxAlarmVal": 90 - }, - "compute": "@/1000" - }, - { - "name": "SMB_RIGHT_U182_TEMP", - "sysfsPath": "/run/devmap/sensors/SMB_TSENSOR6/temp1_input", - "type": 3, - "thresholds": { - "upperCriticalVal": 85, - "maxAlarmVal": 80 - }, - "compute": "@/1000" - }, { "name": "SMB_XP3R3V_CLK", "sysfsPath": "/run/devmap/sensors/SMB_VOLTAGE_MONITOR1/in0_input", diff --git a/fboss/platform/configs/morgan800cc/fan_service.json b/fboss/platform/configs/morgan800cc/fan_service.json index e350e8293c776..541d037d30c72 100644 --- a/fboss/platform/configs/morgan800cc/fan_service.json +++ b/fboss/platform/configs/morgan800cc/fan_service.json @@ -1,93 +1,212 @@ { "pwmBoostOnNumDeadFan": 1, "pwmBoostOnNumDeadSensor": 0, - "pwmBoostOnNoQsfpAfterInSec": 90, - "pwmBoostValue": 60, - "pwmTransitionValue": 70, - "pwmLowerThreshold": 20, - "pwmUpperThreshold": 100, + "pwmBoostOnNoQsfpAfterInSec": 55, + "pwmBoostValue": 50, + "pwmTransitionValue": 45, + "pwmLowerThreshold": 25, + "pwmUpperThreshold": 70, "sensors": [ { - "sensorName": "INLET", + "sensorName": "SCM_INLET", "access": { "accessType": "ACCESS_TYPE_THRIFT" }, "pwmCalcType": "SENSOR_PWM_CALC_TYPE_FOUR_LINEAR_TABLE", "scale": 1, "normalUpTable": { - "10": 38, - "27": 38, - "28": 40, - "30": 40 + "15": 19, + "16": 19, + "17": 19, + "18": 19, + "19": 19, + "20": 20, + "21": 20, + "22": 21, + "23": 22, + "24": 22, + "25": 23, + "26": 24, + "27": 25, + "28": 26, + "29": 27, + "30": 28, + "31": 29, + "32": 30, + "33": 31, + "34": 32, + "35": 34, + "36": 35, + "37": 37, + "38": 38, + "39": 40, + "40": 41, + "41": 42, + "42": 44, + "43": 46, + "44": 48, + "45": 50, + "46": 52, + "47": 54, + "48": 56 }, "normalDownTable": { - "10": 38, - "24": 38 + "15": 18, + "16": 18, + "17": 18, + "18": 18, + "19": 18, + "20": 19, + "21": 19, + "22": 20, + "23": 20, + "24": 21, + "25": 22, + "26": 22, + "27": 23, + "28": 24, + "29": 25, + "30": 26, + "31": 27, + "32": 28, + "33": 29, + "34": 30, + "35": 31, + "36": 32, + "37": 34, + "38": 35, + "39": 37, + "40": 38, + "41": 40, + "42": 41, + "43": 42, + "44": 44, + "45": 46, + "46": 48, + "47": 50, + "48": 52 }, "failUpTable": { - "10": 38, - "27": 38, - "28": 40, - "30": 40 + "15": 19, + "16": 19, + "17": 19, + "18": 19, + "19": 19, + "20": 20, + "21": 20, + "22": 21, + "23": 22, + "24": 22, + "25": 23, + "26": 24, + "27": 25, + "28": 26, + "29": 27, + "30": 28, + "31": 29, + "32": 30, + "33": 31, + "34": 32, + "35": 34, + "36": 35, + "37": 37, + "38": 38, + "39": 40, + "40": 41, + "41": 42, + "42": 44, + "43": 46, + "44": 48, + "45": 50, + "46": 52, + "47": 54, + "48": 56 }, "failDownTable": { - "10": 38, - "24": 38 + "15": 18, + "16": 18, + "17": 18, + "18": 18, + "19": 18, + "20": 19, + "21": 19, + "22": 20, + "23": 20, + "24": 21, + "25": 22, + "26": 22, + "27": 23, + "28": 24, + "29": 25, + "30": 26, + "31": 27, + "32": 28, + "33": 29, + "34": 30, + "35": 31, + "36": 32, + "37": 34, + "38": 35, + "39": 37, + "40": 38, + "41": 40, + "42": 41, + "43": 42, + "44": 44, + "45": 46, + "46": 48, + "47": 50, + "48": 52 } } ], "optics": [ { - "opticName": "QSFP_GROUP_1", + "opticName": "qsfp_group_1", "access": { "accessType": "ACCESS_TYPE_QSFP" }, "portList": [], - "aggregationType": "OPTIC_AGGREGATION_TYPE_MAX", - "tempToPwmMaps": { - "OPTIC_TYPE_100_GENERIC": { - "5": 24, - "38": 26, - "40": 28, - "41": 30, - "42": 32, - "44": 34, - "45": 36, - "48": 38, - "49": 40, - "52": 44, - "53": 46, - "54": 50 + "aggregationType": "OPTIC_AGGREGATION_TYPE_PID", + "pidSettings": { + "OPTIC_TYPE_800_GENERIC": { + "kp": -2, + "ki": 0, + "kd": -0.33, + "setPoint": 70, + "posHysteresis": 0, + "negHysteresis": 2 + }, + "OPTIC_TYPE_400_GENERIC": { + "kp": -2, + "ki": 0, + "kd": -0.33, + "setPoint": 70, + "posHysteresis": 0, + "negHysteresis": 2 }, "OPTIC_TYPE_200_GENERIC": { - "5": 26, - "43": 28, - "45": 30, - "47": 32, - "49": 34, - "50": 36, - "54": 40, - "56": 44, - "58": 46, - "61": 50 + "kp": -2, + "ki": 0, + "kd": -0.33, + "setPoint": 70, + "posHysteresis": 0, + "negHysteresis": 2 }, - "OPTIC_TYPE_400_GENERIC": { - "5": 36, - "59": 40, - "62": 42, - "66": 46, - "67": 48, - "68": 50, - "71": 52, - "73": 55, - "74": 60 + "OPTIC_TYPE_100_GENERIC": { + "kp": -2, + "ki": 0, + "kd": -0.33, + "setPoint": 70, + "posHysteresis": 0, + "negHysteresis": 2 } } } ], "fans": [ { - "fanName": "fan_1", + "fanName": "FAN1_F", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan1_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm1", "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan1_presence", @@ -100,10 +219,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_2", + "fanName": "FAN1_R", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan2_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm2", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan2_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan1_presence", "ledSysfsPath": "/sys/class/leds/fan2_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -113,10 +232,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_3", + "fanName": "FAN2_F", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan3_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm3", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan3_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan2_presence", "ledSysfsPath": "/sys/class/leds/fan3_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -126,10 +245,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_4", + "fanName": "FAN2_R", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan4_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm4", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan4_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan2_presence", "ledSysfsPath": "/sys/class/leds/fan4_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -139,10 +258,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_5", + "fanName": "FAN3_F", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan5_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm5", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan5_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan3_presence", "ledSysfsPath": "/sys/class/leds/fan5_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -152,11 +271,12 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_6", + "fanName": "FAN3_R", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan6_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm6", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan6_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan3_presence", "ledSysfsPath": "/sys/class/leds/fan6_led:blue:status/brightness", + "pwmMin": 1, "pwmMax": 100, "fanPresentVal": 1, "fanMissingVal": 0, @@ -164,10 +284,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_7", + "fanName": "FAN4_F", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan7_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm7", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan7_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan4_presence", "ledSysfsPath": "/sys/class/leds/fan7_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -177,10 +297,10 @@ "fanFailLedVal": 1 }, { - "fanName": "fan_8", + "fanName": "FAN4_R", "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan8_input", "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm8", - "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan8_presence", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan4_presence", "ledSysfsPath": "/sys/class/leds/fan8_led:blue:status/brightness", "pwmMin": 1, "pwmMax": 100, @@ -188,6 +308,110 @@ "fanMissingVal": 0, "fanGoodLedVal": 2, "fanFailLedVal": 1 + }, + { + "fanName": "FAN5_F", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan9_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm9", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan5_presence", + "ledSysfsPath": "/sys/class/leds/fan9_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN5_R", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan10_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm10", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan5_presence", + "ledSysfsPath": "/sys/class/leds/fan10_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN6_F", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan11_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm11", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan6_presence", + "ledSysfsPath": "/sys/class/leds/fan11_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN6_R", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan12_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm12", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan6_presence", + "ledSysfsPath": "/sys/class/leds/fan12_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN7_F", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan13_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm13", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan7_presence", + "ledSysfsPath": "/sys/class/leds/fan13_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN7_R", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan14_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm14", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan7_presence", + "ledSysfsPath": "/sys/class/leds/fan14_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN8_F", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan15_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm15", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan8_presence", + "ledSysfsPath": "/sys/class/leds/fan15_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 + }, + { + "fanName": "FAN8_R", + "rpmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan16_input", + "pwmSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/pwm16", + "presenceSysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan8_presence", + "ledSysfsPath": "/sys/class/leds/fan16_led:blue:status/brightness", + "pwmMin": 1, + "pwmMax": 100, + "fanPresentVal": 1, + "fanMissingVal": 0, + "fanGoodLedVal": 2, + "fanFailLedVal": 1 } ], "zones": [ @@ -195,20 +419,28 @@ "zoneType": "ZONE_TYPE_MAX", "zoneName": "zone1", "sensorNames": [ - "INLET", - "QSFP_GROUP_1" + "SCM_INLET", + "qsfp_group_1" ], "fanNames": [ - "fan_1", - "fan_2", - "fan_3", - "fan_4", - "fan_5", - "fan_6", - "fan_7", - "fan_8" + "FAN1_F", + "FAN1_R", + "FAN2_F", + "FAN2_R", + "FAN3_F", + "FAN3_R", + "FAN4_F", + "FAN4_R", + "FAN5_F", + "FAN5_R", + "FAN6_F", + "FAN6_R", + "FAN7_F", + "FAN7_R", + "FAN8_F", + "FAN8_R" ], - "slope": 3 + "slope": 10 } ] } diff --git a/fboss/platform/configs/morgan800cc/fw_util.json b/fboss/platform/configs/morgan800cc/fw_util.json index 198637a38106e..fb1cfd0bfc98b 100644 --- a/fboss/platform/configs/morgan800cc/fw_util.json +++ b/fboss/platform/configs/morgan800cc/fw_util.json @@ -9,7 +9,7 @@ "readFwCmd": "chip=$(head -n 1 /home/bios-chip.txt); bios_filename=$(head -n 1 /home/bios_filename.txt); flashrom -p internal -c \"$chip\" -l /home/bios_spi_layout -i normal -r $bios_filename\n", "sha1sum": "182f3c1d2d2609f9f0b139aa36fe172193fe491d", "priority": 1, - "desiredVersion": "2.12" + "desiredVersion": "2.12.g8aeaf1b4" }, "dom1_fpga": { "preUpgradeCmd": "printf '000000:43FFFF golden\\n800000:C3FFFF primary\\n' > /home/dom_spi_layout; ls -l /run/devmap/flashes/DOM1_SPI_MASTER | awk '{print $11}' > /home/dom1_spi.txt; programmer=$(head -n 1 /home/dom1_spi.txt); flashrom -p linux_spi:dev=$programmer 2>&1 > /home/dom1-flashrom-output.txt; grep -w \"flash chip\" /home/dom1-flashrom-output.txt | cut -d '\"' -f 2 > /home/dom1-chip.txt || echo '****** error finding chip ****** ...'\n", @@ -18,9 +18,9 @@ "postUpgradeCmd": "chip=$(head -n 1 /home/dom1-chip.txt); dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt); programmer=$(head -n 1 /home/dom1_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -v $dom1_fpga_filename; rm /home/dom_spi_layout; rm /home/dom1-flashrom-output.txt; rm /home/dom1-chip.txt; rm /home/dom1_spi.txt\n", "verifyFwCmd": "chip=$(head -n 1 /home/dom1-chip.txt); dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt); programmer=$(head -n 1 /home/dom1_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -v $dom1_fpga_filename\n", "readFwCmd": "chip=$(head -n 1 /home/dom1-chip.txt); dom1_fpga_filename=$(head -n 1 /home/dom1_fpga_filename.txt); programmer=$(head -n 1 /home/dom1_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -r $dom1_fpga_filename\n", - "sha1sum": "9ca61fa1558d4bb51e06ba18d41d350f7c0674be", + "sha1sum": "27341f15c01db7d165520069e233754c98a66d6a", "priority": 2, - "desiredVersion": "0.12" + "desiredVersion": "1.0" }, "dom2_fpga": { "preUpgradeCmd": "printf '000000:43FFFF golden\\n800000:C3FFFF primary\\n' > /home/dom_spi_layout; ls -l /run/devmap/flashes/DOM2_SPI_MASTER | awk '{print $11}' > /home/dom2_spi.txt; programmer=$(head -n 1 /home/dom2_spi.txt); flashrom -p linux_spi:dev=$programmer 2>&1 > /home/dom2-flashrom-output.txt; grep -w \"flash chip\" /home/dom2-flashrom-output.txt | cut -d '\"' -f 2 > /home/dom2-chip.txt || echo '****** error finding chip ****** ...'\n", @@ -29,9 +29,9 @@ "postUpgradeCmd": "chip=$(head -n 1 /home/dom2-chip.txt); dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt); programmer=$(head -n 1 /home/dom2_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -v $dom2_fpga_filename; rm /home/dom_spi_layout; rm /home/dom2-flashrom-output.txt; rm /home/dom2-chip.txt; rm /home/dom2_spi.txt\n", "verifyFwCmd": "chip=$(head -n 1 /home/dom2-chip.txt); dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt); programmer=$(head -n 1 /home/dom2_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -v $dom2_fpga_filename\n", "readFwCmd": "chip=$(head -n 1 /home/dom2-chip.txt); dom2_fpga_filename=$(head -n 1 /home/dom2_fpga_filename.txt); programmer=$(head -n 1 /home/dom2_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/dom_spi_layout -i primary --noverify-all -r $dom2_fpga_filename\n", - "sha1sum": "9ca61fa1558d4bb51e06ba18d41d350f7c0674be", + "sha1sum": "27341f15c01db7d165520069e233754c98a66d6a", "priority": 3, - "desiredVersion": "0.12" + "desiredVersion": "1.0" }, "mcb_fpga": { "preUpgradeCmd": "printf '000000:43FFFF golden\\n800000:C3FFFF primary\\n' > /home/mcb_spi_layout; ls -l /run/devmap/flashes/MCB_SPI_MASTER | awk '{print $11}' > /home/mcb_spi.txt; programmer=$(head -n 1 /home/mcb_spi.txt); flashrom -p linux_spi:dev=$programmer 2>&1 > /home/mcb-flashrom-output.txt; grep -w \"flash chip\" /home/mcb-flashrom-output.txt | cut -d '\"' -f 2 > /home/mcb-chip.txt || echo '****** error finding chip ****** ...'\n", @@ -40,9 +40,9 @@ "postUpgradeCmd": "chip=$(head -n 1 /home/mcb-chip.txt); mcb_fpga_filename=$(head -n 1 /home/mcb_fpga_filename.txt); programmer=$(head -n 1 /home/mcb_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/mcb_spi_layout -i primary --noverify-all -v $mcb_fpga_filename; rm /home/mcb_spi.txt; rm /home/mcb-flashrom-output.txt; rm /home/mcb-chip.txt\n", "verifyFwCmd": "chip=$(head -n 1 /home/mcb-chip.txt); mcb_fpga_filename=$(head -n 1 /home/mcb_fpga_filename.txt); programmer=$(head -n 1 /home/mcb_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/mcb_spi_layout -i primary --noverify-all -v $mcb_fpga_filename\n", "readFwCmd": "chip=$(head -n 1 /home/mcb-chip.txt); mcb_fpga_filename=$(head -n 1 /home/mcb_fpga_filename.txt); programmer=$(head -n 1 /home/mcb_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/mcb_spi_layout -i primary --noverify-all -r $mcb_fpga_filename\n", - "sha1sum": "3d2b3e47afec60e7557aee8f159d456a29ef64f3", + "sha1sum": "6f1ff8a9fcf77a0fcf305d637b73eb5007af90e9", "priority": 4, - "desiredVersion": "0.16" + "desiredVersion": "1.0" }, "iob_fpga": { "preUpgradeCmd": "printf '000000:43FFFF golden\\n800000:C3FFFF primary\\n' > /home/iob_spi_layout; ls -l /run/devmap/flashes/IOB_SPI_MASTER | awk '{print $11}' > /home/iob_spi.txt; programmer=$(head -n 1 /home/iob_spi.txt); flashrom -p linux_spi:dev=$programmer 2>&1 > /home/iob-flashrom-output.txt; grep -w \"flash chip\" /home/iob-flashrom-output.txt | cut -d '\"' -f 2 > /home/iob-chip.txt || echo '****** error finding chip ****** ...'\n", @@ -51,9 +51,9 @@ "postUpgradeCmd": "chip=$(head -n 1 /home/iob-chip.txt); iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt); programmer=$(head -n 1 /home/iob_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/iob_spi_layout -i primary --noverify-all -v $iob_fpga_filename; rm /home/iob_spi.txt; rm /home/iob-flashrom-output.txt; rm /home/iob-chip.txt\n", "verifyFwCmd": "chip=$(head -n 1 /home/iob-chip.txt); iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt); programmer=$(head -n 1 /home/iob_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/iob_spi_layout -i primary --noverify-all -v $iob_fpga_filename\n", "readFwCmd": "chip=$(head -n 1 /home/iob-chip.txt); iob_fpga_filename=$(head -n 1 /home/iob_fpga_filename.txt); programmer=$(head -n 1 /home/iob_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/iob_spi_layout -i primary --noverify-all -r $iob_fpga_filename\n", - "sha1sum": "3210dc89e23a40f1d47ec98a0e3678b461951390", + "sha1sum": "b11b9323c7efc5b3d90092c743d98e6f874137ab", "priority": 5, - "desiredVersion": "0.18" + "desiredVersion": "1.0" }, "scm_fpga": { "preUpgradeCmd": "printf '000000:43FFFF golden\\n800000:C3FFFF primary\\n' > /home/scm_spi_layout; ls -l /run/devmap/flashes/SCM_SPI_MASTER | awk '{print $11}' > /home/scm_spi.txt; programmer=$(head -n 1 /home/scm_spi.txt); flashrom -p linux_spi:dev=$programmer 2>&1 > /home/scm-flashrom-output.txt; grep -w \"flash chip\" /home/scm-flashrom-output.txt | cut -d '\"' -f 2 > /home/scm-chip.txt || echo '****** error finding chip ****** ...'\n", @@ -62,9 +62,9 @@ "postUpgradeCmd": "chip=$(head -n 1 /home/scm-chip.txt); scm_fpga_filename=$(head -n 1 /home/scm_fpga_filename.txt); programmer=$(head -n 1 /home/scm_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/scm_spi_layout -i primary --noverify-all -v $scm_fpga_filename; rm /home/scm_spi.txt; rm /home/scm-flashrom-output.txt; rm /home/scm-chip.txt\n", "verifyFwCmd": "chip=$(head -n 1 /home/scm-chip.txt); scm_fpga_filename=$(head -n 1 /home/scm_fpga_filename.txt); programmer=$(head -n 1 /home/scm_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/scm_spi_layout -i primary --noverify-all -v $scm_fpga_filename\n", "readFwCmd": "chip=$(head -n 1 /home/scm-chip.txt); scm_fpga_filename=$(head -n 1 /home/scm_fpga_filename.txt); programmer=$(head -n 1 /home/scm_spi.txt); flashrom -p linux_spi:dev=$programmer -c \"$chip\" -l /home/scm_spi_layout -i primary --noverify-all -r $scm_fpga_filename\n", - "sha1sum": "b3c651414ea5d21b87f0aacfaad5b00801eda8c4", + "sha1sum": "d690724e007c6f7386546df3a9cdb90de0ca9228", "priority": 6, - "desiredVersion": "0.43" + "desiredVersion": "1.0" } } } diff --git a/fboss/platform/configs/morgan800cc/platform_manager.json b/fboss/platform/configs/morgan800cc/platform_manager.json index b8b24d8b6ca65..993eafe9118bc 100644 --- a/fboss/platform/configs/morgan800cc/platform_manager.json +++ b/fboss/platform/configs/morgan800cc/platform_manager.json @@ -48,15 +48,6 @@ }, "pmUnitName": "JUMPER" }, - "LED_SLOT": { - "numOutgoingI2cBuses": 1, - "idpromConfig": { - "busName": "INCOMING@0", - "address": "0x50", - "kernelDeviceName": "24c64" - }, - "pmUnitName": "LED" - }, "PSU_SLOT": { "numOutgoingI2cBuses": 1, "idpromConfig": { @@ -386,18 +377,18 @@ "busName": "MCB_IOB_I2C_MASTER_14", "address": "0x26", "kernelDeviceName": "ltc2497", - "pmUnitScopedName": "FAN0_LTC2497_0X4C" + "pmUnitScopedName": "FCB0_LTC2497_0X4C" }, { "busName": "MCB_IOB_I2C_MASTER_15", "address": "0x26", "kernelDeviceName": "ltc2497", - "pmUnitScopedName": "FAN1_LTC2497_0X4C" + "pmUnitScopedName": "FCB1_LTC2497_0X4C" }, { "busName": "MCB_IOB_I2C_MASTER_4", "address": "0x12", - "kernelDeviceName": "pmbus", + "kernelDeviceName": "adm1278", "pmUnitScopedName": "MCB_ADM1278_0X12" }, { @@ -439,18 +430,6 @@ "MCB_IOB_I2C_MASTER_16" ] }, - "LED_SLOT@0": { - "slotType": "LED_SLOT", - "outgoingI2cBusNames": [ - "MCB_IOB_I2C_MASTER_12" - ] - }, - "LED_SLOT@1": { - "slotType": "LED_SLOT", - "outgoingI2cBusNames": [ - "MCB_IOB_I2C_MASTER_13" - ] - }, "PSU_SLOT@0": { "slotType": "PSU_SLOT", "outgoingI2cBusNames": [ @@ -522,9 +501,6 @@ } ] }, - "LED": { - "pluggedInSlotType": "LED_SLOT" - }, "SCM": { "pluggedInSlotType": "SCM_SLOT", "pciDeviceConfigs": [ @@ -683,7 +659,7 @@ "busName": "INCOMING@0", "address": "0x4a", "kernelDeviceName": "adt75", - "pmUnitScopedName": "BMC_TMP451_0X4C" + "pmUnitScopedName": "BMC_ADT75_0X4C" } ] }, @@ -3161,7 +3137,7 @@ "pmUnitScopedName": "SMB_PORT_65_LED1", "deviceName": "port_led", "iobufOffset": "0x1912c", - "csrOffset": "0x18000" + "csrOffset": "0x19000" }, "portNumber": 65, "ledId": 1 @@ -3287,8 +3263,6 @@ "/run/devmap/eeproms/FCB_EEPROM": "/FCB_SLOT@0/[IDPROM]", "/run/devmap/eeproms/SMB_EEPROM": "/SMB_SLOT@0/[IDPROM]", "/run/devmap/eeproms/SCM_EEPROM": "/JUMPER_SLOT@0/SCM_SLOT@0/[IDPROM]", - "/run/devmap/eeproms/LED1_EEPROM": "/LED_SLOT@0/[IDPROM]", - "/run/devmap/eeproms/LED2_EEPROM": "/LED_SLOT@1/[IDPROM]", "/run/devmap/eeproms/PSU1_EEPROM": "/PSU_SLOT@0/[IDPROM]", "/run/devmap/eeproms/PSU2_EEPROM": "/PSU_SLOT@1/[IDPROM]", "/run/devmap/eeproms/RUNBMC_EEPROM": "/JUMPER_SLOT@0/SCM_SLOT@0/RUNBMC_SLOT@0/[IDPROM]", @@ -3391,8 +3365,8 @@ "/run/devmap/sensors/MCB_LTC2979_0X60": "/[MCB_LTC2979_0X60]", "/run/devmap/sensors/MCB_LTC2979_0X61": "/[MCB_LTC2979_0X61]", "/run/devmap/sensors/MCB_ADM1278_0X12": "/[MCB_ADM1278_0X12]", - "/run/devmap/sensors/FAN0_LTC2497_0X4C": "/[FAN0_LTC2497_0X4C]", - "/run/devmap/sensors/FAN1_LTC2497_0X4C": "/[FAN1_LTC2497_0X4C]", + "/run/devmap/sensors/FCB0_LTC2497_0X4C": "/[FCB0_LTC2497_0X4C]", + "/run/devmap/sensors/FCB1_LTC2497_0X4C": "/[FCB1_LTC2497_0X4C]", "/run/devmap/sensors/MCB_FAN_PWM": "/[MCB_FAN_PWM]", "/run/devmap/sensors/SCM_LTC2497_0X14": "/JUMPER_SLOT@0/SCM_SLOT@0/[SCM_LTC2497_0X14]", "/run/devmap/sensors/SCM_TMP451_0X4C": "/JUMPER_SLOT@0/SCM_SLOT@0/[SCM_TMP451_0X4C]", @@ -3493,7 +3467,7 @@ "/run/devmap/watchdogs/MCB_FAN_WD": "/[MCB_FAN_WD]" }, "bspKmodsRpmName": "cisco_bsp_kmods", - "bspKmodsRpmVersion": "0.1.19-1", + "bspKmodsRpmVersion": "1.0.1-2", "bspKmodsToReload": [ "cisco_fpga_pci", "cisco_fpga_spi", diff --git a/fboss/platform/configs/morgan800cc/sensor_service.json b/fboss/platform/configs/morgan800cc/sensor_service.json index f74bb75612a91..c40cc8fb9f50f 100644 --- a/fboss/platform/configs/morgan800cc/sensor_service.json +++ b/fboss/platform/configs/morgan800cc/sensor_service.json @@ -5,7 +5,7 @@ "pmUnitName": "MCB", "sensors": [ { - "name": "P12V_BP_ADC0_A", + "name": "MCB_P12V_BP_ADC0_A", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/in1_input", "type": 1, "thresholds": { @@ -19,8 +19,8 @@ "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 90, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, @@ -35,7 +35,7 @@ "compute": "@/1000" }, { - "name": "A3_3V", + "name": "MCB_A3_3V", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/in3_input", "type": 1, "thresholds": { @@ -45,7 +45,7 @@ "compute": "@/1000" }, { - "name": "A1_2V", + "name": "MCB_A1_2V", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/in4_input", "type": 1, "thresholds": { @@ -55,7 +55,7 @@ "compute": "@/1000" }, { - "name": "A1_8V", + "name": "MCB_A1_8V", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/in5_input", "type": 1, "thresholds": { @@ -65,7 +65,7 @@ "compute": "@/1000" }, { - "name": "P12V_BP_ADC0_B", + "name": "MCB_P12V_BP_ADC0_B", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/in1_input", "type": 1, "thresholds": { @@ -79,13 +79,13 @@ "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X60/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 90, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "P1_0V", + "name": "MCB_P1_0V", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X61/in2_input", "type": 1, "thresholds": { @@ -105,7 +105,7 @@ "compute": "@/1000" }, { - "name": "P1_2V", + "name": "MCB_P1_2V", "sysfsPath": "/run/devmap/sensors/MCB_LTC2979_0X61/in4_input", "type": 1, "thresholds": { @@ -125,7 +125,7 @@ "compute": "@/1000" }, { - "name": "TMP421_LOCAL_BB", + "name": "MCB_TMP421_LOCAL_BB", "sysfsPath": "/run/devmap/sensors/MCB_TMP421_0X4C/temp1_input", "type": 3, "thresholds": { @@ -135,28 +135,28 @@ "compute": "@/1000" }, { - "name": "P12V_1", + "name": "MCB_P12V_1", "sysfsPath": "/run/devmap/sensors/MCB_ADM1278_0X12/in1_input", "type": 1, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 13.9, + "lowerCriticalVal": 11.04 }, "compute": "@/1000" }, { - "name": "P12V_SCM", + "name": "MCB_P12V_SCM", "sysfsPath": "/run/devmap/sensors/MCB_ADM1278_0X12/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 13.9, + "lowerCriticalVal": 11.04 }, "compute": "@/1000" }, { - "name": "FCB0_P3_3V", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage1_raw", + "name": "MCB_FCB0_P3_3V", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage1_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.55, @@ -165,8 +165,8 @@ "compute": "@/1000*0.05735" }, { - "name": "FCB0_P12V", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage4_raw", + "name": "MCB_FCB0_P12V", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage4_raw", "type": 1, "thresholds": { "upperCriticalVal": 14.4, @@ -175,48 +175,48 @@ "compute": "@/1000*0.2078" }, { - "name": "FCB0_FAN0", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage5_raw", + "name": "FAN1_FCB0", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage5_raw", "type": 2, "thresholds": { - "upperCriticalVal": 14, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB0_FAN1", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage6_raw", + "name": "FAN2_FCB0", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage6_raw", "type": 2, "thresholds": { - "upperCriticalVal": 14, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB0_FAN2", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage7_raw", + "name": "FAN3_FCB0", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage7_raw", "type": 2, "thresholds": { - "upperCriticalVal": 14, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB0_FAN3", - "sysfsPath": "/run/devmap/sensors/FAN0_LTC2497_0X4C/in_voltage8_raw", + "name": "FAN4_FCB0", + "sysfsPath": "/run/devmap/sensors/FCB0_LTC2497_0X4C/in_voltage8_raw", "type": 2, "thresholds": { - "upperCriticalVal": 14, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB1_P3_3V", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage1_raw", + "name": "MCB_FCB1_P3_3V", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage1_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.55, @@ -225,8 +225,8 @@ "compute": "@/1000*0.05735" }, { - "name": "FCB1_P12V", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage4_raw", + "name": "MCB_FCB1_P12V", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage4_raw", "type": 1, "thresholds": { "upperCriticalVal": 14.4, @@ -235,46 +235,189 @@ "compute": "@/1000*0.2078" }, { - "name": "FCB1_FAN0", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage5_raw", + "name": "FAN1_FCB1", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage5_raw", "type": 2, "thresholds": { - "upperCriticalVal": 8.9, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB1_FAN1", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage6_raw", + "name": "FAN2_FCB1", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage6_raw", "type": 2, "thresholds": { - "upperCriticalVal": 8.9, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB1_FAN2", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage7_raw", + "name": "FAN3_FCB1", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage7_raw", "type": 2, "thresholds": { - "upperCriticalVal": 8.9, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" }, { - "name": "FCB1_FAN3", - "sysfsPath": "/run/devmap/sensors/FAN1_LTC2497_0X4C/in_voltage8_raw", + "name": "FAN4_FCB1", + "sysfsPath": "/run/devmap/sensors/FCB1_LTC2497_0X4C/in_voltage8_raw", "type": 2, "thresholds": { - "upperCriticalVal": 8.9, - "lowerCriticalVal": 4.35 + "upperCriticalVal": 10, + "lowerCriticalVal": 0.1 }, "compute": "@/1000*0.2670288" + }, + { + "name": "FAN1_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan1_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN1_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan2_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN2_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan3_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN2_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan4_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN3_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan5_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN3_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan6_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN4_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan7_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN4_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan8_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN5_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan9_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN5_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan10_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN6_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan11_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN6_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan12_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN7_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan13_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN7_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan14_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN8_F_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan15_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } + }, + { + "name": "FAN8_R_RPM", + "sysfsPath": "/run/devmap/sensors/MCB_FAN_PWM/fan16_input", + "type": 4, + "thresholds": { + "upperCriticalVal": 20700, + "lowerCriticalVal": 3245 + } } - ] }, { @@ -282,7 +425,7 @@ "pmUnitName": "SCM", "sensors": [ { - "name": "INLET", + "name": "SCM_INLET", "sysfsPath": "/run/devmap/sensors/SCM_TMP451_0X4C/temp1_input", "type": 3, "thresholds": { @@ -292,17 +435,17 @@ "compute": "@/1000" }, { - "name": "VP3P3_STBY_BMC", + "name": "SCM_VP3P3_STBY_BMC", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage0_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.7949999999999995, "lowerCriticalVal": 2.8049999999999997 }, - "compute": "@/1000*0.057815344000000005" + "compute": "@/1000*0.057628239" }, { - "name": "VP1P0_PCIE4", + "name": "SCM_VP1P0_PCIE4", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage1_raw", "type": 1, "thresholds": { @@ -312,27 +455,27 @@ "compute": "@/1000*0.017486839" }, { - "name": "AV3P3", + "name": "SCM_AV3P3", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage2_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.7949999999999995, "lowerCriticalVal": 2.8049999999999997 }, - "compute": "@/1000*0.057936412" + "compute": "@/1000*0.057628239" }, { - "name": "VP3P3_CPU_DUP", + "name": "SCM_VP3P3_CPU_DUP", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage3_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.7949999999999995, "lowerCriticalVal": 2.8049999999999997 }, - "compute": "@/1000*0.057936412" + "compute": "@/1000*0.057628239" }, { - "name": "VP2V5_VPP", + "name": "SCM_VP2V5_VPP", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage4_raw", "type": 1, "thresholds": { @@ -342,17 +485,17 @@ "compute": "@/1000*0.043657757000000005" }, { - "name": "SATA_VSENSE_P", + "name": "SCM_SATA_VSENSE_P", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage6_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.7949999999999995, "lowerCriticalVal": 2.8049999999999997 }, - "compute": "@/1000*0.057216189" + "compute": "@/1000*0.057628239" }, { - "name": "P1P8_Z0", + "name": "SCM_P1P8_Z0", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage7_raw", "type": 1, "thresholds": { @@ -362,7 +505,7 @@ "compute": "@/1000*0.031433585" }, { - "name": "P3V3_Z0", + "name": "SCM_P3V3_Z0", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage8_raw", "type": 1, "thresholds": { @@ -372,7 +515,7 @@ "compute": "@/1000*0.057628239" }, { - "name": "P1V0_Z0", + "name": "SCM_P1V0_Z0", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage9_raw", "type": 1, "thresholds": { @@ -382,7 +525,7 @@ "compute": "@/1000*0.017486839" }, { - "name": "P12V", + "name": "SCM_P12V", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage10_raw", "type": 1, "thresholds": { @@ -392,7 +535,7 @@ "compute": "@/1000*0.20880881499999998" }, { - "name": "VP3P3_TPM", + "name": "SCM_VP3P3_TPM", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage11_raw", "type": 1, "thresholds": { @@ -402,7 +545,7 @@ "compute": "@/1000*0.057628239" }, { - "name": "VP0P6_VTT", + "name": "SCM_VP0P6_VTT", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage12_raw", "type": 1, "thresholds": { @@ -422,17 +565,17 @@ "compute": "@/1000*0.08721279000000001" }, { - "name": "VP3P3_STBY", + "name": "SCM_VP3P3_STBY", "sysfsPath": "/run/devmap/sensors/SCM_LTC2497_0X14/in_voltage14_raw", "type": 1, "thresholds": { "upperCriticalVal": 3.7949999999999995, "lowerCriticalVal": 2.8049999999999997 }, - "compute": "@/1000*0.057740302" + "compute": "@/1000*0.057628239" }, { - "name": "CPU_CORE_TEMP_0", + "name": "SCM_CPU_CORE_TEMP_0", "sysfsPath": "/run/devmap/sensors/CPU_CORE_TEMP/temp1_input", "type": 3, "thresholds": { @@ -442,7 +585,7 @@ "compute": "@/1000" }, { - "name": "SSD", + "name": "SCM_SSD", "sysfsPath": "/run/devmap/sensors/NVME/temp1_input", "type": 3, "thresholds": { @@ -458,307 +601,307 @@ "pmUnitName": "SMB", "sensors": [ { - "name": "P12_KMAC1", + "name": "SMB_P12_KMAC1", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X50/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "NP_CVDDC1", + "name": "SMB_NP_CVDDC1", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X50/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.84, - "lowerCriticalVal": 0.56 + "upperCriticalVal": 0.93, + "lowerCriticalVal": 0.551 }, "compute": "@/1000" }, { - "name": "NP_CVDDC1_K0INT", + "name": "SMB_NP_CVDDC1_K0INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X50/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_CVDDC1_K0EXT", + "name": "SMB_NP_CVDDC1_K0EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X50/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "P12_KMAC2", + "name": "SMB_P12_KMAC2", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X51/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "NP_CVDDC2", + "name": "SMB_NP_CVDDC2", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X51/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.84, - "lowerCriticalVal": 0.56 + "upperCriticalVal": 0.93, + "lowerCriticalVal": 0.551 }, "compute": "@/1000" }, { - "name": "NP_CVDDC2_K1INT", + "name": "SMB_NP_CVDDC2_K1INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X51/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_CVDDC2_K1EXT", + "name": "SMB_NP_CVDDC2_K1EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X51/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDM", + "name": "SMB_NP_IFG_VDDM", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X51/in3_input", "type": 1, "thresholds": { - "upperCriticalVal": 1.438, - "lowerCriticalVal": 1.063 + "upperCriticalVal": 1.625, + "lowerCriticalVal": 0.963 }, "compute": "@/1000" }, { - "name": "P12_KMAC3", + "name": "SMB_P12_KMAC3", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "NP_CVDDC3", + "name": "SMB_NP_CVDDC3", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.84, - "lowerCriticalVal": 0.56 + "upperCriticalVal": 0.93, + "lowerCriticalVal": 0.551 }, "compute": "@/1000" }, { - "name": "NP_CVDDC3_K2INT", + "name": "SMB_NP_CVDDC3_K2INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_CVDDC3_K2EXT", + "name": "SMB_NP_CVDDC3_K2EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_D2D_VDDA", + "name": "SMB_NP_D2D_VDDA", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/in3_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.69, - "lowerCriticalVal": 0.51 + "upperCriticalVal": 0.754, + "lowerCriticalVal": 0.447 }, "compute": "@/1000" }, { - "name": "NP_D2D_VDDA_K0", + "name": "SMB_NP_D2D_VDDA_K0", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X52/curr2_input", "type": 2, "thresholds": { - "upperCriticalVal": 72, - "lowerCriticalVal": 30 + "upperCriticalVal": 96, + "lowerCriticalVal": 1 }, "compute": "@/1000" }, { - "name": "P12_KMAC4", + "name": "SMB_P12_KMAC4", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDI", + "name": "SMB_NP_IFG_VDDI", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.771, - "lowerCriticalVal": 0.57 + "upperCriticalVal": 0.884, + "lowerCriticalVal": 0.524 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDI_K0INT", + "name": "SMB_NP_IFG_VDDI_K0INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDI_K0EXT", + "name": "SMB_NP_IFG_VDDI_K0EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDA", + "name": "SMB_NP_IFG_VDDA", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/in3_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.863, - "lowerCriticalVal": 0.638 + "upperCriticalVal": 0.975, + "lowerCriticalVal": 0.578 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDA_K0", + "name": "SMB_NP_IFG_VDDA_K0", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X53/curr2_input", "type": 2, "thresholds": { "upperCriticalVal": 138, - "lowerCriticalVal": 57.5 + "lowerCriticalVal": 1 }, "compute": "@/1000" }, { - "name": "P12_KMAC5", + "name": "SMB_P12_KMAC5", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X54/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDS", + "name": "SMB_NP_IFG_VDDS", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X54/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.713, - "lowerCriticalVal": 0.527 + "upperCriticalVal": 0.806, + "lowerCriticalVal": 0.477 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDS_K0INT", + "name": "SMB_NP_IFG_VDDS_K0INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X54/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDS_K0EXT", + "name": "SMB_NP_IFG_VDDS_K0EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X54/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "P12V_KMAC_OSFP_L", + "name": "SMB_P12V_KMAC_OSFP_L", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X55/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "OSFP_P3V3_L", + "name": "SMB_OSFP_P3V3_L", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X55/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 3.666, - "lowerCriticalVal": 3 + "upperCriticalVal": 4.333, + "lowerCriticalVal": 2.566 }, "compute": "@/1000" }, { - "name": "OSFP_P3V3_L_K0INT", + "name": "SMB_OSFP_P3V3_L_K0INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X55/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "OSFP_P3V3_L_K0EXT", + "name": "SMB_OSFP_P3V3_L_K0EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X55/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "P12V_KMAC_OSFP_R", + "name": "SMB_P12V_KMAC_OSFP_R", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X56/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "OSFP_P3V3_R", + "name": "SMB_OSFP_P3V3_R", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X56/in2_input", "type": 1, "thresholds": { @@ -768,32 +911,32 @@ "compute": "@/1000" }, { - "name": "OSFP_P3V3_R_K0INT", + "name": "SMB_OSFP_P3V3_R_K0INT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X56/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 110, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "OSFP_P3V3_R_K0EXT", + "name": "SMB_OSFP_P3V3_R_K0EXT", "sysfsPath": "/run/devmap/sensors/SMB_LTC3888-1_0X56/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "P12V_MAIN_ADC0A", + "name": "SMB_P12V_MAIN_ADC0A", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, @@ -802,78 +945,78 @@ "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDI_VSNS", + "name": "SMB_NP_IFG_VDDI_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.737, - "lowerCriticalVal": 0.603 + "upperCriticalVal": 0.884, + "lowerCriticalVal": 0.524 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDA_VSNS", + "name": "SMB_NP_IFG_VDDA_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in3_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.825, - "lowerCriticalVal": 0.675 + "upperCriticalVal": 0.975, + "lowerCriticalVal": 0.578 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDS_VSNS", + "name": "SMB_NP_IFG_VDDS_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in4_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.682, - "lowerCriticalVal": 0.558 + "upperCriticalVal": 0.806, + "lowerCriticalVal": 0.477 }, "compute": "@/1000" }, { - "name": "NP_IFG_VDDM_VSNS", + "name": "SMB_NP_IFG_VDDM_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in5_input", "type": 1, "thresholds": { - "upperCriticalVal": 1.375, - "lowerCriticalVal": 1.125 + "upperCriticalVal": 1.625, + "lowerCriticalVal": 0.963 }, "compute": "@/1000" }, { - "name": "NP_PCIE_VDDH_VSNS", + "name": "SMB_NP_PCIE_VDDH_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in7_input", "type": 1, "thresholds": { - "upperCriticalVal": 1.32, - "lowerCriticalVal": 1.08 + "upperCriticalVal": 1.56, + "lowerCriticalVal": 0.924 }, "compute": "@/1000" }, { - "name": "NP_PCIE_VDDACK_VSNS", + "name": "SMB_NP_PCIE_VDDACK_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5C/in8_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.825, - "lowerCriticalVal": 0.675 + "upperCriticalVal": 0.975, + "lowerCriticalVal": 0.578 }, "compute": "@/1000" }, { - "name": "P12V_MAIN_ADC0B", + "name": "SMB_P12V_MAIN_ADC0B", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, @@ -882,33 +1025,33 @@ "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "NP_D2D_VDDA_VSNS", + "name": "SMB_NP_D2D_VDDA_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/in2_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.66, - "lowerCriticalVal": 0.54 + "upperCriticalVal": 0.754, + "lowerCriticalVal": 0.447 }, "compute": "@/1000" }, { - "name": "NP_CVDDC_VSNS", + "name": "SMB_NP_CVDDC_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/in3_input", "type": 1, "thresholds": { - "upperCriticalVal": 0.77, - "lowerCriticalVal": 0.63 + "upperCriticalVal": 0.93, + "lowerCriticalVal": 0.551 }, "compute": "@/1000" }, { - "name": "OSFP_LEFT_VSNS", + "name": "SMB_OSFP_LEFT_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/in4_input", "type": 1, "thresholds": { @@ -918,7 +1061,7 @@ "compute": "@/1000" }, { - "name": "OSFP_RIGHT_VSNS", + "name": "SMB_OSFP_RIGHT_VSNS", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5D/in5_input", "type": 1, "thresholds": { @@ -928,27 +1071,27 @@ "compute": "@/1000" }, { - "name": "P12V_MAIN_ADC1A", + "name": "SMB_P12V_MAIN_ADC1A", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in1_input", "type": 1, "thresholds": { "upperCriticalVal": 14.4, - "lowerCriticalVal": 9.6 + "lowerCriticalVal": 9 }, "compute": "@/1000" }, { - "name": "U1_ADC1_A_DIE", + "name": "SMB_U1_ADC1_A_DIE", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, { - "name": "A3P3V", + "name": "SMB_A3P3V", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in2_input", "type": 1, "thresholds": { @@ -958,7 +1101,7 @@ "compute": "@/1000" }, { - "name": "A1P8V", + "name": "SMB_A1P8V", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in3_input", "type": 1, "thresholds": { @@ -972,23 +1115,23 @@ "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in5_input", "type": 1, "thresholds": { - "upperCriticalVal": 1.12, + "upperCriticalVal": 1.2, "lowerCriticalVal": 0.88 }, "compute": "@/1000" }, { - "name": "A1P2V", + "name": "SMB_A1P2V", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in6_input", "type": 1, "thresholds": { - "upperCriticalVal": 1.344, + "upperCriticalVal": 1.4, "lowerCriticalVal": 1.056 }, "compute": "@/1000" }, { - "name": "VP3P3_PS_STBY", + "name": "SMB_VP3P3_PS_STBY", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5E/in7_input", "type": 1, "thresholds": { @@ -998,7 +1141,7 @@ "compute": "@/1000" }, { - "name": "P12V_MAIN_ADC1B", + "name": "SMB_P12V_MAIN_ADC1B", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5F/in1_input", "type": 1, "thresholds": { @@ -1008,12 +1151,12 @@ "compute": "@/1000" }, { - "name": "U1_ADC1_B_DIE", + "name": "SMB_U1_ADC1_B_DIE", "sysfsPath": "/run/devmap/sensors/SMB_LTC2979_0X5F/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 120, + "lowerCriticalVal": -10 }, "compute": "@/1000" }, @@ -1052,7 +1195,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4C/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1062,7 +1205,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4C/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1072,7 +1215,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4D/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1082,7 +1225,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4D/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1092,7 +1235,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4E/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1102,7 +1245,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4E/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1112,7 +1255,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X1F/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1122,7 +1265,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X1F/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1132,7 +1275,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4F/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1142,7 +1285,7 @@ "sysfsPath": "/run/devmap/sensors/SMB_TMP421_0X4F/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, + "upperCriticalVal": 115, "lowerCriticalVal": -10 }, "compute": "@/1000" @@ -1156,15 +1299,15 @@ }, { "slotPath": "/PSU_SLOT@0", - "pmUnitName": "PDB0", + "pmUnitName": "PSU", "sensors": [ { "name": "PSU0_VIN", "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/in1_input", "type": 1, "thresholds": { - "upperCriticalVal": 264, - "lowerCriticalVal": 180 + "upperCriticalVal": 407, + "lowerCriticalVal": 38 }, "compute": "@/1000" }, @@ -1173,8 +1316,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/curr1_input", "type": 2, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 80, + "lowerCriticalVal": 0 }, "compute": "@/1000" }, @@ -1193,8 +1336,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/curr2_input", "type": 2, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 250, + "lowerCriticalVal": 5 }, "compute": "@/1000" }, @@ -1203,8 +1346,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/power2_input", "type": 0, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 3000, + "lowerCriticalVal": 60 }, "compute": "@/1000000" }, @@ -1212,10 +1355,6 @@ "name": "PSU0_PIN_MN", "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/power1_input", "type": 0, - "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 - }, "compute": "@/1000000" }, { @@ -1223,8 +1362,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 55, - "lowerCriticalVal": -10 + "upperCriticalVal": 72, + "lowerCriticalVal": -5 }, "compute": "@/1000" }, @@ -1233,8 +1372,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, - "lowerCriticalVal": -10 + "upperCriticalVal": 102, + "lowerCriticalVal": -5 }, "compute": "@/1000" }, @@ -1243,8 +1382,8 @@ "sysfsPath": "/run/devmap/sensors/PDB0_PSU_0X58/temp3_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, - "lowerCriticalVal": -10 + "upperCriticalVal": 95, + "lowerCriticalVal": -5 }, "compute": "@/1000" } @@ -1252,15 +1391,15 @@ }, { "slotPath": "/PSU_SLOT@1", - "pmUnitName": "PDB1", + "pmUnitName": "PSU", "sensors": [ { "name": "PSU1_VIN", "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/in1_input", "type": 1, "thresholds": { - "upperCriticalVal": 264, - "lowerCriticalVal": 180 + "upperCriticalVal": 407, + "lowerCriticalVal": 38 }, "compute": "@/1000" }, @@ -1269,8 +1408,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/curr1_input", "type": 2, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 80, + "lowerCriticalVal": 0 }, "compute": "@/1000" }, @@ -1289,8 +1428,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/curr2_input", "type": 2, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 250, + "lowerCriticalVal": 5 }, "compute": "@/1000" }, @@ -1299,8 +1438,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/power2_input", "type": 0, "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 + "upperCriticalVal": 3000, + "lowerCriticalVal": 60 }, "compute": "@/1000000" }, @@ -1308,10 +1447,6 @@ "name": "PSU1_PIN_MN", "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/power1_input", "type": 0, - "thresholds": { - "upperCriticalVal": 2000000000000, - "lowerCriticalVal": -2000000000000 - }, "compute": "@/1000000" }, { @@ -1319,8 +1454,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/temp1_input", "type": 3, "thresholds": { - "upperCriticalVal": 55, - "lowerCriticalVal": -10 + "upperCriticalVal": 72, + "lowerCriticalVal": -5 }, "compute": "@/1000" }, @@ -1329,8 +1464,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/temp2_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, - "lowerCriticalVal": -10 + "upperCriticalVal": 102, + "lowerCriticalVal": -5 }, "compute": "@/1000" }, @@ -1339,8 +1474,8 @@ "sysfsPath": "/run/devmap/sensors/PDB1_PSU_0X58/temp3_input", "type": 3, "thresholds": { - "upperCriticalVal": 90, - "lowerCriticalVal": -10 + "upperCriticalVal": 95, + "lowerCriticalVal": -5 }, "compute": "@/1000" } diff --git a/fboss/platform/configs/morgan800cc/weutil.json b/fboss/platform/configs/morgan800cc/weutil.json index 1d32ca44f33d6..20eb1a1e0336f 100644 --- a/fboss/platform/configs/morgan800cc/weutil.json +++ b/fboss/platform/configs/morgan800cc/weutil.json @@ -7,12 +7,6 @@ "SMB": { "path": "/run/devmap/eeproms/SMB_EEPROM" }, - "LED1": { - "path": "/run/devmap/eeproms/LED1_EEPROM" - }, - "LED2": { - "path": "/run/devmap/eeproms/LED2_EEPROM" - }, "PDB1": { "path": "/run/devmap/eeproms/PDB1_EEPROM" }, diff --git a/fboss/platform/configs/sample/fan_service.json b/fboss/platform/configs/sample/fan_service.json index e5facce5c41c8..2f6456682d189 100644 --- a/fboss/platform/configs/sample/fan_service.json +++ b/fboss/platform/configs/sample/fan_service.json @@ -181,8 +181,7 @@ "SC_TH3_DIODE1_TEMP" ], "fanNames": [ - "fan_5", - "fan_6" + "fan_5" ], "slope": 3 }, diff --git a/fboss/platform/configs/sample/platform_manager.json b/fboss/platform/configs/sample/platform_manager.json index e191e198ebb88..1d2b4641a0370 100644 --- a/fboss/platform/configs/sample/platform_manager.json +++ b/fboss/platform/configs/sample/platform_manager.json @@ -118,7 +118,7 @@ }, "SMB": { "pluggedInSlotType": "SMB_SLOT", - "pciDevices": [ + "pciDeviceConfigs": [ { "pmUnitScopedName": "SMB_IOB", "vendorId": "0x1132", @@ -209,7 +209,7 @@ "pmUnitScopedName": "YOLO_SENSOR2" } ], - "pciDevices": [ + "pciDeviceConfigs": [ { "pmUnitScopedName": "DOM_FPGA", "vendorId": "0x1132", @@ -308,7 +308,7 @@ "CPU@1" ], "symbolicLinkToDevicePath": { - "/run/devmap/eeproms/CHASSIS_EEPROM": "/SMB_SLOT@0/[chassis_eeprom]", + "/run/devmap/eeproms/CHASSIS_EEPROM": "/SMB_SLOT@0/[CHASSIS_EEPROM]", "/run/devmap/eeproms/SCM_EEPROM": "/[IDPROM]", "/run/devmap/eeproms/SMB_EEPROM": "/SMB_SLOT@0/[IDPROM]", "/run/devmap/eeproms/YOLO_MAX_EEPROM": "/SMB_SLOT@0/YOLO_SLOT@0/[IDPROM]", @@ -316,13 +316,13 @@ "/run/devmap/eeproms/PSU2_EEPROM": "/SMB_SLOT@0/YOLO_SLOT@0/PSU_SLOT@1/[IDPROM]", "/run/devmap/eeproms/PIM0_EEPROM": "/SMB_SLOT@0/YOLO_SLOT@0/PIM_SLOT@0/[IDPROM]", "/run/devmap/eeproms/PIM1_EEPROM": "/SMB_SLOT@0/YOLO_SLOT@0/PIM_SLOT@1/[IDPROM]", - "/run/devmap/sensors/SMB_INLET_SENSOR": "/SMB_SLOT@0/[inlet_sensor]", - "/run/devmap/sensors/SMB_OUTLET_SENSOR": "/SMB_SLOT@0/[outlet_sensor]", - "/run/devmap/sensors/ASIC_SENSOR": "/SMB_SLOT@0/[asic_sensor]", - "/run/devmap/sensors/YOLO_SENSOR1": "/SMB_SLOT@0/YOLO_SLOT@0/[yolo_sensor1]", - "/run/devmap/sensors/YOLO_SENSOR2": "/SMB_SLOT@0/YOLO_SLOT@0/[yolo_sensor2]", - "/run/devmap/sensors/PSU1_2GH_SENSOR": "/SMB_SLOT@0/YOLO_SLOT@0/PSU_SLOT@0/[psu_2gh_sensor]", - "/run/devmap/sensors/PSU2_2GH_SENSOR": "/SMB_SLOT@0/YOLO_SLOT@0/PSU_SLOT@1/[psu_2gh_sensor]", + "/run/devmap/sensors/SMB_INLET_SENSOR": "/SMB_SLOT@0/[INLET_SENSOR]", + "/run/devmap/sensors/SMB_OUTLET_SENSOR": "/SMB_SLOT@0/[OUTLET_SENSOR]", + "/run/devmap/sensors/ASIC_SENSOR": "/SMB_SLOT@0/[ASIC_SENSOR]", + "/run/devmap/sensors/YOLO_SENSOR1": "/SMB_SLOT@0/YOLO_SLOT@0/[YOLO_SENSOR1]", + "/run/devmap/sensors/YOLO_SENSOR2": "/SMB_SLOT@0/YOLO_SLOT@0/[YOLO_SENSOR2]", + "/run/devmap/sensors/PSU1_2GH_SENSOR": "/SMB_SLOT@0/YOLO_SLOT@0/PSU_SLOT@0/[PSU_2GH_SENSOR]", + "/run/devmap/sensors/PSU2_2GH_SENSOR": "/SMB_SLOT@0/YOLO_SLOT@0/PSU_SLOT@1/[PSU_2GH_SENSOR]", "/run/devmap/fpgas/SCM_IOB": "/[SCM_IOB]", "/run/devmap/fpgas/SMB_IOB": "/SMB_SLOT@0/[SMB_IOB]", "/run/devmap/fpgas/DOM_FPGA": "/SMB_SLOT@0/YOLO_SLOT@0/[DOM_FPGA]", diff --git a/fboss/platform/configs/tahan800bc/fan_service.json b/fboss/platform/configs/tahan800bc/fan_service.json index f435222c5a3c0..051a13ad727bf 100644 --- a/fboss/platform/configs/tahan800bc/fan_service.json +++ b/fboss/platform/configs/tahan800bc/fan_service.json @@ -2,7 +2,7 @@ "pwmBoostOnNumDeadFan": 1, "pwmBoostOnNumDeadSensor": 0, "pwmBoostOnNoQsfpAfterInSec": 55, - "pwmBoostValue": 75, + "pwmBoostValue": 100, "pwmTransitionValue": 50, "pwmLowerThreshold": 30, "pwmUpperThreshold": 100, diff --git a/fboss/platform/configs/tahan800bc/sensor_service.json b/fboss/platform/configs/tahan800bc/sensor_service.json index 8cbf96c9705de..96a489a149cb2 100644 --- a/fboss/platform/configs/tahan800bc/sensor_service.json +++ b/fboss/platform/configs/tahan800bc/sensor_service.json @@ -2,7 +2,7 @@ "pmUnitSensorsList": [ { "slotPath": "/PDB_SLOT@0", - "pmUnitName": "PDB_CARD", + "pmUnitName": "PDB", "sensors": [ { "name": "PDB_INLET_LM75_TEMP", @@ -1576,7 +1576,7 @@ }, { "slotPath": "/COME_SLOT@0", - "pmUnitName": "COME_CARD", + "pmUnitName": "NETLAKE", "sensors": [ { "name": "COMe_PU4_XDPE15284_PVCCIN_VIN", @@ -1966,7 +1966,7 @@ }, { "slotPath": "/RUNBMC_SLOT@0", - "pmUnitName": "BMC_CARD", + "pmUnitName": "MINERVA_BMC", "sensors": [ { "name": "BMC_U9_Thermal_Sensor_TMP1075_TEMP", diff --git a/fboss/platform/data_corral_service/BUCK b/fboss/platform/data_corral_service/BUCK index 1bfd2aea11f57..94db34ecc97eb 100644 --- a/fboss/platform/data_corral_service/BUCK +++ b/fboss/platform/data_corral_service/BUCK @@ -32,7 +32,6 @@ cpp_library( "//fboss/lib:common_file_utils", "//fboss/platform/data_corral_service/if:led_manager-cpp2-types", "//fboss/platform/platform_manager:utils", - "//folly:string", "//folly/logging:logging", ], ) @@ -63,7 +62,6 @@ cpp_binary( "//fboss/platform/helpers:init", "//fboss/platform/helpers:platform_name_lib", "//folly/executors:function_scheduler", - "//folly/logging:init", "//thrift/lib/cpp2/protocol:protocol", ], external_deps = [ diff --git a/fboss/platform/data_corral_service/FruPresenceExplorer.cpp b/fboss/platform/data_corral_service/FruPresenceExplorer.cpp index 20813a619b9dd..d001f9e310389 100644 --- a/fboss/platform/data_corral_service/FruPresenceExplorer.cpp +++ b/fboss/platform/data_corral_service/FruPresenceExplorer.cpp @@ -4,7 +4,6 @@ #include #include -#include #include #include "fboss/lib/CommonFileUtils.h" diff --git a/fboss/platform/data_corral_service/Main.cpp b/fboss/platform/data_corral_service/Main.cpp index b224ef8dc8a32..29da167eaa50d 100644 --- a/fboss/platform/data_corral_service/Main.cpp +++ b/fboss/platform/data_corral_service/Main.cpp @@ -3,7 +3,6 @@ #include #include -#include #include #include diff --git a/fboss/platform/fan_service/BUCK b/fboss/platform/fan_service/BUCK index e836676810549..c1b2d3f9e6e8f 100644 --- a/fboss/platform/fan_service/BUCK +++ b/fboss/platform/fan_service/BUCK @@ -13,8 +13,8 @@ cpp_binary( "DataFetcher.h", ], deps = [ + ":config_validator", ":core", - ":utils", "//fb303:logging", "//fboss/platform/config_lib:config_lib", "//fboss/platform/helpers:init", @@ -22,7 +22,6 @@ cpp_binary( "//fboss/platform/sensor_service/if:sensor_service-cpp2-types", "//fboss/qsfp_service/lib:qsfp-service-client", "//folly/executors:function_scheduler", - "//folly/logging:init", "//folly/logging:logging", "//thrift/lib/cpp2/protocol:protocol", ], @@ -32,11 +31,12 @@ cpp_binary( ) cpp_library( - name = "utils", + name = "config_validator", srcs = [ - "Utils.cpp", + "ConfigValidator.cpp", ], exported_deps = [ + "fbsource//third-party/range-v3:range-v3", "//fboss/platform/fan_service/if:fan_service-cpp2-types", "//folly/logging:logging", ], diff --git a/fboss/platform/fan_service/ConfigValidator.cpp b/fboss/platform/fan_service/ConfigValidator.cpp new file mode 100644 index 0000000000000..6469ec0e1f76d --- /dev/null +++ b/fboss/platform/fan_service/ConfigValidator.cpp @@ -0,0 +1,209 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include "fboss/platform/fan_service/ConfigValidator.h" + +#include +#include +#include + +#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_constants.h" +#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_types.h" + +namespace { +namespace constants = + facebook::fboss::platform::fan_service::fan_service_config_constants; + +std::unordered_set accessMethodTypes = { + constants::ACCESS_TYPE_SYSFS(), + constants::ACCESS_TYPE_UTIL(), + constants::ACCESS_TYPE_THRIFT(), + constants::ACCESS_TYPE_QSFP()}; + +std::unordered_set zoneTypes = { + constants::ZONE_TYPE_MAX(), + constants::ZONE_TYPE_MIN(), + constants::ZONE_TYPE_AVG()}; + +std::unordered_set opticTypes = { + constants::OPTIC_TYPE_100_GENERIC(), + constants::OPTIC_TYPE_200_GENERIC(), + constants::OPTIC_TYPE_400_GENERIC(), + constants::OPTIC_TYPE_800_GENERIC()}; + +std::unordered_set opticAggregationTypes = { + constants::OPTIC_AGGREGATION_TYPE_MAX(), + constants::OPTIC_AGGREGATION_TYPE_PID()}; + +std::unordered_set sensorPwmCalcTypes = { + constants::SENSOR_PWM_CALC_TYPE_FOUR_LINEAR_TABLE(), + constants::SENSOR_PWM_CALC_TYPE_PID()}; + +} // namespace + +namespace facebook::fboss::platform::fan_service { +bool ConfigValidator::isValid(const FanServiceConfig& config) { + if (config.controlInterval()) { + if (*config.controlInterval()->pwmUpdateInterval() <= 0) { + XLOG(ERR) << "Invalid pwm update interval: " + << *config.controlInterval()->pwmUpdateInterval(); + return false; + } + if (*config.controlInterval()->sensorReadInterval() <= 0) { + XLOG(ERR) << "Invalid sensor read interval: " + << *config.controlInterval()->sensorReadInterval(); + return false; + } + } + for (const auto& sensor : *config.sensors()) { + if (!accessMethodTypes.count(*sensor.access()->accessType())) { + XLOG(ERR) << "Invalid access method: " << *sensor.access()->accessType(); + return false; + } + if (!sensorPwmCalcTypes.count(*sensor.pwmCalcType())) { + XLOG(ERR) << "Invalid PWM calculation type: " << *sensor.pwmCalcType(); + return false; + } + } + + if (config.watchdog()) { + if (!accessMethodTypes.count(*config.watchdog()->access()->accessType())) { + XLOG(ERR) << "Invalid access method for watchdog config: " + << *config.watchdog()->access()->accessType(); + return false; + } + } + + if (*config.pwmTransitionValue() <= 0) { + XLOG(ERR) << "Transitional PWM value must be greater than 0"; + return false; + } + + for (const auto& fan : *config.fans()) { + if (!isValidFanConfig(fan)) { + return false; + } + } + + for (const auto& zone : *config.zones()) { + if (!isValidZoneConfig( + zone, *config.fans(), *config.sensors(), *config.optics())) { + return false; + } + } + + for (const auto& optic : *config.optics()) { + if (!isValidOpticConfig(optic)) { + return false; + } + } + + XLOG(INFO) << "The config is valid"; + return true; +} + +bool ConfigValidator::isValidFanConfig(const Fan& fan) { + if (fan.rpmSysfsPath()->empty()) { + XLOG(ERR) << "rpmSysfsPath cannot be empty"; + return false; + } + if (fan.pwmSysfsPath()->empty()) { + XLOG(ERR) << "pwmSysfsPath cannot be empty"; + return false; + } + if (fan.presenceSysfsPath() && fan.presenceGpio()) { + XLOG(ERR) << "Both presenceSysfsPath and presenceGpio cannot be set"; + return false; + } + if (!fan.presenceSysfsPath() && !fan.presenceGpio()) { + XLOG(ERR) << "Either presenceSysfsPath or presenceGpio must be set"; + return false; + } + return true; +} + +bool ConfigValidator::isValidOpticConfig(const Optic& optic) { + if (optic.opticName()->empty()) { + XLOG(ERR) << "opticName cannot be empty"; + return false; + } + + if (!opticAggregationTypes.count(*optic.aggregationType())) { + XLOG(ERR) << "Invalid optic aggregation type: " << *optic.aggregationType(); + return false; + } + + if (*optic.aggregationType() == constants::OPTIC_AGGREGATION_TYPE_PID()) { + if (optic.pidSettings()->empty()) { + XLOG(ERR) << "PID settings cannot be empty for optic aggregation type: " + << *optic.aggregationType(); + return false; + } + for (const auto& [opticType, pidSetting] : *optic.pidSettings()) { + if (!opticTypes.count(opticType)) { + XLOG(ERR) << "Invalid optic type: " << opticType; + return false; + } + } + } + + if (*optic.aggregationType() == constants::OPTIC_AGGREGATION_TYPE_MAX()) { + if (optic.tempToPwmMaps()->empty()) { + XLOG(ERR) + << "tempToPwmMaps settings cannot be empty for optic aggregation type: " + << *optic.aggregationType(); + return false; + } + for (const auto& [opticType, tempToPwmMap] : *optic.tempToPwmMaps()) { + if (!opticTypes.count(opticType)) { + XLOG(ERR) << "Invalid optic type: " << opticType; + return false; + } + } + } + return true; +} + +bool ConfigValidator::isValidZoneConfig( + const Zone& zone, + const std::vector& fans, + const std::vector& sensors, + const std::vector& optics) { + if (zone.zoneName()->empty()) { + XLOG(ERR) << "zoneName cannot be empty"; + return false; + } + if (!zoneTypes.count(*zone.zoneType())) { + XLOG(ERR) << "Invalid zone type: " << *zone.zoneType(); + return false; + } + auto validFanNames = fans | + ranges::views::transform([](const auto& fan) { return *fan.fanName(); }) | + ranges::to; + auto validSensorNames = sensors | + ranges::views::transform([](const auto& sensor) { + return *sensor.sensorName(); + }) | + ranges::to; + auto validOpticNames = optics | + ranges::views::transform([](const auto& optic) { + return *optic.opticName(); + }) | + ranges::to; + for (const auto& fanName : *zone.fanNames()) { + if (!validFanNames.count(fanName)) { + XLOG(ERR) << fmt::format( + "Invalid fan name: {} in Zone: {}", fanName, *zone.zoneName()); + return false; + } + } + for (const auto& sensorName : *zone.sensorNames()) { + if (!validSensorNames.count(sensorName) && + !validOpticNames.count(sensorName)) { + XLOG(ERR) << fmt::format( + "Invalid sensor name: {} in Zone: {}", sensorName, *zone.zoneName()); + return false; + } + } + return true; +} +} // namespace facebook::fboss::platform::fan_service diff --git a/fboss/platform/fan_service/ConfigValidator.h b/fboss/platform/fan_service/ConfigValidator.h new file mode 100644 index 0000000000000..f6fb6df4f5ae8 --- /dev/null +++ b/fboss/platform/fan_service/ConfigValidator.h @@ -0,0 +1,22 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_types.h" + +namespace facebook::fboss::platform::fan_service { + +class ConfigValidator { + public: + bool isValid(const FanServiceConfig& config); + bool isValidFanConfig(const Fan& fanConfig); + bool isValidOpticConfig(const Optic& opticConfig); + bool isValidSensorConfig(const Sensor& sensorConfig); + bool isValidZoneConfig( + const Zone& zoneConfig, + const std::vector& fanConfigs, + const std::vector& sensorConfigs, + const std::vector& opticConfigs); +}; + +} // namespace facebook::fboss::platform::fan_service diff --git a/fboss/platform/fan_service/FsdbSensorSubscriber.cpp b/fboss/platform/fan_service/FsdbSensorSubscriber.cpp index 25c2926803651..d03e8c503458a 100644 --- a/fboss/platform/fan_service/FsdbSensorSubscriber.cpp +++ b/fboss/platform/fan_service/FsdbSensorSubscriber.cpp @@ -9,7 +9,6 @@ #include "common/time/Time.h" #include "fboss/fsdb/client/FsdbPubSubManager.h" -#include "fboss/fsdb/common/Flags.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/platform/sensor_service/if/gen-cpp2/sensor_service_types.h" diff --git a/fboss/platform/fan_service/Main.cpp b/fboss/platform/fan_service/Main.cpp index 6af4641060c15..59fe53f89bd53 100644 --- a/fboss/platform/fan_service/Main.cpp +++ b/fboss/platform/fan_service/Main.cpp @@ -8,14 +8,13 @@ #include #include -#include #include #include #include "fboss/platform/config_lib/ConfigLib.h" +#include "fboss/platform/fan_service/ConfigValidator.h" #include "fboss/platform/fan_service/ControlLogic.h" #include "fboss/platform/fan_service/FanServiceHandler.h" -#include "fboss/platform/fan_service/Utils.h" #include "fboss/platform/helpers/Init.h" #include "fboss/platform/helpers/PlatformNameLib.h" @@ -41,7 +40,7 @@ int main(int argc, char** argv) { fanServiceConfJson); XLOG(INFO) << apache::thrift::SimpleJSONSerializer::serialize( config); - if (!Utils().isValidConfig(config)) { + if (!ConfigValidator().isValid(config)) { XLOG(ERR) << "Invalid config! Aborting..."; throw std::runtime_error("Invalid Config. Aborting..."); } diff --git a/fboss/platform/fan_service/PidLogic.cpp b/fboss/platform/fan_service/PidLogic.cpp index fb797a72688ce..1f91b75adfc65 100644 --- a/fboss/platform/fan_service/PidLogic.cpp +++ b/fboss/platform/fan_service/PidLogic.cpp @@ -7,7 +7,7 @@ namespace facebook::fboss::platform::fan_service { int16_t PidLogic::calculatePwm(float measurement) { - float newPwm; + float newPwm, pwmDelta{0}; float minVal = *pidSetting_.setPoint() - *pidSetting_.negHysteresis(); float maxVal = *pidSetting_.setPoint() + *pidSetting_.posHysteresis(); std::optional error{}; @@ -21,27 +21,25 @@ int16_t PidLogic::calculatePwm(float measurement) { if (error.has_value()) { integral_ = integral_ + *error * dT_; auto derivative = (*error - lastError_) / dT_; - newPwm = (*pidSetting_.kp() * error.value()) + + pwmDelta = (*pidSetting_.kp() * error.value()) + (*pidSetting_.ki() * integral_) + (*pidSetting_.kd() * derivative); + newPwm = lastPwm_ + pwmDelta; } else { newPwm = lastPwm_; } - if (measurement <= maxVal) { - integral_ = newPwm / *pidSetting_.ki(); - } - if (newPwm < 0) { newPwm = 0; } else if (newPwm > 100) { newPwm = 100; } - XLOG(DBG1) << fmt::format( - "Measurement: {}, Error: {}, Last PWM: {}, New PWM: {}", + XLOG(DBG2) << fmt::format( + "Measurement: {}, Error: {}, Last PWM: {}, PWM Delta: {}, New PWM: {}", measurement, error.value_or(0), lastPwm_, + pwmDelta, newPwm); lastPwm_ = newPwm; diff --git a/fboss/platform/fan_service/Utils.cpp b/fboss/platform/fan_service/Utils.cpp deleted file mode 100644 index 9631a25ed86b9..0000000000000 --- a/fboss/platform/fan_service/Utils.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. - -#include "fboss/platform/fan_service/Utils.h" - -#include - -#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_constants.h" -#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_types.h" - -namespace { -namespace constants = - facebook::fboss::platform::fan_service::fan_service_config_constants; - -std::unordered_set accessMethodTypes = { - constants::ACCESS_TYPE_SYSFS(), - constants::ACCESS_TYPE_UTIL(), - constants::ACCESS_TYPE_THRIFT(), - constants::ACCESS_TYPE_QSFP()}; - -std::unordered_set zoneTypes = { - constants::ZONE_TYPE_MAX(), - constants::ZONE_TYPE_MIN(), - constants::ZONE_TYPE_AVG()}; - -std::unordered_set opticTypes = { - constants::OPTIC_TYPE_100_GENERIC(), - constants::OPTIC_TYPE_200_GENERIC(), - constants::OPTIC_TYPE_400_GENERIC(), - constants::OPTIC_TYPE_800_GENERIC()}; - -std::unordered_set opticAggregationTypes = { - constants::OPTIC_AGGREGATION_TYPE_MAX(), - constants::OPTIC_AGGREGATION_TYPE_PID()}; - -std::unordered_set sensorPwmCalcTypes = { - constants::SENSOR_PWM_CALC_TYPE_FOUR_LINEAR_TABLE(), - constants::SENSOR_PWM_CALC_TYPE_INCREMENT_PID(), - constants::SENSOR_PWM_CALC_TYPE_PID()}; - -} // namespace - -namespace facebook::fboss::platform::fan_service { -bool Utils::isValidConfig(const FanServiceConfig& config) { - if (config.controlInterval()) { - if (*config.controlInterval()->pwmUpdateInterval() <= 0) { - XLOG(ERR) << "Invalid pwm update interval: " - << *config.controlInterval()->pwmUpdateInterval(); - return false; - } - if (*config.controlInterval()->sensorReadInterval() <= 0) { - XLOG(ERR) << "Invalid sensor read interval: " - << *config.controlInterval()->sensorReadInterval(); - return false; - } - } - for (const auto& sensor : *config.sensors()) { - if (!accessMethodTypes.count(*sensor.access()->accessType())) { - XLOG(ERR) << "Invalid access method: " << *sensor.access()->accessType(); - return false; - } - if (!sensorPwmCalcTypes.count(*sensor.pwmCalcType())) { - XLOG(ERR) << "Invalid PWM calculation type: " << *sensor.pwmCalcType(); - return false; - } - } - - if (config.watchdog()) { - if (!accessMethodTypes.count(*config.watchdog()->access()->accessType())) { - XLOG(ERR) << "Invalid access method for watchdog config: " - << *config.watchdog()->access()->accessType(); - return false; - } - } - - if (*config.pwmTransitionValue() <= 0) { - XLOG(ERR) << "Transitional PWM value must be greater than 0"; - return false; - } - - for (const auto& fan : *config.fans()) { - if (fan.rpmSysfsPath()->empty()) { - XLOG(ERR) << "rpmSysfsPath cannot be empty"; - return false; - } - if (fan.pwmSysfsPath()->empty()) { - XLOG(ERR) << "pwmSysfsPath cannot be empty"; - return false; - } - if (fan.presenceSysfsPath() && fan.presenceGpio()) { - XLOG(ERR) << "Both presenceSysfsPath and presenceGpio cannot be set"; - return false; - } - if (!fan.presenceSysfsPath() && !fan.presenceGpio()) { - XLOG(ERR) << "Either presenceSysfsPath or presenceGpio must be set"; - return false; - } - } - - for (const auto& zone : *config.zones()) { - if (!zoneTypes.count(*zone.zoneType())) { - XLOG(ERR) << "Invalid zone type: " << *zone.zoneType(); - return false; - } - } - - for (const auto& optic : *config.optics()) { - for (const auto& [opticType, tempToPwmMap] : *optic.tempToPwmMaps()) { - if (!opticTypes.count(opticType)) { - XLOG(ERR) << "Invalid optic type: " << opticType; - return false; - } - } - if (!opticAggregationTypes.count(*optic.aggregationType())) { - XLOG(ERR) << "Invalid optic aggregation type: " - << *optic.aggregationType(); - return false; - } - if (*optic.aggregationType() == constants::OPTIC_AGGREGATION_TYPE_PID()) { - if (optic.pidSettings()->empty()) { - XLOG(ERR) << "PID settings cannot be empty for optic aggregation type: " - << *optic.aggregationType(); - return false; - } - } else if ( - *optic.aggregationType() == constants::OPTIC_AGGREGATION_TYPE_MAX()) { - if (optic.tempToPwmMaps()->empty()) { - XLOG(ERR) - << "tempToPwmMaps settings cannot be empty for optic aggregation type: " - << *optic.aggregationType(); - return false; - } - } - } - - XLOG(INFO) << "The config is valid"; - return true; -} - -} // namespace facebook::fboss::platform::fan_service diff --git a/fboss/platform/fan_service/Utils.h b/fboss/platform/fan_service/Utils.h deleted file mode 100644 index 3a202699f93e7..0000000000000 --- a/fboss/platform/fan_service/Utils.h +++ /dev/null @@ -1,14 +0,0 @@ -// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. - -#pragma once - -#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_types.h" - -namespace facebook::fboss::platform::fan_service { - -class Utils { - public: - bool isValidConfig(const FanServiceConfig& config); -}; - -} // namespace facebook::fboss::platform::fan_service diff --git a/fboss/platform/fan_service/if/fan_service_config.thrift b/fboss/platform/fan_service/if/fan_service_config.thrift index 9dcf940c971a6..36acc30c2f0e2 100644 --- a/fboss/platform/fan_service/if/fan_service_config.thrift +++ b/fboss/platform/fan_service/if/fan_service_config.thrift @@ -15,7 +15,6 @@ const string OPTIC_TYPE_800_GENERIC = "OPTIC_TYPE_800_GENERIC"; const string OPTIC_AGGREGATION_TYPE_MAX = "OPTIC_AGGREGATION_TYPE_MAX"; const string OPTIC_AGGREGATION_TYPE_PID = "OPTIC_AGGREGATION_TYPE_PID"; const string SENSOR_PWM_CALC_TYPE_FOUR_LINEAR_TABLE = "SENSOR_PWM_CALC_TYPE_FOUR_LINEAR_TABLE"; -const string SENSOR_PWM_CALC_TYPE_INCREMENT_PID = "SENSOR_PWM_CALC_TYPE_INCREMENT_PID"; const string SENSOR_PWM_CALC_TYPE_PID = "SENSOR_PWM_CALC_TYPE_PID"; struct AccessMethod { diff --git a/fboss/platform/fan_service/tests/BUCK b/fboss/platform/fan_service/tests/BUCK index 14acaa21ccb3d..8de2a9f899360 100644 --- a/fboss/platform/fan_service/tests/BUCK +++ b/fboss/platform/fan_service/tests/BUCK @@ -6,11 +6,13 @@ cpp_unittest( name = "fan_service_sw_test", srcs = [ "BspTests.cpp", + "ConfigValidatorTest.cpp", "ControlLogicTests.cpp", "PidLogicTests.cpp", ], deps = [ "fbsource//third-party/googletest:gmock", + "//fboss/platform/fan_service:config_validator", "//fboss/platform/fan_service:core", "//fboss/platform/fan_service:pid_logic_library", "//fboss/platform/fan_service/if:fan_service-cpp2-types", diff --git a/fboss/platform/fan_service/tests/ConfigValidatorTest.cpp b/fboss/platform/fan_service/tests/ConfigValidatorTest.cpp new file mode 100644 index 0000000000000..7f625080fbb22 --- /dev/null +++ b/fboss/platform/fan_service/tests/ConfigValidatorTest.cpp @@ -0,0 +1,74 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include + +#include "fboss/platform/fan_service/ConfigValidator.h" +#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_constants.h" +#include "fboss/platform/fan_service/if/gen-cpp2/fan_service_config_types.h" + +using namespace ::testing; +using namespace facebook::fboss::platform::fan_service; + +namespace constants = + facebook::fboss::platform::fan_service::fan_service_config_constants; + +TEST(ConfigValidatorTest, FanConfig) { + auto fan = Fan(); + EXPECT_FALSE(ConfigValidator().isValidFanConfig(fan)); + fan.rpmSysfsPath() = "/run/devmap/sensors/ABC/fan0_rpm"; + EXPECT_FALSE(ConfigValidator().isValidFanConfig(fan)); + fan.pwmSysfsPath() = "/run/devmap/sensors/ABC/fan0_pwm"; + EXPECT_FALSE(ConfigValidator().isValidFanConfig(fan)); + fan.presenceSysfsPath() = "/run/devmap/sensors/ABC/fan0_presence"; + fan.presenceGpio() = Gpio(); + EXPECT_FALSE(ConfigValidator().isValidFanConfig(fan)); + fan.presenceGpio().reset(); + EXPECT_TRUE(ConfigValidator().isValidFanConfig(fan)); + fan.presenceSysfsPath().reset(); + fan.presenceGpio() = Gpio(); + EXPECT_TRUE(ConfigValidator().isValidFanConfig(fan)); +} + +TEST(ConfigValidatorTest, OpticConfig) { + auto optic = Optic(); + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.opticName() = "OPTIC_0"; + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.aggregationType() = constants::OPTIC_AGGREGATION_TYPE_MAX(); + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.tempToPwmMaps() = {{"UNKNOWN_OPTIC", {{34, 50}, {45, 60}}}}; + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.tempToPwmMaps() = {{"OPTIC_TYPE_100_GENERIC", {{34, 50}, {45, 60}}}}; + EXPECT_TRUE(ConfigValidator().isValidOpticConfig(optic)); + optic.aggregationType() = constants::OPTIC_AGGREGATION_TYPE_PID(); + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.pidSettings() = {{"UNKNOWN_OPTIC", PidSetting()}}; + EXPECT_FALSE(ConfigValidator().isValidOpticConfig(optic)); + optic.pidSettings() = {{"OPTIC_TYPE_100_GENERIC", PidSetting()}}; + EXPECT_TRUE(ConfigValidator().isValidOpticConfig(optic)); +} + +TEST(ConfigValidatorTest, ZoneConfig) { + auto zone = Zone(); + EXPECT_FALSE(ConfigValidator().isValidZoneConfig(zone, {}, {}, {})); + zone.zoneName() = "ZONE_0"; + zone.zoneType() = constants::ZONE_TYPE_MAX(); + EXPECT_TRUE(ConfigValidator().isValidZoneConfig(zone, {}, {}, {})); + zone.fanNames() = {"FAN_0"}; + auto fan = Fan(); + fan.fanName() = "FAN_1"; + EXPECT_FALSE(ConfigValidator().isValidZoneConfig(zone, {fan}, {}, {})); + fan.fanName() = "FAN_0"; + EXPECT_TRUE(ConfigValidator().isValidZoneConfig(zone, {fan}, {}, {})); + zone.sensorNames() = {"SENSOR_0"}; + EXPECT_FALSE(ConfigValidator().isValidZoneConfig(zone, {fan}, {}, {})); + auto sensor = Sensor(); + sensor.sensorName() = "SENSOR_0"; + EXPECT_TRUE(ConfigValidator().isValidZoneConfig(zone, {fan}, {sensor}, {})); + zone.sensorNames() = {"SENSOR_0", "OPTIC_0"}; + EXPECT_FALSE(ConfigValidator().isValidZoneConfig(zone, {fan}, {sensor}, {})); + auto optic = Optic(); + optic.opticName() = "OPTIC_0"; + EXPECT_TRUE( + ConfigValidator().isValidZoneConfig(zone, {fan}, {sensor}, {optic})); +} diff --git a/fboss/platform/fan_service/tests/PidLogicTests.cpp b/fboss/platform/fan_service/tests/PidLogicTests.cpp index de272cb6fb526..6c62437346c8f 100644 --- a/fboss/platform/fan_service/tests/PidLogicTests.cpp +++ b/fboss/platform/fan_service/tests/PidLogicTests.cpp @@ -19,10 +19,10 @@ TEST(PIDLogicTest, Basic) { pidSetting.posHysteresis() = 0; // CASE 1: The read value is lower than setPoint, and the previous target PWM - // is too high. PWM should go down. (60 -> 0) + // is too high. PWM should go down. (60 -> 35) auto pidLogic1 = PidLogic(pidSetting, 5); pidLogic1.updateLastPwm(60); - EXPECT_EQ(pidLogic1.calculatePwm(50), 0); + EXPECT_EQ(pidLogic1.calculatePwm(50), 35); EXPECT_EQ(pidLogic1.getLastError(), 8); // CASE 2: The read value is within desired range. @@ -33,17 +33,16 @@ TEST(PIDLogicTest, Basic) { EXPECT_EQ(pidLogic2.getLastError(), 0); // CASE 3: The read value is higher than setPoint, and the current target PWM - // is too low. PWM should go up a bit. (30 -> 24) + // is too low. PWM should go up a bit. (30 -> 54) auto pidLogic3 = PidLogic(pidSetting, 5); pidLogic3.updateLastPwm(30); - EXPECT_EQ(pidLogic3.calculatePwm(68), 24); + EXPECT_EQ(pidLogic3.calculatePwm(68), 54); EXPECT_EQ(pidLogic3.getLastError(), -8); - // CASE 4: Though read value is higher than setPoint, the current target PWM - // is overly high. PWM should go down. (99 -> 24) + // CASE 4: Read value is higher than setPoint, PWM should go up (99 -> 100) auto pidLogic4 = PidLogic(pidSetting, 5); pidLogic4.updateLastPwm(99); - EXPECT_EQ(pidLogic4.calculatePwm(68), 24); + EXPECT_EQ(pidLogic4.calculatePwm(68), 100); EXPECT_EQ(pidLogic4.getLastError(), -8); } diff --git a/fboss/platform/fw_util/fw_util.cpp b/fboss/platform/fw_util/fw_util.cpp index a51ebc45b7158..2a05889898a3b 100644 --- a/fboss/platform/fw_util/fw_util.cpp +++ b/fboss/platform/fw_util/fw_util.cpp @@ -1,7 +1,5 @@ // Copyright 2021-present Facebook. All Rights Reserved. -#include - #include #include "fboss/platform/fw_util/Flags.h" diff --git a/fboss/platform/platform_manager/BUCK b/fboss/platform/platform_manager/BUCK index 82f42f0309cc3..cea1878544ff6 100644 --- a/fboss/platform/platform_manager/BUCK +++ b/fboss/platform/platform_manager/BUCK @@ -46,6 +46,7 @@ cpp_library( "ConfigValidator.cpp", ], exported_deps = [ + "fbsource//third-party/range-v3:range-v3", ":i2c_misc", ":platform_manager_config-cpp2-types", "//folly/logging:logging", @@ -165,14 +166,8 @@ cpp_library( "Utils.cpp", ], exported_deps = [ - ":config_validator", - ":platform_manager_config-cpp2-types", "//fboss/lib:gpiod_line", - "//fboss/platform/config_lib:config_lib", - "//fboss/platform/helpers:platform_name_lib", - "//folly:file_util", "//folly/logging:logging", - "//thrift/lib/cpp2/protocol:protocol", ], exported_external_deps = [ "re2", @@ -180,6 +175,21 @@ cpp_library( ], ) +cpp_library( + name = "config_utils", + srcs = [ + "ConfigUtils.cpp", + ], + exported_deps = [ + ":config_validator", + ":platform_manager_config-cpp2-types", + "//fboss/platform/config_lib:config_lib", + "//fboss/platform/helpers:platform_name_lib", + "//folly/logging:logging", + "//thrift/lib/cpp2/protocol:protocol", + ], +) + cpp_library( name = "i2c_misc", headers = [ @@ -220,6 +230,7 @@ cpp_binary( "Main.cpp", ], deps = [ + ":config_utils", ":pkg_manager", ":platform_manager_handler", "//fb303:logging", diff --git a/fboss/platform/platform_manager/ConfigUtils.cpp b/fboss/platform/platform_manager/ConfigUtils.cpp new file mode 100644 index 0000000000000..1fdf810a53122 --- /dev/null +++ b/fboss/platform/platform_manager/ConfigUtils.cpp @@ -0,0 +1,64 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include "fboss/platform/platform_manager/ConfigUtils.h" + +#include + +#include +#include + +#include "fboss/platform/config_lib/ConfigLib.h" +#include "fboss/platform/helpers/PlatformNameLib.h" +#include "fboss/platform/platform_manager/ConfigValidator.h" + +namespace facebook::fboss::platform::platform_manager { + +// Verify that the platform name from the config and dmidecode match. This +// is necessary to prevent an incorrect config from being used on any platform. +void verifyPlatformNameMatches( + const std::string& platformNameInConfig, + const std::string& platformNameFromBios) { + std::string platformNameInConfigUpper(platformNameInConfig); + std::transform( + platformNameInConfigUpper.begin(), + platformNameInConfigUpper.end(), + platformNameInConfigUpper.begin(), + ::toupper); + + if (platformNameInConfigUpper == platformNameFromBios) { + return; + } + + XLOGF( + FATAL, + "Platform name in config does not match the inferred platform name from " + "bios. Config: {}, Inferred name from BIOS {} ", + platformNameInConfigUpper, + platformNameFromBios); +} + +PlatformConfig ConfigUtils::getConfig() { + std::string platformNameFromBios = + helpers::PlatformNameLib().getPlatformNameFromBios(true); + std::string configJson = + ConfigLib().getPlatformManagerConfig(platformNameFromBios); + PlatformConfig config; + try { + apache::thrift::SimpleJSONSerializer::deserialize( + configJson, config); + } catch (const std::exception& e) { + XLOG(ERR) << "Failed to deserialize platform config: " << e.what(); + throw; + } + XLOG(DBG2) << apache::thrift::SimpleJSONSerializer::serialize( + config); + + verifyPlatformNameMatches(*config.platformName(), platformNameFromBios); + + if (!ConfigValidator().isValid(config)) { + XLOG(ERR) << "Invalid platform config"; + throw std::runtime_error("Invalid platform config"); + } + return config; +} +} // namespace facebook::fboss::platform::platform_manager diff --git a/fboss/platform/platform_manager/ConfigUtils.h b/fboss/platform/platform_manager/ConfigUtils.h new file mode 100644 index 0000000000000..2884929a15b22 --- /dev/null +++ b/fboss/platform/platform_manager/ConfigUtils.h @@ -0,0 +1,14 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#pragma once + +#include "fboss/platform/platform_manager/gen-cpp2/platform_manager_config_types.h" + +namespace facebook::fboss::platform::platform_manager { + +class ConfigUtils { + public: + PlatformConfig getConfig(); +}; + +} // namespace facebook::fboss::platform::platform_manager diff --git a/fboss/platform/platform_manager/ConfigValidator.cpp b/fboss/platform/platform_manager/ConfigValidator.cpp index badfdb217771b..00f2d56ab07cc 100644 --- a/fboss/platform/platform_manager/ConfigValidator.cpp +++ b/fboss/platform/platform_manager/ConfigValidator.cpp @@ -3,17 +3,28 @@ #include "fboss/platform/platform_manager/ConfigValidator.h" #include +#include +#include +#include +#include +#include +#include +#include #include #include "fboss/platform/platform_manager/I2cAddr.h" +namespace facebook::fboss::platform::platform_manager { namespace { const re2::RE2 kRpmVersionRegex{"^[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+$"}; const re2::RE2 kPciIdRegex{"0x[0-9a-f]{4}"}; const re2::RE2 kPciDevOffsetRegex{"0x[0-9a-f]+"}; const re2::RE2 kSymlinkRegex{"^/run/devmap/(?P[a-z0-9-]+)/.+"}; -const re2::RE2 kDevPathRegex{"/([A-Z]+(_[A-Z]+)*_SLOT@[0-9]+/)*\\[.+\\]"}; +const re2::RE2 kDevPathRegex{"(?P.*)\\[(?P.+)\\]"}; +const re2::RE2 kSlotNameRegex{"(?P.([A-Z]+_)+SLOT)@\\d+"}; +const re2::RE2 kSlotPathRegex{"/|(/([A-Z]+_)+SLOT@\\d+)+"}; const re2::RE2 kInfoRomDevicePrefixRegex{"^fpga_info_(dom|iob|scm|mcb)$"}; +const re2::RE2 kI2cAdapterNameRegex{"(?P.+)@(?P\\d+)"}; constexpr auto kSymlinkDirs = { "eeproms", "sensors", @@ -39,14 +50,107 @@ constexpr auto kSpiDevModaliases = { "em3581", "si3210"}; constexpr auto kXcvrDeviceName = "xcvr_ctrl"; -} // namespace - -namespace facebook::fboss::platform::platform_manager { bool containsLower(const std::string& s) { return std::any_of(s.begin(), s.end(), ::islower); } +// Tokenize the SlotPath by delimiter '/' +std::vector split(const std::string& slotPath) { + return slotPath | ranges::views::split('/') | ranges::views::drop(1) | + ranges::to>; +} + +// Returns all PmUnitConfigs that has the given slotType. +std::vector getPmUnitConfigsBySlotType( + const PlatformConfig& platformConfig, + const SlotType& slotType) { + return *platformConfig.pmUnitConfigs() | ranges::views::values | + ranges::views::filter([&](const auto& pmUnitConfig) { + return *pmUnitConfig.pluggedInSlotType() == slotType; + }) | + ranges::to_vector; +} + +std::optional extractSlotType(const std::string& slotName) { + SlotType slotType; + if (!re2::RE2::FullMatch(slotName, kSlotNameRegex, &slotType)) { + return std::nullopt; + } + return slotType; +} + +std::optional resolveSlotType( + const PlatformConfig& platformConfig, + const std::string& slotPath) { + std::optional slotType; + if (slotPath == "/") { + return *platformConfig.rootSlotType(); + } + const auto lastSlotName = std::move(split(slotPath).back()); + // Find the SlotType of the lastSlotName. + return extractSlotType(lastSlotName); +} + +template + requires requires(T t) { + { *t.pmUnitScopedName() } -> std::convertible_to; + } +bool hasDeviceName(const T& deviceConfig, const std::string& deviceName) { + return *deviceConfig.pmUnitScopedName() == deviceName; +} + +template + requires requires(T t) { + { *t.fpgaIpBlockConfig() } -> std::convertible_to; + } +bool hasDeviceName(const T& deviceConfig, const std::string& deviceName) { + return hasDeviceName(*deviceConfig.fpgaIpBlockConfig(), deviceName); +} + +bool hasDeviceName( + const I2cAdapterConfig& deviceConfig, + const std::string& deviceName) { + std::string pmUnitScopedName, adapterNum; + if (!re2::RE2::FullMatch( + deviceName, kI2cAdapterNameRegex, &pmUnitScopedName, &adapterNum)) { + return hasDeviceName(*deviceConfig.fpgaIpBlockConfig(), deviceName); + } + return hasDeviceName(*deviceConfig.fpgaIpBlockConfig(), pmUnitScopedName) && + 0 <= stoi(adapterNum) && + stoi(adapterNum) < *deviceConfig.numberOfAdapters(); +} + +template +bool hasDeviceName( + const std::vector& deviceConfigs, + const std::string& deviceName) { + for (const auto& deviceConfig : deviceConfigs) { + if (hasDeviceName(deviceConfig, deviceName)) { + return true; + } + } + return false; +} + +bool hasDeviceName( + const std::vector& deviceConfigs, + const std::string& deviceName) { + for (const auto& deviceConfig : deviceConfigs) { + if (hasDeviceName(*deviceConfig.fpgaIpBlockConfig(), deviceName) || + hasDeviceName(*deviceConfig.spiDeviceConfigs(), deviceName)) { + return true; + } + } + return false; +} + +template +bool isDeviceMatch(const std::string& deviceName, Ts&&... deviceConfigs) { + return (hasDeviceName(deviceConfigs, deviceName) || ...); +} +} // namespace + bool ConfigValidator::isValidSlotTypeConfig( const SlotTypeConfig& slotTypeConfig) { if (!slotTypeConfig.idpromConfig_ref() && !slotTypeConfig.pmUnitName()) { @@ -234,14 +338,132 @@ bool ConfigValidator::isValidSymlink(const std::string& symlink) { return true; } -bool ConfigValidator::isValidDevicePath(const std::string& devicePath) { - if (!re2::RE2::FullMatch(devicePath, kDevPathRegex)) { +bool ConfigValidator::isValidDevicePath( + const PlatformConfig& platformConfig, + const std::string& devicePath) { + std::string slotPath, deviceName; + if (!re2::RE2::FullMatch(devicePath, kDevPathRegex, &slotPath, &deviceName)) { XLOG(ERR) << fmt::format("Invalid device path {}", devicePath); return false; } + CHECK_EQ(slotPath.back(), '/'); + if (slotPath.length() > 1) { + slotPath.pop_back(); + } + if (!isValidSlotPath(platformConfig, slotPath) || + !isValidDeviceName(platformConfig, slotPath, deviceName)) { + return false; + } return true; } +bool ConfigValidator::isValidSlotPath( + const PlatformConfig& platformConfig, + const std::string& slotPath) { + // Syntactic validation. + if (!re2::RE2::FullMatch(slotPath, kSlotPathRegex)) { + XLOG(ERR) << fmt::format("Invalid SlotPath format {}", slotPath); + return false; + } + + // Slot topological validation. + // Starting from the root, check for a PmUnit from CurrSlot to NextSlot. + auto slotNames = split(slotPath); + auto currSlotType = *platformConfig.rootSlotType(); + for (const auto& nextSlotName : slotNames) { + // Find all pmUnits that can be plug into currSlotType. + auto pmUnitConfigs = + getPmUnitConfigsBySlotType(platformConfig, currSlotType); + if (pmUnitConfigs.empty()) { + XLOG(ERR) << fmt::format( + "Couldn't find PmUnitConfigs that can be plug-into {} in SlotPath {}", + currSlotType, + slotPath); + return false; + } + // Find next SlotType from the found PmUnits' outgoingSlotConfig of + // nextSlotName to verify that PmUnit sits between CurrSlot and NextSlot. + auto nextSlotType = + pmUnitConfigs | ranges::views::filter([&](const auto& pmUnitConfig) { + return pmUnitConfig.outgoingSlotConfigs()->contains(nextSlotName); + }) | + ranges::views::transform([&](const auto& pmUnitConfig) -> SlotType { + return *pmUnitConfig.outgoingSlotConfigs() + ->at(nextSlotName) + .slotType(); + }) | + ranges::views::unique | ranges::to_vector; + if (nextSlotType.size() != 1) { + XLOG(ERR) << fmt::format( + "Invalid SlotName {}. It maps to {} SlotConfig(s)", + nextSlotName, + nextSlotType.size()); + return false; + } + currSlotType = nextSlotType.front(); + } + return true; +} + +bool ConfigValidator::isValidDeviceName( + const PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& deviceName) { + auto slotType = resolveSlotType(platformConfig, slotPath); + CHECK(slotType) << "SlotType must be nonnull"; + // If the device is IDPROM, search from the SlotTypeConfigs. + if (deviceName == "IDPROM") { + if (!platformConfig.slotTypeConfigs()->contains(*slotType)) { + XLOG(ERR) << fmt::format( + "Found no SlotTypeConfig for SlotType {}", *slotType); + return false; + } + const auto& slotTypeConfig = + platformConfig.slotTypeConfigs()->at(*slotType); + if (!slotTypeConfig.idpromConfig()) { + XLOG(ERR) << fmt::format( + "Unexpected IDPROM at SlotPath {}. IdpromConfig is not defined at {}", + slotPath, + *slotType); + return false; + } + return true; + } + // Otherwise, find all plugable PmUnitConfigs to the last Slot of the + // SlotPath. eagerly check if any has the given deviceName in its device + // configurations. + for (const auto& pmUnitConfig : + getPmUnitConfigsBySlotType(platformConfig, *slotType)) { + if (isDeviceMatch( + deviceName, + *pmUnitConfig.pciDeviceConfigs(), + *pmUnitConfig.i2cDeviceConfigs(), + *pmUnitConfig.embeddedSensorConfigs())) { + return true; + } + for (const auto& pciDeviceConfig : *pmUnitConfig.pciDeviceConfigs()) { + if (isDeviceMatch( + deviceName, + *pciDeviceConfig.i2cAdapterConfigs(), + *pciDeviceConfig.spiMasterConfigs(), + *pciDeviceConfig.fanTachoPwmConfigs(), + *pciDeviceConfig.ledCtrlConfigs(), + *pciDeviceConfig.xcvrCtrlConfigs(), + *pciDeviceConfig.spiMasterConfigs(), + *pciDeviceConfig.gpioChipConfigs(), + *pciDeviceConfig.watchdogConfigs(), + *pciDeviceConfig.infoRomConfigs(), + *pciDeviceConfig.miscCtrlConfigs())) { + return true; + } + } + } + // Couldn't find the matching deviceName. + XLOG(ERR) << fmt::format( + "Invalid DeviceName {} at SlotPath {}", deviceName, slotPath); + return false; +} + bool ConfigValidator::isValid(const PlatformConfig& config) { XLOG(INFO) << "Validating the config"; @@ -309,7 +531,7 @@ bool ConfigValidator::isValid(const PlatformConfig& config) { // Validate symbolic links for (const auto& [symlink, devicePath] : *config.symbolicLinkToDevicePath()) { - if (!isValidSymlink(symlink) || !isValidDevicePath(devicePath)) { + if (!isValidSymlink(symlink) || !isValidDevicePath(config, devicePath)) { return false; } } @@ -346,7 +568,21 @@ bool ConfigValidator::isValidPmUnitConfig( } // Validate SlotConfigs - for (const auto& [_, slotConfig] : *pmUnitConfig.outgoingSlotConfigs()) { + for (const auto& [slotName, slotConfig] : + *pmUnitConfig.outgoingSlotConfigs()) { + auto slotType = extractSlotType(slotName); + if (!slotType) { + XLOG(ERR) << fmt::format( + "Invalid SlotName format {}. Must follow @", slotName); + return false; + } + if (*slotType != *slotConfig.slotType()) { + XLOG(ERR) << fmt::format( + "SlotName must contain the SlotType {} instead contains {}", + *slotConfig.slotType(), + *slotType); + return false; + } if (!isValidSlotConfig(slotConfig)) { return false; } @@ -474,4 +710,25 @@ bool ConfigValidator::isValidBspKmodsRpmVersion( } return true; } + +bool ConfigValidator::isValidPmUnitName( + const PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& pmUnitName) { + if (!platformConfig.pmUnitConfigs()->contains(pmUnitName)) { + XLOG(ERR) << fmt::format("Undefined PmUnitConfig for {}", pmUnitName); + return false; + } + const auto& pmUnitConfig = platformConfig.pmUnitConfigs()->at(pmUnitName); + const auto slotType = resolveSlotType(platformConfig, slotPath); + if (!slotType || *slotType != *pmUnitConfig.pluggedInSlotType()) { + XLOG(ERR) << fmt::format( + "Unexpected SlotType {} for PmUnit {}. Expected SlotType {} ", + *slotType, + pmUnitName, + *pmUnitConfig.pluggedInSlotType()); + return false; + } + return true; +} } // namespace facebook::fboss::platform::platform_manager diff --git a/fboss/platform/platform_manager/ConfigValidator.h b/fboss/platform/platform_manager/ConfigValidator.h index 5b420236166ca..abee3baed8535 100644 --- a/fboss/platform/platform_manager/ConfigValidator.h +++ b/fboss/platform/platform_manager/ConfigValidator.h @@ -8,6 +8,7 @@ namespace facebook::fboss::platform::platform_manager { class ConfigValidator { public: + virtual ~ConfigValidator() = default; bool isValid(const PlatformConfig& platformConfig); bool isValidPmUnitConfig( const std::map& slotTypeConfigs, @@ -17,7 +18,9 @@ class ConfigValidator { bool isValidFpgaIpBlockConfig(const FpgaIpBlockConfig& fpgaIpBlockConfig); bool isValidPciDeviceConfig(const PciDeviceConfig& pciDeviceConfig); bool isValidI2cDeviceConfig(const I2cDeviceConfig& i2cDeviceConfig); - bool isValidDevicePath(const std::string& devicePath); + bool isValidDevicePath( + const PlatformConfig& platformConfig, + const std::string& devicePath); bool isValidSymlink(const std::string& symlink); bool isValidPresenceDetection(const PresenceDetection& presenceDetection); bool isValidSpiDeviceConfigs( @@ -26,6 +29,19 @@ class ConfigValidator { bool isValidVersionedPmConfigs( const std::map>& versionedPmUnitConfigs); + + // Used by other platform services config validation. + virtual bool isValidSlotPath( + const PlatformConfig& platformConfig, + const std::string& slotPath); + virtual bool isValidDeviceName( + const PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& deviceName); + virtual bool isValidPmUnitName( + const PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& pmUnitName); }; } // namespace facebook::fboss::platform::platform_manager diff --git a/fboss/platform/platform_manager/DevicePathResolver.cpp b/fboss/platform/platform_manager/DevicePathResolver.cpp index 90a77a16943b6..3a19b2f3911b9 100644 --- a/fboss/platform/platform_manager/DevicePathResolver.cpp +++ b/fboss/platform/platform_manager/DevicePathResolver.cpp @@ -106,12 +106,7 @@ std::string DevicePathResolver::resolvePciDevicePath( } const auto [slotPath, deviceName] = Utils().parseDevicePath(devicePath); auto pciDeviceConfig = getPciDeviceConfig(slotPath, deviceName); - auto pciDevice = PciDevice( - *pciDeviceConfig.pmUnitScopedName(), - *pciDeviceConfig.vendorId(), - *pciDeviceConfig.deviceId(), - *pciDeviceConfig.subSystemVendorId(), - *pciDeviceConfig.subSystemDeviceId()); + auto pciDevice = PciDevice(pciDeviceConfig); if (!fs::exists(pciDevice.sysfsPath())) { throw std::runtime_error( fmt::format("{} is not plugged-in to the platform", deviceName)); @@ -147,12 +142,7 @@ std::optional DevicePathResolver::resolvePresencePath( return *pciDeviceConfig.pmUnitScopedName() == deviceNameCopy; }); if (pciDeviceConfig != pmUnitConfig.pciDeviceConfigs()->end()) { - auto pciDevice = PciDevice( - *pciDeviceConfig->pmUnitScopedName(), - *pciDeviceConfig->vendorId(), - *pciDeviceConfig->deviceId(), - *pciDeviceConfig->subSystemVendorId(), - *pciDeviceConfig->subSystemDeviceId()); + auto pciDevice = PciDevice(*pciDeviceConfig); auto targetPath = std::filesystem::path(pciDevice.sysfsPath()); return targetPath / presenceFileName; } diff --git a/fboss/platform/platform_manager/Main.cpp b/fboss/platform/platform_manager/Main.cpp index 42acc81196216..3c3f5e65ccac3 100644 --- a/fboss/platform/platform_manager/Main.cpp +++ b/fboss/platform/platform_manager/Main.cpp @@ -8,6 +8,7 @@ #include #include "fboss/platform/helpers/Init.h" +#include "fboss/platform/platform_manager/ConfigUtils.h" #include "fboss/platform/platform_manager/PkgManager.h" #include "fboss/platform/platform_manager/PlatformManagerHandler.h" @@ -45,7 +46,7 @@ int main(int argc, char** argv) { fb303::registerFollyLoggingOptionHandlers(); helpers::init(&argc, &argv); - auto config = Utils().getConfig(); + auto config = ConfigUtils().getConfig(); PkgManager pkgManager(config); pkgManager.processAll(); diff --git a/fboss/platform/platform_manager/PciExplorer.cpp b/fboss/platform/platform_manager/PciExplorer.cpp index 10a974e1ce8aa..70d0c1e325929 100644 --- a/fboss/platform/platform_manager/PciExplorer.cpp +++ b/fboss/platform/platform_manager/PciExplorer.cpp @@ -50,39 +50,24 @@ fbiob_aux_data getAuxData( namespace facebook::fboss::platform::platform_manager { -PciDevice::PciDevice( - const std::string& name, - const std::string& vendorId, - const std::string& deviceId, - const std::string& subSystemVendorId, - const std::string& subSystemDeviceId) { - charDevPath_ = fmt::format( - "/dev/fbiob_{}.{}.{}.{}", - std::string(vendorId, 2, 4), - std::string(deviceId, 2, 4), - std::string(subSystemVendorId, 2, 4), - std::string(subSystemDeviceId, 2, 4)); - - if (!Utils().checkDeviceReadiness( - [&charDevPath_ = charDevPath_]() -> bool { - return fs::exists(charDevPath_); - }, - fmt::format( - "No character device found at {} for {}. Waiting for at most {}s", - charDevPath_, - name, - kPciWaitSecs.count()))) { - throw std::runtime_error(fmt::format( - "No character device found at {} for {}. This could either mean the " - "FPGA does not show up as PCI device (see lspci output), or the kmods " - "are not setting up the character device for the PCI device at {}.", - charDevPath_, - name, - charDevPath_)); +PciDevice::PciDevice(const PciDeviceConfig& pciDeviceConfig) + : name_(*pciDeviceConfig.pmUnitScopedName()), + vendorId_(*pciDeviceConfig.vendorId()), + deviceId_(*pciDeviceConfig.deviceId()), + subSystemVendorId_(*pciDeviceConfig.subSystemVendorId()), + subSystemDeviceId_(*pciDeviceConfig.subSystemDeviceId()) { + checkSysfsReadiness(); + + // Note: bindDriver() needs to be called after checkSysfsReadiness() but + // before checkCharDevReadiness(). + if (pciDeviceConfig.desiredDriver()) { + bindDriver(*pciDeviceConfig.desiredDriver()); } - XLOG(INFO) << fmt::format( - "Found character device {} for {}", charDevPath_, name); + checkCharDevReadiness(); +} + +void PciDevice::checkSysfsReadiness() { for (const auto& dirEntry : fs::directory_iterator("/sys/bus/pci/devices")) { std::string vendor, device, subSystemVendor, subSystemDevice; auto deviceFilePath = dirEntry.path() / "device"; @@ -103,27 +88,101 @@ PciDevice::PciDevice( XLOG(ERR) << "Failed to read subsystem_device file from " << dirEntry.path(); } - if (folly::trimWhitespace(vendor).str() == vendorId && - folly::trimWhitespace(device).str() == deviceId && - folly::trimWhitespace(subSystemVendor).str() == subSystemVendorId && - folly::trimWhitespace(subSystemDevice).str() == subSystemDeviceId) { + if (folly::trimWhitespace(vendor).str() == vendorId_ && + folly::trimWhitespace(device).str() == deviceId_ && + folly::trimWhitespace(subSystemVendor).str() == subSystemVendorId_ && + folly::trimWhitespace(subSystemDevice).str() == subSystemDeviceId_) { sysfsPath_ = dirEntry.path().string(); XLOG(INFO) << fmt::format( - "Found sysfs path {} for device {}", sysfsPath_, name); + "Found sysfs path {} for device {}", sysfsPath_, name_); + break; } } if (sysfsPath_.empty()) { throw std::runtime_error(fmt::format( "No sysfs path found for {} with vendorId: {}, deviceId: {}, " "subSystemVendorId: {}, subSystemDeviceId: {}", - name, - vendorId, - deviceId, - subSystemVendorId, - subSystemDeviceId)); + name_, + vendorId_, + deviceId_, + subSystemVendorId_, + subSystemDeviceId_)); } } +void PciDevice::bindDriver(const std::string& desiredDriver) { + // Don't do anything if a driver is already attached to the device: it + // usually happens when the device ID was already passed to "new_id" + // in the previous platform_manager runs. + // TODO: + // - what if the driver is different from "desiredDriver"? Shall we + // fail gracefully in this case? Or force detaching the driver and + // attach it to the desired one? Let's make decision when we hit + // the issue in the future. + auto curDriver = fmt::format("{}/driver", sysfsPath_); + if (fs::exists(curDriver)) { + XLOG(INFO) << fmt::format( + "Device {} already has a driver. Skipped manual driver binding", name_); + return; + } + + auto desiredDriverPath = + fmt::format("/sys/bus/pci/drivers/{}", desiredDriver); + if (!fs::exists(desiredDriverPath)) { + throw std::runtime_error(fmt::format( + "Failed to bind driver {} to device {}: {} does not exist", + desiredDriver, + name_, + desiredDriverPath)); + } + + // Add PCI device ID to the driver's "new_id" file. Check below doc for + // details: + // https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci + auto pciDevId = fmt::format( + "{} {} {} {}", + std::string(vendorId_, 2, 4), + std::string(deviceId_, 2, 4), + std::string(subSystemVendorId_, 2, 4), + std::string(subSystemDeviceId_, 2, 4)); + XLOG(INFO) << fmt::format( + "Pass {} device ID <{}> to {} driver's ID table", + name_, + pciDevId, + desiredDriver); + auto cmd = fmt::format("echo {} > {}/new_id", pciDevId, desiredDriverPath); + PlatformUtils().execCommand(cmd); +} + +void PciDevice::checkCharDevReadiness() { + charDevPath_ = fmt::format( + "/dev/fbiob_{}.{}.{}.{}", + std::string(vendorId_, 2, 4), + std::string(deviceId_, 2, 4), + std::string(subSystemVendorId_, 2, 4), + std::string(subSystemDeviceId_, 2, 4)); + + if (!Utils().checkDeviceReadiness( + [&charDevPath_ = charDevPath_]() -> bool { + return fs::exists(charDevPath_); + }, + fmt::format( + "No character device found at {} for {}. Waiting for at most {}s", + charDevPath_, + name_, + kPciWaitSecs.count()))) { + throw std::runtime_error(fmt::format( + "No character device found at {} for {}. This could either mean the " + "FPGA does not show up as PCI device (see lspci output), or the kmods " + "are not setting up the character device for the PCI device at {}.", + charDevPath_, + name_, + charDevPath_)); + } + XLOG(INFO) << fmt::format( + "Found character device {} for {}", charDevPath_, name_); +} + std::string PciDevice::sysfsPath() const { return sysfsPath_; } diff --git a/fboss/platform/platform_manager/PciExplorer.h b/fboss/platform/platform_manager/PciExplorer.h index ea56b73092d04..2c5650a7bb2be 100644 --- a/fboss/platform/platform_manager/PciExplorer.h +++ b/fboss/platform/platform_manager/PciExplorer.h @@ -11,22 +11,22 @@ namespace facebook::fboss::platform::platform_manager { struct PciDevice { public: - PciDevice( - const std::string& name, - const std::string& vendorId, - const std::string& deviceId, - const std::string& subSystemVendorId, - const std::string& subSystemDeviceId); + explicit PciDevice(const PciDeviceConfig& pciDevConfig); std::string sysfsPath() const; std::string charDevPath() const; private: + std::string name_{}; std::string vendorId_{}; std::string deviceId_{}; std::string subSystemVendorId_{}; std::string subSystemDeviceId_{}; std::string charDevPath_{}; std::string sysfsPath_{}; + + void checkSysfsReadiness(); + void bindDriver(const std::string& desiredDriver); + void checkCharDevReadiness(); }; class PciExplorer { diff --git a/fboss/platform/platform_manager/PlatformExplorer.cpp b/fboss/platform/platform_manager/PlatformExplorer.cpp index 61ab9161e7fd4..38110f092b70f 100644 --- a/fboss/platform/platform_manager/PlatformExplorer.cpp +++ b/fboss/platform/platform_manager/PlatformExplorer.cpp @@ -24,7 +24,8 @@ namespace facebook::fboss::platform::platform_manager { namespace { -constexpr auto kTotalFailures = "total_failures"; +constexpr auto kTotalFailures = "platform_explorer.total_failures"; +constexpr auto kExplorationFail = "platform_explorer.exploration_fail"; constexpr auto kRootSlotPath = "/"; std::string getSlotPath( @@ -59,7 +60,7 @@ std::optional pathExistsOr( // control characters, the string returned corresponds to an error. // // The version string is NOT parsed into integers, however, we will attempt to -// verify it matches XXX.YYY(.ZZZ) format and emit a WARN log if it does not. +// verify it matches XXX.YYY(.ZZZ) format and log if it does not. std::string readVersionString( const std::string& path, const facebook::fboss::platform::PlatformFsUtils* platformFsUtils) { @@ -79,7 +80,7 @@ std::string readVersionString( const auto versionString = versionFileContent.value(); if (versionString.empty()) { XLOGF(ERR, "Empty firmware version file {}", path); - return "ERROR_EMPTY_FILE"; + return PlatformExplorer::kFwVerErrorEmptyFile; } if (folly::hasSpaceOrCntrlSymbols(versionString)) { XLOGF( @@ -87,10 +88,12 @@ std::string readVersionString( "Firmware version string \"{}\" from file {} contains whitespace or control characters.", versionString, path); - return "ERROR_INVALID_STRING"; + return PlatformExplorer::kFwVerErrorInvalidString; } // These names are for ease of reference. Neither semver nor any other // interpretation is enforced in fw_ver. + // TODO: Revisit this when expanding coverage of fw_ver standardization, + // e.g. if we include EEPROMs or similar without XXX.YYY.ZZZ versions. int major = 0; int minor = 0; int patch = 0; @@ -99,47 +102,14 @@ std::string readVersionString( re2::RE2::FullMatch(versionString, kFwVerXYPattern, &major, &minor); if (!match) { XLOGF( - WARN, - "Firmware version string {} from file {} does not match XXX.YYY.ZZZ format. This may be OK if it's an expected checksum.", + ERR, + "Firmware version \"{}\" from file {} is not in XXX.YYY.ZZZ format.", versionString, path); } return versionString; } -// Read a singular version number from the file at given path. If there is any -// error reading the file, log and return a default of 0. The version number -// must be the first non-whitespace substring, but the file may contain -// additional non-numeric data after the version (e.g. human-readable comments). -// TODO: Handle info_rom cases (by standardizing them away, if possible). -int readVersionNumber( - const std::string& path, - const PlatformFsUtils* platformFsUtils) { - const auto versionFileContent = platformFsUtils->getStringFileContent(path); - if (!versionFileContent) { - // This log is necessary to distinguish read error vs reading "0". - XLOGF( - ERR, - "Failed to open firmware version file {}: {}", - path, - folly::errnoStr(errno)); - return 0; - } - // Note: stoi infers base (e.g. 0xF) when 0 is passed as the base argument as - // below. It also discards leading whitespace, and stops at non-digits. - try { - int version = stoi(versionFileContent.value(), nullptr, 0); - return version; - } catch (const std::exception& ex) { - XLOGF( - ERR, - "Failed to parse firmware version from file {}: {}", - path, - folly::exceptionStr(ex)); - return 0; - } -} - PlatformManagerStatus createPmStatus( const ExplorationStatus& explorationStatus, int64_t lastExplorationTime) { @@ -187,6 +157,11 @@ void PlatformExplorer::explore() { } publishFirmwareVersions(); auto explorationStatus = concludeExploration(); + fb303::fbData->setCounter( + kExplorationFail, + explorationStatus != ExplorationStatus::SUCCEEDED && + explorationStatus != + ExplorationStatus::SUCCEEDED_WITH_EXPECTED_ERRORS); updatePmStatus(createPmStatus( explorationStatus, std::chrono::duration_cast( @@ -478,12 +453,7 @@ void PlatformExplorer::explorePciDevices( const std::vector& pciDeviceConfigs) { for (const auto& pciDeviceConfig : pciDeviceConfigs) { try { - auto pciDevice = PciDevice( - *pciDeviceConfig.pmUnitScopedName(), - *pciDeviceConfig.vendorId(), - *pciDeviceConfig.deviceId(), - *pciDeviceConfig.subSystemVendorId(), - *pciDeviceConfig.subSystemDeviceId()); + auto pciDevice = PciDevice(pciDeviceConfig); auto charDevPath = pciDevice.charDevPath(); auto instId = getFpgaInstanceId(slotPath, *pciDeviceConfig.pmUnitScopedName()); @@ -683,12 +653,9 @@ ExplorationStatus PlatformExplorer::concludeExploration() { void PlatformExplorer::publishFirmwareVersions() { for (const auto& [linkPath, _] : *platformConfig_.symbolicLinkToDevicePath()) { - auto deviceType = ""; - if (linkPath.starts_with("/run/devmap/cplds")) { - deviceType = "cpld"; - } else if (linkPath.starts_with("/run/devmap/fpgas")) { - deviceType = "fpga"; - } else { + // TODO: Replace fpgas with inforoms when updating configs. + if (!linkPath.starts_with("/run/devmap/cplds") && + !linkPath.starts_with("/run/devmap/fpgas")) { continue; } std::vector linkPathParts; @@ -714,28 +681,11 @@ void PlatformExplorer::publishFirmwareVersions() { std::filesystem::path(linkPath) / "fw_ver", std::filesystem::path(linkPathHwmon) / "fw_ver", platformFsUtils_.get()); - std::optional verFilePath = pathExistsOr( - std::filesystem::path(linkPath) / fmt::format("{}_ver", deviceType), - std::filesystem::path(linkPathHwmon) / - fmt::format("{}_ver", deviceType), - platformFsUtils_.get()); - std::optional subVerFilePath = pathExistsOr( - std::filesystem::path(linkPath) / fmt::format("{}_sub_ver", deviceType), - std::filesystem::path(linkPathHwmon) / - fmt::format("{}_sub_ver", deviceType), - platformFsUtils_.get()); if (fwVerFilePath.has_value()) { versionString = readVersionString(fwVerFilePath.value(), platformFsUtils_.get()); - } else if (verFilePath.has_value() || subVerFilePath.has_value()) { - const int version = - readVersionNumber(verFilePath.value(), platformFsUtils_.get()); - const int subversion = - readVersionNumber(subVerFilePath.value(), platformFsUtils_.get()); - - versionString = fmt::format("{}.{}", version, subversion); } else { - versionString = "ERROR_FILE_NOT_FOUND"; + versionString = PlatformExplorer::kFwVerErrorFileNotFound; } XLOGF( diff --git a/fboss/platform/platform_manager/PlatformExplorer.h b/fboss/platform/platform_manager/PlatformExplorer.h index cc7fc718b98e4..9438bde4d525f 100644 --- a/fboss/platform/platform_manager/PlatformExplorer.h +++ b/fboss/platform/platform_manager/PlatformExplorer.h @@ -28,6 +28,10 @@ class PlatformExplorer { auto static constexpr kFirmwareVersion = "{}.firmware_version"; auto static constexpr kGroupedFirmwareVersion = "{}.firmware_version.{}"; + auto static constexpr kFwVerErrorFileNotFound = "ERROR_FILE_NOT_FOUND"; + auto static constexpr kFwVerErrorEmptyFile = "ERROR_EMPTY_FILE"; + auto static constexpr kFwVerErrorInvalidString = "ERROR_INVALID_STRING"; + explicit PlatformExplorer( const PlatformConfig& config, const std::shared_ptr platformFsUtils = diff --git a/fboss/platform/platform_manager/Utils.cpp b/fboss/platform/platform_manager/Utils.cpp index f132be64b6f57..d5cfc74b27810 100644 --- a/fboss/platform/platform_manager/Utils.cpp +++ b/fboss/platform/platform_manager/Utils.cpp @@ -3,19 +3,13 @@ #include "fboss/platform/platform_manager/Utils.h" #include -#include #include #include -#include #include #include -#include #include "fboss/lib/GpiodLine.h" -#include "fboss/platform/config_lib/ConfigLib.h" -#include "fboss/platform/helpers/PlatformNameLib.h" -#include "fboss/platform/platform_manager/ConfigValidator.h" namespace fs = std::filesystem; using namespace facebook::fboss::platform; @@ -30,69 +24,8 @@ const std::string kWatchdog = "watchdog"; } // namespace namespace facebook::fboss::platform::platform_manager { - -// Verify that the platform name from the config and dmidecode match. This -// is necessary to prevent an incorrect config from being used on any platform. -void verifyPlatformNameMatches( - const std::string& platformNameInConfig, - const std::string& platformNameFromBios) { - std::string platformNameInConfigUpper(platformNameInConfig); - std::transform( - platformNameInConfigUpper.begin(), - platformNameInConfigUpper.end(), - platformNameInConfigUpper.begin(), - ::toupper); - - if (platformNameInConfigUpper == platformNameFromBios) { - return; - } - -#ifndef IS_OSS - if (platformNameFromBios == "NOT SPECIFIED") { - XLOG(ERR) - << "Platform name is not specified in BIOS. Skipping comparison with config."; - return; - } -#endif - - XLOGF( - FATAL, - "Platform name in config does not match the inferred platform name from " - "bios. Config: {}, Inferred name from BIOS {} ", - platformNameInConfigUpper, - platformNameFromBios); -} - -PlatformConfig Utils::getConfig() { - std::string platformNameFromBios = - helpers::PlatformNameLib().getPlatformNameFromBios(true); - std::string configJson = - ConfigLib().getPlatformManagerConfig(platformNameFromBios); - PlatformConfig config; - try { - apache::thrift::SimpleJSONSerializer::deserialize( - configJson, config); - } catch (const std::exception& e) { - XLOG(ERR) << "Failed to deserialize platform config: " << e.what(); - throw; - } - XLOG(DBG2) << apache::thrift::SimpleJSONSerializer::serialize( - config); - - verifyPlatformNameMatches(*config.platformName(), platformNameFromBios); - - if (!ConfigValidator().isValid(config)) { - XLOG(ERR) << "Invalid platform config"; - throw std::runtime_error("Invalid platform config"); - } - return config; -} - std::pair Utils::parseDevicePath( const std::string& devicePath) { - if (!ConfigValidator().isValidDevicePath(devicePath)) { - throw std::runtime_error(fmt::format("Invalid DevicePath {}", devicePath)); - } std::string slotPath, deviceName; CHECK(RE2::FullMatch(devicePath, kPmDeviceParseRe, &slotPath, &deviceName)); // Remove trailling '/' (e.g /abc/dfg/) diff --git a/fboss/platform/platform_manager/Utils.h b/fboss/platform/platform_manager/Utils.h index 0a2e0ceb0bab5..8264e9394b7ae 100644 --- a/fboss/platform/platform_manager/Utils.h +++ b/fboss/platform/platform_manager/Utils.h @@ -4,18 +4,13 @@ #include #include -#include #include -#include "fboss/platform/platform_manager/gen-cpp2/platform_manager_config_types.h" - namespace facebook::fboss::platform::platform_manager { class Utils { public: virtual ~Utils() = default; - PlatformConfig getConfig(); - // Extract (SlotPath, DeviceName) from DevicePath. // Returns a pair of (SlotPath, DeviceName). Throws if DevicePath is invalid. // Eg: /MCB_SLOT@0/[IDPROM] will return std::pair("/MCB_SLOT@0", "IDPROM") diff --git a/fboss/platform/platform_manager/hw_test/BUCK b/fboss/platform/platform_manager/hw_test/BUCK index 2ab4984f1651c..f19e1e7044c5a 100644 --- a/fboss/platform/platform_manager/hw_test/BUCK +++ b/fboss/platform/platform_manager/hw_test/BUCK @@ -11,9 +11,9 @@ cpp_binary( "fbsource//third-party/fmt:fmt", "fbsource//third-party/googletest:gtest", "//fboss/platform/helpers:init", + "//fboss/platform/platform_manager:config_utils", "//fboss/platform/platform_manager:pkg_manager", "//fboss/platform/platform_manager:platform_manager_handler", - "//fboss/platform/platform_manager:utils", "//thrift/lib/cpp2/util:util", ], ) diff --git a/fboss/platform/platform_manager/hw_test/PlatformManagerHwTest.cpp b/fboss/platform/platform_manager/hw_test/PlatformManagerHwTest.cpp index e2af1c9c91c9b..ecd0f8920f918 100644 --- a/fboss/platform/platform_manager/hw_test/PlatformManagerHwTest.cpp +++ b/fboss/platform/platform_manager/hw_test/PlatformManagerHwTest.cpp @@ -7,9 +7,9 @@ #include #include "fboss/platform/helpers/Init.h" +#include "fboss/platform/platform_manager/ConfigUtils.h" #include "fboss/platform/platform_manager/PkgManager.h" #include "fboss/platform/platform_manager/PlatformManagerHandler.h" -#include "fboss/platform/platform_manager/Utils.h" namespace facebook::fboss::platform::platform_manager { namespace { @@ -57,7 +57,7 @@ class PlatformManagerHwTest : public ::testing::Test { } private: - PlatformConfig platformConfig_{Utils().getConfig()}; + PlatformConfig platformConfig_{ConfigUtils().getConfig()}; PkgManager pkgManager_{platformConfig_}; CustomPlatformExplorer platformExplorer_{platformConfig_}; std::unique_ptr> pmClient_{ diff --git a/fboss/platform/platform_manager/platform_manager_config.thrift b/fboss/platform/platform_manager/platform_manager_config.thrift index dbb84b839f1d1..60517e903620d 100644 --- a/fboss/platform/platform_manager/platform_manager_config.thrift +++ b/fboss/platform/platform_manager/platform_manager_config.thrift @@ -376,6 +376,11 @@ struct LedCtrlConfig { // `subSystemDeviceId`: PCIe Sub System Device ID, and it must be a 4-digit // hexadecimal value, such as “0011” // +// `desiredDriver`: The desired driver to support the device. The (optional) +// field allows the platform_manager to pass the device ID to the desired +// driver at run time (via "new_id" sysfs file), when the device ID cannot be +// included in the driver's static compiled-in ID table. +// // The remaining fields are configs per controller block in the FPGA // // TODO: Add MDIO support @@ -394,6 +399,7 @@ struct PciDeviceConfig { 12: list xcvrCtrlConfigs; 13: list infoRomConfigs; 14: list miscCtrlConfigs; + 15: optional string desiredDriver; } // These are the PmUnit slot types. Examples: "PIM_SLOT", "PSU_SLOT" and diff --git a/fboss/platform/platform_manager/tests/ConfigValidatorTest.cpp b/fboss/platform/platform_manager/tests/ConfigValidatorTest.cpp index 96c700ad311a6..c0b81d5dc98a3 100644 --- a/fboss/platform/platform_manager/tests/ConfigValidatorTest.cpp +++ b/fboss/platform/platform_manager/tests/ConfigValidatorTest.cpp @@ -128,6 +128,27 @@ TEST(ConfigValidatorTest, SlotConfig) { EXPECT_TRUE(ConfigValidator().isValidSlotConfig(slotConfig)); } +TEST(ConfigValidatorTest, OutgoingSlotConfig) { + std::map slotTypeConfigs = { + {"MCB_SLOT", SlotTypeConfig()}}; + PmUnitConfig pmUnitConfig; + pmUnitConfig.pluggedInSlotType() = "MCB_SLOT"; + SlotConfig smbSlotConfig; + smbSlotConfig.slotType() = "SMB_SLOT"; + // Valid OutgoingSlotConfig + pmUnitConfig.outgoingSlotConfigs() = {{"SMB_SLOT@0", smbSlotConfig}}; + EXPECT_TRUE( + ConfigValidator().isValidPmUnitConfig(slotTypeConfigs, pmUnitConfig)); + // Invalid SlotName format + pmUnitConfig.outgoingSlotConfigs() = {{"SMB_SLOT", smbSlotConfig}}; + EXPECT_FALSE( + ConfigValidator().isValidPmUnitConfig(slotTypeConfigs, pmUnitConfig)); + // Invalid unmatching SlotType; expect SMB_SLOT but has SCM_SLOT. + pmUnitConfig.outgoingSlotConfigs() = {{"SCM_SLOT@0", smbSlotConfig}}; + EXPECT_FALSE( + ConfigValidator().isValidPmUnitConfig(slotTypeConfigs, pmUnitConfig)); +} + TEST(ConfigValidatorTest, PresenceDetection) { auto presenceDetection = PresenceDetection(); EXPECT_FALSE(ConfigValidator().isValidPresenceDetection(presenceDetection)); @@ -310,18 +331,71 @@ TEST(ConfigValidatorTest, Symlink) { } TEST(ConfigValidatorTest, DevicePath) { - EXPECT_FALSE(ConfigValidator().isValidDevicePath("/[]")); - EXPECT_FALSE(ConfigValidator().isValidDevicePath("/SCM_SLOT@1/[a")); - EXPECT_FALSE(ConfigValidator().isValidDevicePath("/SMB_SLOT@1/SCM_SLOT/[a]")); - EXPECT_TRUE(ConfigValidator().isValidDevicePath("/[chassis_eeprom]")); - EXPECT_TRUE(ConfigValidator().isValidDevicePath("/SMB_SLOT@0/[MCB_MUX_1]")); - EXPECT_TRUE( - ConfigValidator().isValidDevicePath("/SMB_SLOT@0/SCM_SLOT@1/[sensor]")); - EXPECT_TRUE(ConfigValidator().isValidDevicePath("/SMB_FRU_SLOT@0/[idprom]")); + PlatformConfig config; + config.rootSlotType() = "MCB_SLOT"; + config.rootPmUnitName() = "MCB"; + PmUnitConfig mcb, jumper, scm; + // Define PmUnit's SlotType + mcb.pluggedInSlotType() = "MCB_SLOT"; + jumper.pluggedInSlotType() = "JUMPER_SLOT"; + scm.pluggedInSlotType() = "SCM_SLOT"; + // Define SlotConfig's SlotType + SlotConfig jumperSlotConfig, scmSlotConfig; + jumperSlotConfig.slotType() = "JUMPER_SLOT"; + scmSlotConfig.slotType() = "SCM_SLOT"; + // Define outgoingSlotConfigs + mcb.outgoingSlotConfigs() = { + {"JUMPER_SLOT@0", jumperSlotConfig}, {"JUMPER_SLOT@1", jumperSlotConfig}}; + jumper.outgoingSlotConfigs() = {{"SCM_SLOT@0", scmSlotConfig}}; + // Define devices + I2cDeviceConfig mcbMux; + mcbMux.pmUnitScopedName() = "MCB_MUX_A"; + mcb.i2cDeviceConfigs() = {mcbMux}; + EmbeddedSensorConfig jumperNvme; + jumperNvme.pmUnitScopedName() = "NVME"; + jumper.embeddedSensorConfigs() = {jumperNvme}; + PciDeviceConfig scmPci; + FpgaIpBlockConfig gpioChipFpgaIpBlock; + gpioChipFpgaIpBlock.pmUnitScopedName() = "SCM_FPGA_GPIO_1"; + scmPci.gpioChipConfigs() = {gpioChipFpgaIpBlock}; + LedCtrlConfig scmLedCtrl; + scmLedCtrl.fpgaIpBlockConfig() = FpgaIpBlockConfig(); + scmLedCtrl.fpgaIpBlockConfig()->pmUnitScopedName() = "SCM_SYS_LED"; + scmPci.ledCtrlConfigs() = {scmLedCtrl}; + scm.pciDeviceConfigs() = {scmPci}; + config.pmUnitConfigs() = {{"MCB", mcb}, {"JUMPER", jumper}, {"SCM", scm}}; + // Case-1 Syntatically incorrect + EXPECT_FALSE(ConfigValidator().isValidDevicePath(config, "/SCM_SLOT@1/[a")); + EXPECT_FALSE( + ConfigValidator().isValidDevicePath(config, "/SMB_SLOT@1/SCM_SLOT/[a]")); + EXPECT_FALSE(ConfigValidator().isValidDevicePath(config, "/[]")); + EXPECT_FALSE( + ConfigValidator().isValidDevicePath(config, "/COME@SCM_SLOT@0/[idprom]")); + EXPECT_FALSE(ConfigValidator().isValidDevicePath( + config, "/COME_SLOT@SCM_SLOT@0/[SCM_MUX_5]")); + // Case-2 Topologically incorrect SlotPath EXPECT_FALSE( - ConfigValidator().isValidDevicePath("/COME@SCM_SLOT@0/[idprom]")); + ConfigValidator().isValidDevicePath(config, "/SMB_SLOT@0/[sensor1]")); EXPECT_FALSE( - ConfigValidator().isValidDevicePath("/COME_SLOT@SCM_SLOT@0/[SCM_MUX_5]")); + ConfigValidator().isValidDevicePath(config, "/JUMPER_SLOT@2/[fpga]")); + EXPECT_FALSE(ConfigValidator().isValidDevicePath( + config, "/JUMPER_SLOT@0/SCM_SLOT@1/[IDPROM]")); + // Case-4 Topologically correct SlotPath, incorrect DeviceName + EXPECT_FALSE(ConfigValidator().isValidDevicePath(config, "/[sensor1]")); + EXPECT_FALSE( + ConfigValidator().isValidDevicePath(config, "/JUMPER_SLOT@0/[fpga]")); + EXPECT_FALSE(ConfigValidator().isValidDevicePath( + config, "/JUMPER_SLOT@0/SCM_SLOT@0/[IDPROM]")); + // Case-5 Corrects + EXPECT_TRUE(ConfigValidator().isValidDevicePath(config, "/[MCB_MUX_A]")); + EXPECT_TRUE( + ConfigValidator().isValidDevicePath(config, "/JUMPER_SLOT@0/[NVME]")); + EXPECT_TRUE( + ConfigValidator().isValidDevicePath(config, "/JUMPER_SLOT@1/[NVME]")); + EXPECT_TRUE(ConfigValidator().isValidDevicePath( + config, "/JUMPER_SLOT@0/SCM_SLOT@0/[SCM_SYS_LED]")); + EXPECT_TRUE(ConfigValidator().isValidDevicePath( + config, "/JUMPER_SLOT@0/SCM_SLOT@0/[SCM_FPGA_GPIO_1]")); } TEST(ConfigValidatorTest, BspRpm) { @@ -330,3 +404,20 @@ TEST(ConfigValidatorTest, BspRpm) { EXPECT_TRUE(ConfigValidator().isValidBspKmodsRpmVersion("5.4.6-1")); EXPECT_TRUE(ConfigValidator().isValidBspKmodsRpmVersion("11.44.63-14")); } + +TEST(ConfigValidatorTest, PmUnitName) { + PlatformConfig config; + config.rootSlotType() = "MCB_SLOT"; + // Invalid missing PmUnitConfig definition + EXPECT_FALSE( + ConfigValidator().isValidPmUnitName(config, "/SCM_SLOT@0", "SCM")); + // Define PmUnitConfig for SCM + PmUnitConfig scmConfig; + scmConfig.pluggedInSlotType() = "SCM_SLOT"; + config.pmUnitConfigs() = {{"SCM", scmConfig}}; + // Invalid unmatching SlotType MCB_SLOT vs SCM_SLOT + EXPECT_FALSE(ConfigValidator().isValidPmUnitName(config, "/", "SCM")); + // Valid PmUnitName + EXPECT_TRUE( + ConfigValidator().isValidPmUnitName(config, "/SCM_SLOT@0", "SCM")); +} diff --git a/fboss/platform/platform_manager/tests/PlatformExplorerTest.cpp b/fboss/platform/platform_manager/tests/PlatformExplorerTest.cpp index eaae0cdc306f0..a025569d6cbf5 100644 --- a/fboss/platform/platform_manager/tests/PlatformExplorerTest.cpp +++ b/fboss/platform/platform_manager/tests/PlatformExplorerTest.cpp @@ -13,18 +13,6 @@ using namespace facebook::fboss::platform; using namespace facebook::fboss::platform::platform_manager; namespace { -void writeVersions( - std::string path, - std::string deviceType, - const char* version, - const char* subversion, - const std::shared_ptr platformFsUtils) { - EXPECT_TRUE(platformFsUtils->writeStringToFile( - std::string(version), fmt::format("{}/{}_ver", path, deviceType))); - EXPECT_TRUE(platformFsUtils->writeStringToFile( - std::string(subversion), fmt::format("{}/{}_sub_ver", path, deviceType))); -} - void expectVersions(const char* deviceName, const char* versionString) { EXPECT_EQ( facebook::fb303::fbData->getCounter(fmt::format( @@ -41,25 +29,11 @@ TEST(PlatformExplorerTest, PublishFirmwareVersions) { auto tmpDir = folly::test::TemporaryDirectory(); auto platformFsUtils = std::make_shared(tmpDir.path().string()); - std::string fpgaPath = "/run/devmap/fpgas/TEST_IOB_FPGA"; - writeVersions(fpgaPath, "fpga", "1", "0", platformFsUtils); - std::string cpldPath = "/run/devmap/cplds/TEST_MCB_CPLD"; - writeVersions(cpldPath, "cpld", "0x4", "0xf", platformFsUtils); - std::string cpldPath2 = "/run/devmap/cplds/TEST_CPLD_MIXED"; - writeVersions(cpldPath2, "cpld", "0xf", "9", platformFsUtils); - std::string fpgaPathBadInt = "/run/devmap/fpgas/TEST_FPGA_BAD_INT"; - writeVersions(fpgaPathBadInt, "fpga", "a", " ", platformFsUtils); - std::string cpldHwmonPath = "/run/devmap/cplds/FAN0_CPLD"; - writeVersions( - cpldHwmonPath + "/hwmon/hwmon20", "cpld", "99", "99", platformFsUtils); - // New-style fw_ver file std::string fpgaFwVerPath = "/run/devmap/fpgas/TEST_FPGA_FWVER"; EXPECT_TRUE(platformFsUtils->writeStringToFile( "1.2", fmt::format("{}/fw_ver", fpgaFwVerPath))); - // fw_ver should be prioritized over old-style std::string cpldFwVerPath = "/run/devmap/cplds/TEST_CPLD_FWVER"; - writeVersions(cpldFwVerPath, "cpld", "999", "999", platformFsUtils); EXPECT_TRUE(platformFsUtils->writeStringToFile( "123.456.789", fmt::format("{}/fw_ver", cpldFwVerPath))); std::string cpldBadFwVerPath = "/run/devmap/cplds/TEST_CPLD_BADFWVER"; @@ -81,11 +55,6 @@ TEST(PlatformExplorerTest, PublishFirmwareVersions) { EXPECT_TRUE(platformFsUtils->createDirectories(fpgaNonePath)); PlatformConfig platformConfig; - platformConfig.symbolicLinkToDevicePath()[fpgaPath] = ""; - platformConfig.symbolicLinkToDevicePath()[cpldPath] = ""; - platformConfig.symbolicLinkToDevicePath()[cpldPath2] = ""; - platformConfig.symbolicLinkToDevicePath()[fpgaPathBadInt] = ""; - platformConfig.symbolicLinkToDevicePath()[cpldHwmonPath] = ""; platformConfig.symbolicLinkToDevicePath()[fpgaFwVerPath] = ""; platformConfig.symbolicLinkToDevicePath()[cpldFwVerPath] = ""; platformConfig.symbolicLinkToDevicePath()[cpldBadFwVerPath] = ""; @@ -96,18 +65,12 @@ TEST(PlatformExplorerTest, PublishFirmwareVersions) { PlatformExplorer explorer(platformConfig, platformFsUtils); explorer.publishFirmwareVersions(); - expectVersions("TEST_IOB_FPGA", "1.0"); - expectVersions("TEST_MCB_CPLD", "4.15"); - expectVersions("TEST_CPLD_MIXED", "15.9"); - expectVersions("TEST_FPGA_BAD_INT", "0.0"); - expectVersions("FAN0_CPLD", "99.99"); - expectVersions("TEST_FPGA_FWVER", "1.2"); expectVersions("TEST_CPLD_FWVER", "123.456.789"); expectVersions("TEST_CPLD_BADFWVER", "ERROR_INVALID_STRING"); expectVersions("FAN0_CPLD_FWVER", "1.2.3"); expectVersions("TAHAN_SMB_CPLD_TRAP", "7.8.9"); - expectVersions("NONE", "ERROR_FILE_NOT_FOUND"); + expectVersions("NONE", PlatformExplorer::kFwVerErrorFileNotFound); } } // namespace facebook::fboss::platform::platform_manager diff --git a/fboss/platform/platform_manager/tests/UtilsTest.cpp b/fboss/platform/platform_manager/tests/UtilsTest.cpp index 9ef9358d0d56c..e7176cca9ece5 100644 --- a/fboss/platform/platform_manager/tests/UtilsTest.cpp +++ b/fboss/platform/platform_manager/tests/UtilsTest.cpp @@ -1,7 +1,5 @@ // (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. -#include - #include #include "fboss/platform/platform_manager/Utils.h" @@ -27,7 +25,7 @@ TEST(UtilsTest, ParseDevicePath) { EXPECT_EQ( makeDevicePathPair("/MCB_SLOT@0/SMB_SLOT@11", "SMB_IOB_I2C_1"), Utils().parseDevicePath("/MCB_SLOT@0/SMB_SLOT@11/[SMB_IOB_I2C_1]")); - EXPECT_THROW(Utils().parseDevicePath("ABCDE/[abc]"), std::runtime_error); - EXPECT_THROW(Utils().parseDevicePath("/MCB_SLOT/[abc]"), std::runtime_error); - EXPECT_THROW(Utils().parseDevicePath("/MCB_SLOT@1/[]"), std::runtime_error); + EXPECT_NO_THROW(Utils().parseDevicePath("ABCDE/[abc]")); + EXPECT_NO_THROW(Utils().parseDevicePath("/MCB_SLOT/[abc]")); + EXPECT_NO_THROW(Utils().parseDevicePath("/MCB_SLOT@1/[]")); } diff --git a/fboss/platform/rackmon/ModbusDevice.cpp b/fboss/platform/rackmon/ModbusDevice.cpp index 139e80dfc8e08..0d671ccb3c847 100644 --- a/fboss/platform/rackmon/ModbusDevice.cpp +++ b/fboss/platform/rackmon/ModbusDevice.cpp @@ -1,7 +1,5 @@ // Copyright 2021-present Facebook. All Rights Reserved. #include "ModbusDevice.h" -#include -#include #include "Log.h" using nlohmann::json; diff --git a/fboss/platform/rackmon/UARTDevice.cpp b/fboss/platform/rackmon/UARTDevice.cpp index 88bdd3613f7e1..9a5f3782d1cab 100644 --- a/fboss/platform/rackmon/UARTDevice.cpp +++ b/fboss/platform/rackmon/UARTDevice.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include diff --git a/fboss/platform/rackmon/hw_test/BUCK b/fboss/platform/rackmon/hw_test/BUCK index 182d770869d6c..7393112ba13b6 100644 --- a/fboss/platform/rackmon/hw_test/BUCK +++ b/fboss/platform/rackmon/hw_test/BUCK @@ -24,7 +24,6 @@ cpp_binary( "//thrift/lib/cpp2/util:util", ], external_deps = [ - "gflags", "glog", ], ) diff --git a/fboss/platform/rackmon/hw_test/Main.cpp b/fboss/platform/rackmon/hw_test/Main.cpp index 25d6e10d78516..eeb1f77861d43 100644 --- a/fboss/platform/rackmon/hw_test/Main.cpp +++ b/fboss/platform/rackmon/hw_test/Main.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include "fboss/platform/helpers/Init.h" diff --git a/fboss/platform/rackmon/tests/DeviceTest.cpp b/fboss/platform/rackmon/tests/DeviceTest.cpp index 9aa08d8139de1..6df6615f24dc7 100644 --- a/fboss/platform/rackmon/tests/DeviceTest.cpp +++ b/fboss/platform/rackmon/tests/DeviceTest.cpp @@ -2,7 +2,6 @@ #include "Device.h" #include #include -#include #include #include #include "TempDir.h" diff --git a/fboss/platform/sensor_service/BUCK b/fboss/platform/sensor_service/BUCK index 26e3f3dd6de57..b8ec4227ac44b 100644 --- a/fboss/platform/sensor_service/BUCK +++ b/fboss/platform/sensor_service/BUCK @@ -67,6 +67,7 @@ cpp_library( "//fboss/platform/config_lib:config_lib", "//fboss/platform/helpers:platform_name_lib", "//fboss/platform/sensor_service/if:sensor_config-cpp2-types", + "//folly/logging:logging", ], exported_external_deps = [ "re2", @@ -103,6 +104,8 @@ cpp_library( ], exported_deps = [ "fbsource//third-party/fmt:fmt", + "//fboss/platform/platform_manager:config_validator", + "//fboss/platform/platform_manager:utils", "//fboss/platform/sensor_service/if:sensor_config-cpp2-types", "//folly/logging:logging", ], @@ -122,7 +125,6 @@ cpp_binary( "//fb303:logging", "//fboss/platform/helpers:init", "//folly/executors:function_scheduler", - "//folly/logging:init", ], ) @@ -168,6 +170,8 @@ cpp_binary( srcs = [ "SensorServicePlainTextClient.cpp", ], + default_strip_mode = "full", + strip_mode = "full", deps = [ "//fboss/platform/helpers:init", "//fboss/platform/sensor_service/if:sensor_service-cpp2-clients", diff --git a/fboss/platform/sensor_service/ConfigValidator.cpp b/fboss/platform/sensor_service/ConfigValidator.cpp index 90cd312d35ae8..9f1c79d5f9dc2 100644 --- a/fboss/platform/sensor_service/ConfigValidator.cpp +++ b/fboss/platform/sensor_service/ConfigValidator.cpp @@ -6,74 +6,174 @@ #include #include +#include "fboss/platform/platform_manager/Utils.h" + namespace facebook::fboss::platform::sensor_service { using namespace sensor_config; namespace { -// For more info, see below -// https://github.com/facebook/fboss/blob/main/fboss/platform/platform_manager/platform_manager_config.thrift#L73 -const re2::RE2 kSlotPathRe = "/|(/([A-Z]+_)+SLOT@\\d+)+"; -} // namespace +const re2::RE2 kSensorSymlinkRegex{"(?P/run/devmap/sensors/.+)(/.+)+"}; +}; // namespace -bool ConfigValidator::isValid(const SensorConfig& sensorConfig) { - for (std::unordered_set usedSlotPaths; - const auto& pmUnitSensors : *sensorConfig.pmUnitSensorsList()) { - if (!isValidPmUnitSensors(pmUnitSensors, usedSlotPaths)) { - return false; - } - } - return true; -} +ConfigValidator::ConfigValidator( + const std::shared_ptr& pmConfigValidator) + : pmConfigValidator_(pmConfigValidator) {} -bool ConfigValidator::isValidPmUnitSensors( - const PmUnitSensors& pmUnitSensors, - std::unordered_set& usedSlotPaths) { - if (pmUnitSensors.slotPath()->empty()) { - XLOG(ERR) << "SlotPath in PmUnitSensor must be non-empty"; +bool ConfigValidator::isValid( + const SensorConfig& sensorConfig, + const std::optional& platformConfig) { + if (!isValidPmUnitSensorsList(*sensorConfig.pmUnitSensorsList())) { return false; } - if (!isValidSlotPath(*pmUnitSensors.slotPath())) { - return false; + // This is Darwin if platformConfig=std::nullopt + // Until it onboards PM, we can't cross-validate against PM. + if (!platformConfig) { + return true; } - if (usedSlotPaths.contains(*pmUnitSensors.slotPath())) { - XLOG(ERR) << fmt::format( - "SlotPath {} is a duplicate", *pmUnitSensors.slotPath()); + // Cross-validation agains platform_manager::ConfigValidator. + if (!isPmValidPmUnitSensorList( + *platformConfig, *sensorConfig.pmUnitSensorsList())) { return false; } - usedSlotPaths.emplace(*pmUnitSensors.slotPath()); - for (std::unordered_set usedSensorNames; - const auto& pmSensor : *pmUnitSensors.sensors()) { - if (!isValidPmSensor(pmSensor, usedSensorNames)) { + return true; +} + +bool ConfigValidator::isValidPmUnitSensorsList( + const std::vector& pmUnitSensorsList) { + std::unordered_set> usedSlotPaths; + for (const auto& pmUnitSensors : pmUnitSensorsList) { + if (usedSlotPaths.contains( + {*pmUnitSensors.slotPath(), *pmUnitSensors.pmUnitName()})) { + XLOG(ERR) << fmt::format( + "(SlotPath {}, PmUnitName {}) is a duplicate", + *pmUnitSensors.slotPath(), + *pmUnitSensors.pmUnitName()); + return false; + } + usedSlotPaths.insert( + {*pmUnitSensors.slotPath(), *pmUnitSensors.pmUnitName()}); + if (!isValidPmSensors(*pmUnitSensors.sensors())) { return false; } + for (const auto& versionedPmSensor : *pmUnitSensors.versionedSensors()) { + if (!isValidPmSensors(*versionedPmSensor.sensors())) { + return false; + } + } } return true; } -bool ConfigValidator::isValidPmSensor( - const PmSensor& pmSensor, - std::unordered_set& usedSensorNames) { - if (pmSensor.name()->empty()) { - XLOG(ERR) << "PmSensor name must be non-empty"; - return false; +bool ConfigValidator::isValidPmSensors(const std::vector& pmSensors) { + std::unordered_set usedSensorNames; + for (const auto& pmSensor : pmSensors) { + if (pmSensor.name()->empty()) { + XLOG(ERR) << "PmSensor name must be non-empty"; + return false; + } + if (usedSensorNames.contains(*pmSensor.name())) { + XLOG(ERR) << fmt::format( + "SensorName {} is a duplicate", *pmSensor.name()); + return false; + } + usedSensorNames.emplace(*pmSensor.name()); + if (!pmSensor.sysfsPath()->starts_with("/run/devmap/sensors/")) { + XLOG(ERR) << "PmSensor sysfsPath must start with /run/devmap/sensors/"; + return false; + } } - if (usedSensorNames.contains(*pmSensor.name())) { - XLOG(ERR) << fmt::format("SensorName {} is a duplicate", *pmSensor.name()); - return false; + return true; +} + +bool ConfigValidator::isPmValidPmUnitSensorList( + const platform_manager::PlatformConfig& platformConfig, + const std::vector& pmUnitSensorsList) { + for (const auto& pmUnitSensors : pmUnitSensorsList) { + if (!pmConfigValidator_->isValidSlotPath( + platformConfig, *pmUnitSensors.slotPath())) { + return false; + } + if (!pmConfigValidator_->isValidPmUnitName( + platformConfig, + *pmUnitSensors.slotPath(), + *pmUnitSensors.pmUnitName())) { + return false; + } + if (!isPmValidPmSensors( + platformConfig, + *pmUnitSensors.slotPath(), + *pmUnitSensors.sensors())) { + return false; + } + if (!pmUnitSensors.versionedSensors()->empty() && + !isPmValidVersionedPmSensors( + platformConfig, + *pmUnitSensors.slotPath(), + *pmUnitSensors.pmUnitName(), + *pmUnitSensors.versionedSensors())) { + return false; + } } - usedSensorNames.emplace(*pmSensor.name()); - if (!pmSensor.sysfsPath()->starts_with("/run/devmap/sensors/")) { - XLOG(ERR) << "PmSensor sysfsPath must start with /run/devmap/sensors/"; - return false; + return true; +} + +bool ConfigValidator::isPmValidPmSensors( + const platform_manager::PlatformConfig& platformConfig, + const std::string& pmUnitSensorsSlotPath, + const std::vector& pmSensors) { + for (const auto& pmSensor : pmSensors) { + std::string symlink; + if (!re2::RE2::FullMatch( + *pmSensor.sysfsPath(), kSensorSymlinkRegex, &symlink)) { + XLOG(ERR) << fmt::format( + "Fail to extract sensor symlink from {}", *pmSensor.sysfsPath()); + return false; + } + if (!platformConfig.symbolicLinkToDevicePath()->contains(symlink)) { + XLOG(ERR) << fmt::format( + "{} is not defined in PlatformConfig::symbolicLinkToDevicePath", + symlink); + return false; + } + auto [slotPath, deviceName] = platform_manager::Utils().parseDevicePath( + platformConfig.symbolicLinkToDevicePath()->at(symlink)); + if (pmUnitSensorsSlotPath != slotPath) { + XLOG(ERR) << fmt::format( + "PmUnitSensors SlotPath {} doesn't match with SlotPath {} of {}", + pmUnitSensorsSlotPath, + slotPath, + symlink); + return false; + } + if (!pmConfigValidator_->isValidDeviceName( + platformConfig, pmUnitSensorsSlotPath, deviceName)) { + return false; + } } return true; } -bool ConfigValidator::isValidSlotPath(const std::string& slotPath) { - if (!re2::RE2::FullMatch(slotPath, kSlotPathRe)) { - XLOG(ERR) << fmt::format("SlotPath {} is invalid", slotPath); +bool ConfigValidator::isPmValidVersionedPmSensors( + const platform_manager::PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& pmUnitName, + const std::vector& versionedPmSensors) { + const auto& pmUnitConfig = platformConfig.pmUnitConfigs()->at(pmUnitName); + const auto& slotTypeConfig = + platformConfig.slotTypeConfigs()->at(*pmUnitConfig.pluggedInSlotType()); + if (!slotTypeConfig.idpromConfig() && !versionedPmSensors.empty()) { + XLOG(ERR) << fmt::format( + "Unexpected VersionedSensors definition for PmUnit {} at {} " + "where IDPROM is not present.", + pmUnitName, + slotPath); return false; } + for (const auto& versionedPmSensor : versionedPmSensors) { + if (!isPmValidPmSensors( + platformConfig, slotPath, *versionedPmSensor.sensors())) { + return false; + } + } return true; } - } // namespace facebook::fboss::platform::sensor_service diff --git a/fboss/platform/sensor_service/ConfigValidator.h b/fboss/platform/sensor_service/ConfigValidator.h index 63469ca83ba2b..652d00595e224 100644 --- a/fboss/platform/sensor_service/ConfigValidator.h +++ b/fboss/platform/sensor_service/ConfigValidator.h @@ -2,19 +2,40 @@ #pragma once +#include "fboss/platform/platform_manager/ConfigValidator.h" #include "fboss/platform/sensor_service/if/gen-cpp2/sensor_config_types.h" namespace facebook::fboss::platform::sensor_service { class ConfigValidator { public: - bool isValid(const sensor_config::SensorConfig& sensorConfig); - bool isValidPmUnitSensors( - const sensor_config::PmUnitSensors& PmUnitSensors, - std::unordered_set& usedSlotPaths); - bool isValidPmSensor( - const sensor_config::PmSensor& pmSensor, - std::unordered_set& usedSensorNames); + ConfigValidator( + const std::shared_ptr& + pmConfigValidator = + std::make_shared()); + bool isValid( + const sensor_config::SensorConfig& sensorConfig, + const std::optional& platformConfig); + // Local validation + bool isValidPmUnitSensorsList( + const std::vector& pmUnitSensorsList); + bool isValidPmSensors(const std::vector& pmSensor); bool isValidSlotPath(const std::string& slotPath); + // PlatformManager validation + bool isPmValidPmUnitSensorList( + const platform_manager::PlatformConfig& platformConfig, + const std::vector& pmUnitSensorsList); + bool isPmValidPmSensors( + const platform_manager::PlatformConfig& platformConfig, + const std::string& pmUnitSensorsSlotPath, + const std::vector& pmSensors); + bool isPmValidVersionedPmSensors( + const platform_manager::PlatformConfig& platformConfig, + const std::string& slotPath, + const std::string& pmUnitName, + const std::vector& versionedPmSensors); + + private: + const std::shared_ptr pmConfigValidator_; }; } // namespace facebook::fboss::platform::sensor_service diff --git a/fboss/platform/sensor_service/Main.cpp b/fboss/platform/sensor_service/Main.cpp index 04bf6e27f13a0..94aa5ca61a5f1 100644 --- a/fboss/platform/sensor_service/Main.cpp +++ b/fboss/platform/sensor_service/Main.cpp @@ -2,7 +2,6 @@ // All Rights Reserved. #include #include -#include #include "fboss/platform/helpers/Init.h" #include "fboss/platform/sensor_service/Flags.h" diff --git a/fboss/platform/sensor_service/PmClientFactory.cpp b/fboss/platform/sensor_service/PmClientFactory.cpp index 386e87cded762..e70d0ad794f58 100644 --- a/fboss/platform/sensor_service/PmClientFactory.cpp +++ b/fboss/platform/sensor_service/PmClientFactory.cpp @@ -2,7 +2,6 @@ #include "fboss/platform/sensor_service/PmClientFactory.h" -#include #include #include #include diff --git a/fboss/platform/sensor_service/Utils.cpp b/fboss/platform/sensor_service/Utils.cpp index a39071eac4c7a..e6310d1035c0d 100644 --- a/fboss/platform/sensor_service/Utils.cpp +++ b/fboss/platform/sensor_service/Utils.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include "fboss/platform/config_lib/ConfigLib.h" @@ -15,36 +16,36 @@ namespace facebook::fboss::platform::sensor_service { namespace { -// Compare the two array reprsentation of -// productionState,productVersion,productSubVersion. -// Return true if l1 >= l2, false otherwise. -bool greaterEqual( - std::array l1, - std::array l2, - uint8_t i = 0) { - if (i == 3) { - return true; - } - if (l1[i] > l2[i]) { - return true; +// Strict weak ordering of VersionedSensorComparator(lhs,rhs) +// Returns true if lhs > rhs, false otherwise. +struct { + bool operator()( + const std::array& l1, + const std::array& l2, + uint8_t i = 0) { + if (i == 3) { + return false; + } + if (l1[i] > l2[i]) { + return true; + } + if (l1[i] < l2[i]) { + return false; + } + return (*this)(l1, l2, ++i); } - if (l1[i] < l2[i]) { - return false; + bool operator()( + const VersionedPmSensor& vSensor1, + const VersionedPmSensor& vSensor2) { + return (*this)( + {*vSensor1.productProductionState(), + *vSensor1.productVersion(), + *vSensor1.productSubVersion()}, + {*vSensor2.productProductionState(), + *vSensor2.productVersion(), + *vSensor2.productSubVersion()}); } - return greaterEqual(l1, l2, ++i); -} -// Same as above greaterEqual except it takes VersionedPmSensor -bool greaterEqual( - const VersionedPmSensor& vSensor1, - const VersionedPmSensor& vSensor2) { - return greaterEqual( - {*vSensor1.productProductionState(), - *vSensor1.productVersion(), - *vSensor1.productSubVersion()}, - {*vSensor2.productProductionState(), - *vSensor2.productVersion(), - *vSensor2.productSubVersion()}); -} +} VersionedSensorComparator; } // namespace uint64_t Utils::nowInSecs() { @@ -80,39 +81,51 @@ float Utils::computeExpression( std::optional Utils::resolveVersionedSensors( const PmUnitInfoFetcher& fetcher, const std::string& slotPath, - const std::vector& versionedSensors) { + std::vector versionedSensors) { if (versionedSensors.empty()) { return std::nullopt; } + // Sort in a descending order. + std::sort( + versionedSensors.begin(), + versionedSensors.end(), + VersionedSensorComparator); const auto pmUnitInfo = fetcher.fetch(slotPath); + // Use the latest PmUnitInfo as the best effort because eventually the latest + // respins will only be deployed to DC. So more merits to tailor towards them + // with an assumption that latest respions will mainly be in the DC. if (!pmUnitInfo) { - return std::nullopt; + XLOG(INFO) << fmt::format( + "Fail to fetch PmUnitInfo at {} from PlatformManager. " + "Fall back to the latest VersionedPmSensor", + slotPath); + return versionedSensors.front(); } - std::optional resolvedVersionedSensor{std::nullopt}; for (const auto& versionedSensor : versionedSensors) { - if (greaterEqual( - *pmUnitInfo, + // Find a VersionedSensor that satisfies fetched PmUnitInfo version. + // i.e. PmUnitInfo version >= VersionedSensor sensor + if (!VersionedSensorComparator( {*versionedSensor.productProductionState(), *versionedSensor.productVersion(), - *versionedSensor.productSubVersion()})) { - resolvedVersionedSensor = std::max( - versionedSensor, - // Default VersionedPmSensor if null i.e (0,0,0) - resolvedVersionedSensor.value_or(VersionedPmSensor{}), - [](const auto& vSensor1, const auto& vSensor2) { - return !greaterEqual(vSensor1, vSensor2); - }); + *versionedSensor.productSubVersion()}, + *pmUnitInfo)) { + XLOG(INFO) << fmt::format( + "Resolved to VersionedPmSensor of version {}.{}.{}", + *versionedSensor.productProductionState(), + *versionedSensor.productVersion(), + *versionedSensor.productSubVersion()); + return versionedSensor; } } - return resolvedVersionedSensor; + return std::nullopt; } SensorConfig Utils::getConfig() { auto platformName = helpers::PlatformNameLib().getPlatformName(); - SensorConfig sensorConfig; - apache::thrift::SimpleJSONSerializer::deserialize( - ConfigLib().getSensorServiceConfig(platformName), sensorConfig); - if (!ConfigValidator().isValid(sensorConfig)) { + SensorConfig sensorConfig = + apache::thrift::SimpleJSONSerializer::deserialize( + ConfigLib().getSensorServiceConfig(platformName)); + if (!ConfigValidator().isValid(sensorConfig, std::nullopt)) { throw std::runtime_error("Invalid sensor config"); } return sensorConfig; diff --git a/fboss/platform/sensor_service/Utils.h b/fboss/platform/sensor_service/Utils.h index 4c5fb8e9a9dfb..f30f3ad72c11a 100644 --- a/fboss/platform/sensor_service/Utils.h +++ b/fboss/platform/sensor_service/Utils.h @@ -30,7 +30,7 @@ class Utils { std::optional resolveVersionedSensors( const PmUnitInfoFetcher& fetcher, const std::string& slotPath, - const std::vector& versionedSensors); + std::vector versionedSensors); SensorConfig getConfig(); }; diff --git a/fboss/platform/sensor_service/hw_test/BUCK b/fboss/platform/sensor_service/hw_test/BUCK index f8e9a8a285139..8408e37d3667c 100644 --- a/fboss/platform/sensor_service/hw_test/BUCK +++ b/fboss/platform/sensor_service/hw_test/BUCK @@ -15,7 +15,6 @@ cpp_binary( "//fboss/platform/sensor_service:utils", "//fboss/platform/sensor_service/if:sensor_service-cpp2-services", "//folly/init:init", - "//thrift/lib/cpp2/protocol:protocol", "//thrift/lib/cpp2/util:util", ], ) diff --git a/fboss/platform/sensor_service/hw_test/SensorServiceHwTest.cpp b/fboss/platform/sensor_service/hw_test/SensorServiceHwTest.cpp index 0211173712b7c..739e521f50433 100644 --- a/fboss/platform/sensor_service/hw_test/SensorServiceHwTest.cpp +++ b/fboss/platform/sensor_service/hw_test/SensorServiceHwTest.cpp @@ -11,7 +11,6 @@ #include "fboss/platform/sensor_service/hw_test/SensorServiceHwTest.h" #include -#include #include #include "fboss/platform/helpers/Init.h" diff --git a/fboss/platform/sensor_service/test/ConfigValidatorTest.cpp b/fboss/platform/sensor_service/test/ConfigValidatorTest.cpp deleted file mode 100644 index c0798bcad32e7..0000000000000 --- a/fboss/platform/sensor_service/test/ConfigValidatorTest.cpp +++ /dev/null @@ -1,71 +0,0 @@ -// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. - -#include - -#include "fboss/platform/sensor_service/ConfigValidator.h" - -using namespace ::testing; -using namespace facebook::fboss::platform::sensor_service; -using namespace facebook::fboss::platform::sensor_config; -namespace { -PmSensor createPmSensor(const std::string& name, const std::string& sysfsPath) { - PmSensor pmSensor; - pmSensor.name() = name; - pmSensor.sysfsPath() = sysfsPath; - return pmSensor; -} -} // namespace - -TEST(ConfigValidatorTest, ValidConfig) { - auto config = SensorConfig(); - PmUnitSensors pmUnitSensors1, pmUnitSensors2; - pmUnitSensors1.slotPath() = "/"; - pmUnitSensors1.sensors() = { - createPmSensor("sensor1", "/run/devmap/sensors/CPU_CORE_TEMP")}; - pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; - pmUnitSensors1.sensors() = { - createPmSensor("sensor2", "/run/devmap/sensors/BCB_FAN_CPLD")}; - config.pmUnitSensorsList() = {pmUnitSensors1, pmUnitSensors2}; - EXPECT_TRUE(ConfigValidator().isValid(config)); -} - -TEST(ConfigValidatorTest, SlotPaths) { - // Valid - EXPECT_TRUE(ConfigValidator().isValidSlotPath("/")); - EXPECT_TRUE(ConfigValidator().isValidSlotPath("/FAN_SLOT@0")); - EXPECT_TRUE(ConfigValidator().isValidSlotPath("/FAN_SLOT@110")); - EXPECT_TRUE(ConfigValidator().isValidSlotPath("/BCB_SLOT@0/FAN_SLOT@1")); - // Invalid - EXPECT_FALSE(ConfigValidator().isValidSlotPath("/ ")); - EXPECT_FALSE(ConfigValidator().isValidSlotPath("/INVALID")); - EXPECT_FALSE(ConfigValidator().isValidSlotPath("/SLOT@0")); - EXPECT_FALSE(ConfigValidator().isValidSlotPath("/BCB_SLOT@0FAN_SLOT@1")); - // Can't have a trailing / - EXPECT_FALSE(ConfigValidator().isValidSlotPath("/BCB_SLOT@0/")); - // Duplicate - SensorConfig config; - PmUnitSensors pmUnitSensors1, pmUnitSensors2; - pmUnitSensors1.slotPath() = "/BCB_SLOT@0"; - pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; - config.pmUnitSensorsList() = {pmUnitSensors1, pmUnitSensors2}; - EXPECT_FALSE(ConfigValidator().isValid(config)); -} - -TEST(ConfigValidatorTest, InvalidPmSensors) { - auto config = SensorConfig(); - PmUnitSensors pmUnitSensors; - pmUnitSensors.slotPath() = "/BCB_SLOT@0"; - pmUnitSensors.sensors() = { - createPmSensor("", "/run/devmap/sensors/CPU_CORE_TEMP")}; - config.pmUnitSensorsList() = {pmUnitSensors}; - EXPECT_FALSE(ConfigValidator().isValid(config)); - pmUnitSensors.sensors() = { - createPmSensor("sensor1", "/run/devmap/eeproms/BCB_EEPROMS")}; - config.pmUnitSensorsList() = {pmUnitSensors}; - EXPECT_FALSE(ConfigValidator().isValid(config)); - pmUnitSensors.sensors() = { - createPmSensor("sensor1", "/run/devmap/sensors/CPU_CORE_TEMP"), - createPmSensor("sensor1", "/run/devmap/sensors/CPU_CORE_TEMP2")}; - config.pmUnitSensorsList() = {pmUnitSensors}; - EXPECT_FALSE(ConfigValidator().isValid(config)); -} diff --git a/fboss/platform/sensor_service/test/BUCK b/fboss/platform/sensor_service/tests/BUCK similarity index 96% rename from fboss/platform/sensor_service/test/BUCK rename to fboss/platform/sensor_service/tests/BUCK index a4b6376405458..ca21dec756571 100644 --- a/fboss/platform/sensor_service/test/BUCK +++ b/fboss/platform/sensor_service/tests/BUCK @@ -52,6 +52,7 @@ cpp_unittest( "ConfigValidatorTest.cpp", ], deps = [ + "fbsource//third-party/googletest:gmock", "//fboss/platform/sensor_service:config_validator", ], ) diff --git a/fboss/platform/sensor_service/tests/ConfigValidatorTest.cpp b/fboss/platform/sensor_service/tests/ConfigValidatorTest.cpp new file mode 100644 index 0000000000000..ff526185c8824 --- /dev/null +++ b/fboss/platform/sensor_service/tests/ConfigValidatorTest.cpp @@ -0,0 +1,231 @@ +// (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. + +#include +#include + +#include "fboss/platform/sensor_service/ConfigValidator.h" + +using namespace ::testing; +using namespace facebook::fboss::platform; +using namespace facebook::fboss::platform::sensor_service; +using namespace facebook::fboss::platform::sensor_config; +namespace { +PmSensor createPmSensor(const std::string& name, const std::string& sysfsPath) { + PmSensor pmSensor; + pmSensor.name() = name; + pmSensor.sysfsPath() = sysfsPath; + return pmSensor; +} +} // namespace +class MockPmConfigValidator : public platform_manager::ConfigValidator { + public: + MockPmConfigValidator() : platform_manager::ConfigValidator() {} + MOCK_METHOD( + bool, + isValidSlotPath, + (const platform_manager::PlatformConfig&, const std::string&)); + MOCK_METHOD( + bool, + isValidDeviceName, + (const platform_manager::PlatformConfig&, + const std::string&, + const std::string&)); + MOCK_METHOD( + bool, + isValidPmUnitName, + (const platform_manager::PlatformConfig&, + const std::string&, + const std::string&)); +}; + +class ConfigValidatorTest : public testing::Test { + public: + void SetUp() override {} + + std::shared_ptr mockPmConfigValidator_{ + std::make_shared()}; + ConfigValidator configValidator_{mockPmConfigValidator_}; + platform_manager::PlatformConfig platformConfig_; +}; + +TEST_F(ConfigValidatorTest, ValidConfig) { + // Sensor Config set up + auto config = SensorConfig(); + PmUnitSensors pmUnitSensors1, pmUnitSensors2; + pmUnitSensors1.slotPath() = "/"; + pmUnitSensors1.pmUnitName() = "MCB"; + pmUnitSensors1.sensors() = { + createPmSensor("sensor1", "/run/devmap/sensors/CPU_CORE_TEMP/input1")}; + pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors2.pmUnitName() = "BCB"; + pmUnitSensors2.sensors() = { + createPmSensor("sensor2", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3")}; + VersionedPmSensor versionedSensors2; + versionedSensors2.sensors() = { + createPmSensor("sensor3", "/run/devmap/sensors/BCB_FAN_CPLD/pwm4")}; + pmUnitSensors2.versionedSensors() = {versionedSensors2}; + config.pmUnitSensorsList() = {pmUnitSensors1, pmUnitSensors2}; + // PM config set up + platform_manager::SlotTypeConfig bcbSlotTypeConfig; + bcbSlotTypeConfig.idpromConfig() = platform_manager::IdpromConfig(); + platformConfig_.slotTypeConfigs() = { + {"MCB_SLOT", platform_manager::SlotTypeConfig()}, + {"BCB_SLOT", bcbSlotTypeConfig}}; + platform_manager::PmUnitConfig mcbPmUnitConfig, bcbPmUnitConfig; + mcbPmUnitConfig.pluggedInSlotType() = "MCB_SLOT"; + bcbPmUnitConfig.pluggedInSlotType() = "BCB_SLOT"; + platformConfig_.pmUnitConfigs() = { + {"MCB", mcbPmUnitConfig}, {"BCB", bcbPmUnitConfig}}; + platformConfig_.symbolicLinkToDevicePath() = { + {"/run/devmap/sensors/CPU_CORE_TEMP", "/[CPU_CORE_TEMP]"}, + {"/run/devmap/sensors/BCB_FAN_CPLD", "/BCB_SLOT@0/[BCB_FAN_CPLD]"}}; + EXPECT_CALL(*mockPmConfigValidator_, isValidSlotPath(_, _)) + .Times(2 /* # of PmUnitSensors*/) + .WillRepeatedly(Return(true)); + EXPECT_CALL(*mockPmConfigValidator_, isValidPmUnitName(_, _, _)) + .Times(2 /* # of PmUnitSensors*/) + .WillRepeatedly(Return(true)); + EXPECT_CALL(*mockPmConfigValidator_, isValidDeviceName(_, _, _)) + .Times(3 /* # of PmSensors*/) + .WillRepeatedly(Return(true)); + EXPECT_TRUE(configValidator_.isValid(config, platformConfig_)); +} + +TEST_F(ConfigValidatorTest, ValidConfigForDarwin) { + EXPECT_CALL(*mockPmConfigValidator_, isValidSlotPath(_, _)).Times(0); + auto config = SensorConfig(); + PmUnitSensors pmUnitSensors1, pmUnitSensors2; + pmUnitSensors1.slotPath() = "/"; + pmUnitSensors1.sensors() = { + createPmSensor("sensor1", "/run/devmap/sensors/CPU_CORE_TEMP/input1")}; + pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors2.sensors() = { + createPmSensor("sensor2", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3")}; + config.pmUnitSensorsList() = {pmUnitSensors1, pmUnitSensors2}; + EXPECT_TRUE(configValidator_.isValid(config, std::nullopt)); +} + +TEST_F(ConfigValidatorTest, ValidPmUnitSensors) { + SensorConfig config; + PmUnitSensors pmUnitSensors1, pmUnitSensors2; + pmUnitSensors1.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors1.pmUnitName() = "BCB"; + pmUnitSensors1.sensors() = {}; + pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors2.pmUnitName() = "BCB2"; + pmUnitSensors2.sensors() = {}; + // Valid PmUnitSensors + EXPECT_TRUE(configValidator_.isValidPmUnitSensorsList( + {pmUnitSensors1, pmUnitSensors2})); + // Invalid PmUnitSensors -- Duplicate (SlotPath, PmUnitName) Pairing + pmUnitSensors2.pmUnitName() = "BCB"; + EXPECT_FALSE(configValidator_.isValidPmUnitSensorsList( + {pmUnitSensors1, pmUnitSensors2})); +} + +TEST_F(ConfigValidatorTest, PmValidPmUnitSensors) { + SensorConfig config; + PmUnitSensors pmUnitSensors1, pmUnitSensors2; + pmUnitSensors1.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors1.pmUnitName() = "BCB"; + pmUnitSensors1.sensors() = {}; + pmUnitSensors2.slotPath() = "/BCB_SLOT@0"; + pmUnitSensors2.pmUnitName() = "BCB2"; + pmUnitSensors2.sensors() = {}; + // PmValid PmUnitSensors + EXPECT_CALL( + *mockPmConfigValidator_, isValidSlotPath(platformConfig_, "/BCB_SLOT@0")) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_CALL( + *mockPmConfigValidator_, + isValidPmUnitName(platformConfig_, "/BCB_SLOT@0", _)) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_TRUE(configValidator_.isPmValidPmUnitSensorList( + platformConfig_, {pmUnitSensors1, pmUnitSensors2})); + // Invalid PmUnitSensors -- Invalid SlotPath + EXPECT_CALL( + *mockPmConfigValidator_, isValidSlotPath(platformConfig_, "/BCB_SLOT@0")) + .WillOnce(Return(false)); + EXPECT_FALSE(configValidator_.isPmValidPmUnitSensorList( + platformConfig_, {pmUnitSensors1, pmUnitSensors2})); + // Invalid PmUnitSensors -- Invalid PmUnitName + EXPECT_CALL( + *mockPmConfigValidator_, isValidSlotPath(platformConfig_, "/BCB_SLOT@0")) + .WillOnce(Return(true)); + EXPECT_CALL( + *mockPmConfigValidator_, + isValidPmUnitName(platformConfig_, "/BCB_SLOT@0", _)) + .WillOnce(Return(false)); + EXPECT_FALSE(configValidator_.isPmValidPmUnitSensorList( + platformConfig_, {pmUnitSensors1, pmUnitSensors2})); +} + +TEST_F(ConfigValidatorTest, ValidPmSensors) { + // Invalid PmSensor -- Empty sensor name + EXPECT_FALSE(configValidator_.isValidPmSensors( + {createPmSensor("", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3")})); + // Invalid PmSensor -- Invalid sysfs path + EXPECT_FALSE(configValidator_.isValidPmSensors( + {createPmSensor("sensor1", "/run/devmap/eeproms/BCB_EEPROMS/xyz")})); + // Invalid PmSensor -- Duplicate sensor name + EXPECT_FALSE(configValidator_.isValidPmSensors( + {createPmSensor("sensor1", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3"), + createPmSensor( + "sensor1", "/run/devmap/sensors/BCB_FAN_CPLD2/fan_input")})); + // Valid PmSensor + EXPECT_TRUE(configValidator_.isValidPmSensors( + {createPmSensor("sensor1", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3"), + createPmSensor( + "sensor2", "/run/devmap/sensors/BCB_FAN_CPLD2/fan_input")})); +} + +TEST_F(ConfigValidatorTest, PmValidPmSensors) { + const auto slotPath = "/BCB_SLOT@0"; + const auto pmSensors = { + createPmSensor("sensor1", "/run/devmap/sensors/BCB_FAN_CPLD/pwm3"), + createPmSensor("sensor2", "/run/devmap/sensors/BCB_FAN_CPLD2/fan_input")}; + // Invalid PmSensor -- Unmatching SlotPaths for BCB_FAN_CPLD2 + platformConfig_.symbolicLinkToDevicePath() = { + {"/run/devmap/sensors/BCB_FAN_CPLD", "/BCB_SLOT@0/[BCB_FAN_CPLD]"}, + {"/run/devmap/sensors/BCB_FAN_CPLD2", "/[BCB_FAN_CPLD2]"}}; + EXPECT_CALL(*mockPmConfigValidator_, isValidDeviceName(platformConfig_, _, _)) + .WillOnce(Return(true)); + EXPECT_FALSE(configValidator_.isPmValidPmSensors( + platformConfig_, slotPath, pmSensors)); + // Invalid PmSensor -- Invalid Device Topology + platformConfig_.symbolicLinkToDevicePath() = { + {"/run/devmap/sensors/BCB_FAN_CPLD", "/BCB_SLOT@0/[BCB_FAN_CPLD]"}, + {"/run/devmap/sensors/BCB_FAN_CPLD2", "/BCB_SLOT@0/[BCB_FAN_CPLD2]"}}; + EXPECT_CALL(*mockPmConfigValidator_, isValidDeviceName(platformConfig_, _, _)) + .WillOnce(Return(false)); + EXPECT_FALSE(configValidator_.isPmValidPmSensors( + platformConfig_, slotPath, pmSensors)); + // Valid PmSensor + EXPECT_CALL(*mockPmConfigValidator_, isValidDeviceName(platformConfig_, _, _)) + .Times(2) + .WillRepeatedly(Return(true)); + EXPECT_TRUE(configValidator_.isPmValidPmSensors( + platformConfig_, slotPath, pmSensors)); +} + +TEST_F(ConfigValidatorTest, PmValidVersionedPmSensors) { + platform_manager::SlotTypeConfig bcbSlotTypeConfig; + bcbSlotTypeConfig.idpromConfig() = platform_manager::IdpromConfig(); + platformConfig_.slotTypeConfigs() = { + {"MCB_SLOT", platform_manager::SlotTypeConfig()}, + {"BCB_SLOT", bcbSlotTypeConfig}}; + platform_manager::PmUnitConfig mcbPmUnitConfig, bcbPmUnitConfig; + mcbPmUnitConfig.pluggedInSlotType() = "MCB_SLOT"; + bcbPmUnitConfig.pluggedInSlotType() = "BCB_SLOT"; + platformConfig_.pmUnitConfigs() = { + {"MCB", mcbPmUnitConfig}, {"BCB", bcbPmUnitConfig}}; + + // Invalid VersionedPmSensors -- Defined for PmUnit without IDPROM + EXPECT_FALSE(configValidator_.isPmValidVersionedPmSensors( + platformConfig_, "/", "MCB", {VersionedPmSensor()})); + // Valid VersionedPmSensors + EXPECT_TRUE(configValidator_.isPmValidVersionedPmSensors( + platformConfig_, "/BCB_SLOT@0", "BCB", {VersionedPmSensor()})); +} diff --git a/fboss/platform/sensor_service/test/SensorServiceImplTest.cpp b/fboss/platform/sensor_service/tests/SensorServiceImplTest.cpp similarity index 98% rename from fboss/platform/sensor_service/test/SensorServiceImplTest.cpp rename to fboss/platform/sensor_service/tests/SensorServiceImplTest.cpp index 1665dc32a4b46..6fb03b16eb567 100644 --- a/fboss/platform/sensor_service/test/SensorServiceImplTest.cpp +++ b/fboss/platform/sensor_service/tests/SensorServiceImplTest.cpp @@ -11,7 +11,7 @@ #include "fboss/platform/config_lib/ConfigLib.h" #include "fboss/platform/sensor_service/SensorServiceImpl.h" #include "fboss/platform/sensor_service/Utils.h" -#include "fboss/platform/sensor_service/test/TestUtils.h" +#include "fboss/platform/sensor_service/tests/TestUtils.h" using namespace facebook::fboss::platform::sensor_service; diff --git a/fboss/platform/sensor_service/test/SensorServiceThriftHandlerTest.cpp b/fboss/platform/sensor_service/tests/SensorServiceThriftHandlerTest.cpp similarity index 97% rename from fboss/platform/sensor_service/test/SensorServiceThriftHandlerTest.cpp rename to fboss/platform/sensor_service/tests/SensorServiceThriftHandlerTest.cpp index 0b86053f022f2..ccca043b71051 100644 --- a/fboss/platform/sensor_service/test/SensorServiceThriftHandlerTest.cpp +++ b/fboss/platform/sensor_service/tests/SensorServiceThriftHandlerTest.cpp @@ -6,7 +6,7 @@ #include #include "fboss/platform/sensor_service/SensorServiceThriftHandler.h" -#include "fboss/platform/sensor_service/test/TestUtils.h" +#include "fboss/platform/sensor_service/tests/TestUtils.h" namespace facebook::fboss::platform::sensor_service { diff --git a/fboss/platform/sensor_service/test/TestUtils.cpp b/fboss/platform/sensor_service/tests/TestUtils.cpp similarity index 97% rename from fboss/platform/sensor_service/test/TestUtils.cpp rename to fboss/platform/sensor_service/tests/TestUtils.cpp index 42ffe8618831c..ecb6e5bea150e 100644 --- a/fboss/platform/sensor_service/test/TestUtils.cpp +++ b/fboss/platform/sensor_service/tests/TestUtils.cpp @@ -5,7 +5,7 @@ #include #include "fboss/platform/config_lib/ConfigLib.h" -#include "fboss/platform/sensor_service/test/TestUtils.h" +#include "fboss/platform/sensor_service/tests/TestUtils.h" using namespace facebook::fboss::platform::sensor_service; diff --git a/fboss/platform/sensor_service/test/TestUtils.h b/fboss/platform/sensor_service/tests/TestUtils.h similarity index 100% rename from fboss/platform/sensor_service/test/TestUtils.h rename to fboss/platform/sensor_service/tests/TestUtils.h diff --git a/fboss/platform/sensor_service/test/UtilsTest.cpp b/fboss/platform/sensor_service/tests/UtilsTest.cpp similarity index 90% rename from fboss/platform/sensor_service/test/UtilsTest.cpp rename to fboss/platform/sensor_service/tests/UtilsTest.cpp index 2ff1f1f3ed485..7c4c6eeeb41e5 100644 --- a/fboss/platform/sensor_service/test/UtilsTest.cpp +++ b/fboss/platform/sensor_service/tests/UtilsTest.cpp @@ -60,12 +60,15 @@ TEST_F(UtilsTests, PmUnitInfoFetcherTest) { // Case-0: Empty version config EXPECT_EQ( Utils().resolveVersionedSensors(fetcher_, slotPath_, {}), std::nullopt); - // Case-1: Non existence PmUnitInfo (e.g no IDPROM) + // Case-1: Fail to fetch PmUnitInfo EXPECT_CALL(fetcher_, fetch(_)).WillOnce(Return(std::nullopt)); - EXPECT_EQ( - Utils().resolveVersionedSensors( - fetcher_, slotPath_, {createVersionedPmSensor(1, 1, 2)}), - std::nullopt); + resolvedVersionedSensor = Utils().resolveVersionedSensors( + fetcher_, + slotPath_, + {createVersionedPmSensor(1, 1, 2), createVersionedPmSensor(2, 0, 1)}); + EXPECT_NE(resolvedVersionedSensor, std::nullopt); + EXPECT_TRUE( + isEqual(*resolvedVersionedSensor, createVersionedPmSensor(2, 0, 1))); // Case-2: Non-matching VersionedPmSensor EXPECT_CALL(fetcher_, fetch(_)) .WillOnce(Return(std::array{1, 0, 20})); @@ -92,7 +95,7 @@ TEST_F(UtilsTests, PmUnitInfoFetcherTest) { isEqual(*resolvedVersionedSensor, createVersionedPmSensor(1, 1, 4))); // Case-4: Matching Unordered VersionedPmSensors EXPECT_CALL(fetcher_, fetch(_)) - .WillOnce(Return(std::array{3, 1, 20})); + .WillOnce(Return(std::array{2, 4, 10})); resolvedVersionedSensor = Utils().resolveVersionedSensors( fetcher_, slotPath_, @@ -101,6 +104,6 @@ TEST_F(UtilsTests, PmUnitInfoFetcherTest) { createVersionedPmSensor(2, 3, 20)}); EXPECT_NE(resolvedVersionedSensor, std::nullopt); EXPECT_TRUE( - isEqual(*resolvedVersionedSensor, createVersionedPmSensor(3, 1, 20))); + isEqual(*resolvedVersionedSensor, createVersionedPmSensor(2, 3, 20))); } } // namespace facebook::fboss::platform::sensor_service diff --git a/fboss/platform/weutil/BUCK b/fboss/platform/weutil/BUCK index 1cb248999f355..5107ba61e040f 100644 --- a/fboss/platform/weutil/BUCK +++ b/fboss/platform/weutil/BUCK @@ -17,9 +17,6 @@ cpp_library( ], exported_deps = [ ":fboss_eeprom_lib", - ":ioctl_smbus_eeprom_reader", - "//fboss/lib/platforms:platform_mode", - "//fboss/lib/platforms:product-info", "//fboss/platform/config_lib:config_lib", "//fboss/platform/helpers:platform_name_lib", "//fboss/platform/helpers:platform_utils", diff --git a/fboss/platform/weutil/FbossEepromParser.cpp b/fboss/platform/weutil/FbossEepromParser.cpp index eb65b7fa05aca..3cb9427005f51 100644 --- a/fboss/platform/weutil/FbossEepromParser.cpp +++ b/fboss/platform/weutil/FbossEepromParser.cpp @@ -113,6 +113,35 @@ const std::vector kFieldDictionaryV5 = { {250, "CRC16", FIELD_BE_HEX, 2, VARIABLE}, }; +const std::vector kFieldDictionaryV6 = { + {0, "NA", FIELD_LE_UINT, -1, -1}, // TypeCode 0 is reserved + {1, "Product Name", FIELD_STRING, VARIABLE, VARIABLE}, + {2, "Product Part Number", FIELD_STRING, VARIABLE, VARIABLE}, + {3, "System Assembly Part Number", FIELD_STRING, 8, VARIABLE}, + {4, "Meta PCBA Part Number", FIELD_STRING, 12, VARIABLE}, + {5, "Meta PCB Part Number", FIELD_STRING, 12, VARIABLE}, + {6, "ODM/JDM PCBA Part Number", FIELD_STRING, VARIABLE, VARIABLE}, + {7, "ODM/JDM PCBA Serial Number", FIELD_STRING, VARIABLE, VARIABLE}, + {8, "Product Production State", FIELD_BE_UINT, 1, VARIABLE}, + {9, "Product Version", FIELD_BE_UINT, 1, VARIABLE}, + {10, "Product Sub-Version", FIELD_BE_UINT, 1, VARIABLE}, + {11, "Product Serial Number", FIELD_STRING, VARIABLE, VARIABLE}, + {12, "System Manufacturer", FIELD_STRING, VARIABLE, VARIABLE}, + {13, "System Manufacturing Date", FIELD_STRING, 8, VARIABLE}, + {14, "PCB Manufacturer", FIELD_STRING, VARIABLE, VARIABLE}, + {15, "Assembled At", FIELD_STRING, VARIABLE, VARIABLE}, + {16, "EEPROM location on Fabric", FIELD_STRING, VARIABLE, VARIABLE}, + {17, "X86 CPU MAC", FIELD_V5_MAC, 8, VARIABLE}, + {18, "BMC MAC", FIELD_V5_MAC, 8, VARIABLE}, + {19, "Switch ASIC MAC", FIELD_V5_MAC, 8, VARIABLE}, + {20, "META Reserved MAC", FIELD_V5_MAC, 8, VARIABLE}, + {21, "RMA", FIELD_BE_UINT, 1, VARIABLE}, + {101, "Vendor Defined Field 1", FIELD_BE_HEX, VARIABLE, VARIABLE}, + {102, "Vendor Defined Field 2", FIELD_BE_HEX, VARIABLE, VARIABLE}, + {103, "Vendor Defined Field 3", FIELD_BE_HEX, VARIABLE, VARIABLE}, + {250, "CRC16", FIELD_BE_HEX, 2, VARIABLE}, +}; + // Header size in EEPROM. First two bytes are 0xFBFB followed // by a byte specifying the EEPROM version and one byte of 0xFF constexpr int kHeaderSize = 4; @@ -131,6 +160,10 @@ std::vector getEepromFieldDict(int version) { break; case 5: return kFieldDictionaryV5; + break; + case 6: + return kFieldDictionaryV6; + break; default: throw std::runtime_error( "Invalid EEPROM version : " + std::to_string(version)); @@ -177,6 +210,7 @@ FbossEepromParser::getContents() { break; case 4: case 5: + case 6: parsedValue = parseEepromBlobTLV( eepromVer, buffer, std::min(readCount, kMaxEepromSize)); break; diff --git a/fboss/platform/weutil/Weutil.cpp b/fboss/platform/weutil/Weutil.cpp index 649ffde173b62..84cbcbaa0f6f3 100644 --- a/fboss/platform/weutil/Weutil.cpp +++ b/fboss/platform/weutil/Weutil.cpp @@ -1,12 +1,9 @@ // (c) Facebook, Inc. and its affiliates. Confidential and proprietary. #include "fboss/platform/weutil/Weutil.h" -#include "fboss/platform/weutil/IoctlSmbusEepromReader.h" #include #include -#include "fboss/lib/platforms/PlatformMode.h" -#include "fboss/lib/platforms/PlatformProductInfo.h" #include "fboss/platform/config_lib/ConfigLib.h" #include "fboss/platform/helpers/PlatformNameLib.h" #include "fboss/platform/weutil/WeutilDarwin.h" @@ -55,16 +52,6 @@ weutil_config::FruEepromConfig getFruEepromConfig( return itr->second; } -std::optional getPlatformType() { - try { - facebook::fboss::PlatformProductInfo prodInfo{FLAGS_fruid_filepath}; - prodInfo.initialize(); - return prodInfo.getType(); - } catch (std::exception& e) { - XLOG(ERR) << "Failed to get platform type: " << e.what(); - return std::nullopt; - } -} } // namespace std::vector getEepromPaths() { @@ -87,18 +74,18 @@ std::unique_ptr createWeUtilIntf( const std::string& eepromName, const std::string& eepromPath, const int eepromOffset) { - auto platform = getPlatformType(); - + auto platformName = helpers::PlatformNameLib().getPlatformName(); + bool isDarwin = platformName && *platformName == "DARWIN"; // When path is specified, read from it directly. For platform bringup, we can // use the --path and --offset options without a valid config. if (!eepromPath.empty()) { - if (platform && platform.value() == PlatformType::PLATFORM_DARWIN) { + if (isDarwin) { return std::make_unique(eepromPath); } else { return std::make_unique(eepromPath, eepromOffset); } } - if (!platform) { + if (!platformName) { throw std::runtime_error( "Unable to determine platform type. Use the --path option"); } @@ -110,7 +97,7 @@ std::unique_ptr createWeUtilIntf( } else { fruEepromConfig = getFruEepromConfig(eepromName, thriftConfig); } - if (platform.value() == PlatformType::PLATFORM_DARWIN) { + if (isDarwin) { return std::make_unique(*fruEepromConfig.path()); } else { return std::make_unique( diff --git a/fboss/platform/weutil/main.cpp b/fboss/platform/weutil/main.cpp index f545f52e698f9..2ff7102058430 100644 --- a/fboss/platform/weutil/main.cpp +++ b/fboss/platform/weutil/main.cpp @@ -11,7 +11,6 @@ #include "fboss/platform/helpers/InitCli.h" #include "fboss/platform/weutil/Weutil.h" -#include "fboss/platform/weutil/WeutilDarwin.h" using namespace facebook::fboss::platform; using namespace facebook::fboss; diff --git a/fboss/platform/weutil/test/FbossEepromParserTest.cpp b/fboss/platform/weutil/test/FbossEepromParserTest.cpp index 30baec0387955..fa4209b166f55 100644 --- a/fboss/platform/weutil/test/FbossEepromParserTest.cpp +++ b/fboss/platform/weutil/test/FbossEepromParserTest.cpp @@ -56,7 +56,7 @@ EepromContents expectedContentsV4 = { }; // Based on the Spec for V5 EEPROM: -// https://docs.google.com/document/d/1KX6q2mHSjFU2-eDt5HGidWSRXm5vFfAaZvdOG890eXY +// https://github.com/facebook/fboss/blob/main/fboss/docs/meta_eeprom_format_v5.md EepromData eepromV5 = { 0xfb, 0xfb, 0x05, 0xff, 0x01, 0x0d, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x53, 0x51, 0x55, 0x45, 0x45, 0x5a, 0x45, 0x02, 0x08, 0x32, 0x30, 0x31, @@ -107,7 +107,7 @@ EepromContents expectedContentsV5 = { {"CRC16", "0xd5c6 (CRC Matched)"}, }; -// EEORM V5 with wrong CRC Programmed (same as the one above, but last 2 bytes +// EEPROM V5 with wrong CRC Programmed (same as the one above, but last 2 bytes // have wrong CRC value programmed.) EepromData eepromV5WrongCrc = { 0xfb, 0xfb, 0x05, 0xff, 0x01, 0x0d, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, @@ -159,9 +159,68 @@ EepromContents expectedContentsV5WrongCrc = { {"CRC16", "0xa6b7 (CRC Mismatch. Expected 0xd5c6)"}, }; +// Based on the Spec for V6 EEPROM: +// https://github.com/facebook/fboss/blob/main/fboss/docs/meta_eeprom_format_v6.md +EepromData eepromV6 = { + 0xfb, 0xfb, 0x06, 0xff, 0x01, 0x0d, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, + 0x53, 0x51, 0x55, 0x45, 0x45, 0x5a, 0x45, 0x02, 0x08, 0x32, 0x30, 0x31, + 0x32, 0x33, 0x34, 0x35, 0x36, 0x03, 0x08, 0x53, 0x59, 0x53, 0x41, 0x31, + 0x32, 0x33, 0x34, 0x04, 0x0c, 0x50, 0x43, 0x42, 0x41, 0x31, 0x32, 0x33, + 0x34, 0x35, 0x36, 0x37, 0x20, 0x05, 0x0c, 0x50, 0x43, 0x42, 0x31, 0x32, + 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x20, 0x06, 0x0c, 0x4d, 0x59, 0x4f, + 0x44, 0x4d, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x07, 0x0d, 0x4f, + 0x53, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, + 0x08, 0x01, 0x01, 0x09, 0x01, 0x00, 0x0a, 0x01, 0x01, 0x0b, 0x0d, 0x50, + 0x53, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30, 0x41, + 0x0c, 0x07, 0x55, 0x4e, 0x41, 0x5f, 0x4d, 0x41, 0x53, 0x0d, 0x08, 0x32, + 0x30, 0x31, 0x33, 0x30, 0x32, 0x30, 0x33, 0x0e, 0x05, 0x54, 0x45, 0x52, + 0x5a, 0x4f, 0x0f, 0x09, 0x4a, 0x55, 0x49, 0x43, 0x45, 0x54, 0x4f, 0x52, + 0x59, 0x10, 0x07, 0x42, 0x55, 0x44, 0x4f, 0x4b, 0x41, 0x4e, 0x11, 0x08, + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x01, 0x02, 0x12, 0x08, 0x12, 0x34, + 0x56, 0x78, 0x9a, 0xbc, 0x03, 0x04, 0x13, 0x08, 0x66, 0x55, 0x44, 0x33, + 0x22, 0x11, 0x02, 0x00, 0x14, 0x08, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, + 0x00, 0x02, 0x15, 0x01, 0x01, 0x65, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x66, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0xfa, 0x02, 0x4a, 0x05, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff}; + +EepromContents expectedContentsV6 = { + {"Version", "6"}, + {"Product Name", "FIRST_SQUEEZE"}, + {"Product Part Number", "20123456"}, + {"System Assembly Part Number", "SYSA1234"}, + {"Meta PCBA Part Number", "PCBA1234567 "}, + {"Meta PCB Part Number", "PCB12345678 "}, + {"ODM/JDM PCBA Part Number", "MYODM1234567"}, + {"ODM/JDM PCBA Serial Number", "OS123456789AB"}, + {"Product Production State", "1"}, + {"Product Version", "0"}, + {"Product Sub-Version", "1"}, + {"Product Serial Number", "PS1234567890A"}, + {"System Manufacturer", "UNA_MAS"}, + {"System Manufacturing Date", "20130203"}, + {"PCB Manufacturer", "TERZO"}, + {"Assembled At", "JUICETORY"}, + {"EEPROM location on Fabric", "BUDOKAN"}, + {"X86 CPU MAC Base", "11:22:33:44:55:66"}, + {"X86 CPU MAC Address Size", "258"}, + {"BMC MAC Base", "12:34:56:78:9a:bc"}, + {"BMC MAC Address Size", "772"}, + {"Switch ASIC MAC Base", "66:55:44:33:22:11"}, + {"Switch ASIC MAC Address Size", "512"}, + {"META Reserved MAC Base", "fe:dc:ba:98:76:54"}, + {"META Reserved MAC Address Size", "2"}, + {"RMA", "1"}, + {"Vendor Defined Field 1", "0x0101010101"}, + {"Vendor Defined Field 2", "0x48656c6c6f"}, + {"Vendor Defined Field 3", ""}, + {"CRC16", "0x4a05 (CRC Matched)"}, +}; + std::vector> EepromTestInfo = { {eepromV4, expectedContentsV4}, {eepromV5, expectedContentsV5}, + {eepromV6, expectedContentsV6}, {eepromV5WrongCrc, expectedContentsV5WrongCrc}, }; diff --git a/fboss/py/fboss/cli/cli.py b/fboss/py/fboss/cli/cli.py index 10267a25cbe4c..b7b4e7bd0dec6 100755 --- a/fboss/py/fboss/cli/cli.py +++ b/fboss/py/fboss/cli/cli.py @@ -7,6 +7,8 @@ # LICENSE file in the root directory of this source tree. An additional grant # of patent rights can be found in the PATENTS file in the same directory. # + +# pyre-unsafe import ipaddress import sys diff --git a/fboss/py/fboss/cli/commands/acl.py b/fboss/py/fboss/cli/commands/acl.py index ba5f882626880..9939a72eddefd 100644 --- a/fboss/py/fboss/cli/commands/acl.py +++ b/fboss/py/fboss/cli/commands/acl.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import socket from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/agent.py b/fboss/py/fboss/cli/commands/agent.py index 5ce903695682b..bf9a04e9863f9 100644 --- a/fboss/py/fboss/cli/commands/agent.py +++ b/fboss/py/fboss/cli/commands/agent.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import json from configerator.utils import config_contents_to_thrift diff --git a/fboss/py/fboss/cli/commands/aggregate_port.py b/fboss/py/fboss/cli/commands/aggregate_port.py index fca7ba6050090..0fa1fa97ddfe3 100644 --- a/fboss/py/fboss/cli/commands/aggregate_port.py +++ b/fboss/py/fboss/cli/commands/aggregate_port.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import re from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/arp.py b/fboss/py/fboss/cli/commands/arp.py index 955bf1c8424ce..6375f5577a35f 100644 --- a/fboss/py/fboss/cli/commands/arp.py +++ b/fboss/py/fboss/cli/commands/arp.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/commands.py b/fboss/py/fboss/cli/commands/commands.py index d5176420bbc19..aaf71fe455146 100644 --- a/fboss/py/fboss/cli/commands/commands.py +++ b/fboss/py/fboss/cli/commands/commands.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import ipaddress from fboss.cli.utils import utils diff --git a/fboss/py/fboss/cli/commands/info.py b/fboss/py/fboss/cli/commands/info.py index 7fd17e011f2d0..ab63c922242f4 100644 --- a/fboss/py/fboss/cli/commands/info.py +++ b/fboss/py/fboss/cli/commands/info.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/interface.py b/fboss/py/fboss/cli/commands/interface.py index d30f03d8f0d98..27073e9b03fef 100644 --- a/fboss/py/fboss/cli/commands/interface.py +++ b/fboss/py/fboss/cli/commands/interface.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import re import socket from contextlib import ExitStack diff --git a/fboss/py/fboss/cli/commands/ip.py b/fboss/py/fboss/cli/commands/ip.py index 261ca70eafcf2..cd5f8ae6b964b 100644 --- a/fboss/py/fboss/cli/commands/ip.py +++ b/fboss/py/fboss/cli/commands/ip.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds from fboss.cli.utils import utils diff --git a/fboss/py/fboss/cli/commands/l2.py b/fboss/py/fboss/cli/commands/l2.py index 67620f85e1d70..270f173d1f121 100644 --- a/fboss/py/fboss/cli/commands/l2.py +++ b/fboss/py/fboss/cli/commands/l2.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds from neteng.fboss.ctrl.ttypes import L2EntryType diff --git a/fboss/py/fboss/cli/commands/list_hw_objects.py b/fboss/py/fboss/cli/commands/list_hw_objects.py index aa3f8b02c4d40..31ba589a2e642 100644 --- a/fboss/py/fboss/cli/commands/list_hw_objects.py +++ b/fboss/py/fboss/cli/commands/list_hw_objects.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/lldp.py b/fboss/py/fboss/cli/commands/lldp.py index 1e69a4689f29d..19fe0a8764d9f 100644 --- a/fboss/py/fboss/cli/commands/lldp.py +++ b/fboss/py/fboss/cli/commands/lldp.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import binascii from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/ndp.py b/fboss/py/fboss/cli/commands/ndp.py index 4161e0582f94d..0417fe27734c3 100644 --- a/fboss/py/fboss/cli/commands/ndp.py +++ b/fboss/py/fboss/cli/commands/ndp.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + from fboss.cli.commands import commands as cmds diff --git a/fboss/py/fboss/cli/commands/nic.py b/fboss/py/fboss/cli/commands/nic.py index 43a654c2306e4..c9161da625b6f 100644 --- a/fboss/py/fboss/cli/commands/nic.py +++ b/fboss/py/fboss/cli/commands/nic.py @@ -7,6 +7,8 @@ # LICENSE file in the root directory of this source tree. An additional grant # of patent rights can be found in the PATENTS file in the same directory. +# pyre-unsafe + from fboss.cli.commands import commands as cmds from fboss.cli.data.oui_to_vendor_ieee import oui_vendor_map diff --git a/fboss/py/fboss/cli/commands/port.py b/fboss/py/fboss/cli/commands/port.py index aebb6481bdb1d..1a8ac8a9a3ff7 100644 --- a/fboss/py/fboss/cli/commands/port.py +++ b/fboss/py/fboss/cli/commands/port.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import collections import itertools import time diff --git a/fboss/py/fboss/cli/commands/route.py b/fboss/py/fboss/cli/commands/route.py index c2eb912af0b57..c66ae230fcd0a 100644 --- a/fboss/py/fboss/cli/commands/route.py +++ b/fboss/py/fboss/cli/commands/route.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import ipaddress import typing as t from contextlib import ExitStack diff --git a/fboss/py/fboss/cli/data/oui_to_vendor_ieee.py b/fboss/py/fboss/cli/data/oui_to_vendor_ieee.py index 7413002823bec..560e1b18fbf1b 100644 --- a/fboss/py/fboss/cli/data/oui_to_vendor_ieee.py +++ b/fboss/py/fboss/cli/data/oui_to_vendor_ieee.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +# pyre-unsafe + # -*- coding: utf-8 -*- # @allow-sane-utf8 diff --git a/fboss/py/fboss/cli/utils/click_utils.py b/fboss/py/fboss/cli/utils/click_utils.py index d197a771fe7f5..4e31d9435f783 100644 --- a/fboss/py/fboss/cli/utils/click_utils.py +++ b/fboss/py/fboss/cli/utils/click_utils.py @@ -1,3 +1,4 @@ +# pyre-unsafe from typing import Optional import click diff --git a/fboss/py/fboss/cli/utils/utils.py b/fboss/py/fboss/cli/utils/utils.py index 00598f09078cd..3d204f1239cfb 100644 --- a/fboss/py/fboss/cli/utils/utils.py +++ b/fboss/py/fboss/cli/utils/utils.py @@ -8,6 +8,8 @@ # of patent rights can be found in the PATENTS file in the same directory. # +# pyre-unsafe + import re import socket import sys diff --git a/fboss/py/fboss/thrift_clients.py b/fboss/py/fboss/thrift_clients.py index 66da1284351fb..49813c4864db9 100644 --- a/fboss/py/fboss/thrift_clients.py +++ b/fboss/py/fboss/thrift_clients.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 # Copyright 2004-present Facebook. All Rights Reserved. +# pyre-unsafe + from neteng.fboss.ctrl import FbossCtrl from neteng.fboss.qsfp import QsfpService from thrift.protocol.THeaderProtocol import THeaderProtocol diff --git a/fboss/qsfp_service/BUCK b/fboss/qsfp_service/BUCK index 3f8c2385fb725..34538603aa016 100644 --- a/fboss/qsfp_service/BUCK +++ b/fboss/qsfp_service/BUCK @@ -76,7 +76,6 @@ cpp_library( "//fb303:thread_cached_service_data", "//fboss/qsfp_service/if:transceiver-cpp2-types", "//folly/logging:logging", - "//servicerouter/client/cpp2:cpp2", ], ) @@ -91,14 +90,11 @@ cpp_library( exported_deps = [ ":stats-helper", ":transceiver-manager", - "//common/network:util", "//common/time:time", "//fb303:thread_cached_service_data", "//fboss/qsfp_service/if:transceiver-cpp2-types", - "//folly:memory", "//folly/io/async:async_base", "//folly/logging:logging", - "//servicerouter/client/cpp2:cpp2", ], ) @@ -123,7 +119,6 @@ cpp_library( "//fb303:thread_cached_service_data", "//fboss/agent:fboss-error", "//fboss/agent:fboss-types", - "//fboss/agent:load_agent_config", "//fboss/agent:platform_config-cpp2-types", "//fboss/agent:switch_config-cpp2-types", "//fboss/agent:utils", diff --git a/fboss/qsfp_service/TransceiverManager.cpp b/fboss/qsfp_service/TransceiverManager.cpp index f71f68c768e6e..57f936fd8be27 100644 --- a/fboss/qsfp_service/TransceiverManager.cpp +++ b/fboss/qsfp_service/TransceiverManager.cpp @@ -6,7 +6,6 @@ #include #include -#include "fboss/agent/AgentConfig.h" #include "fboss/agent/FbossError.h" #include "fboss/agent/Utils.h" #include "fboss/agent/gen-cpp2/switch_config_types.h" diff --git a/fboss/qsfp_service/TransceiverManager.h b/fboss/qsfp_service/TransceiverManager.h index a752676f75596..33fe3a8082925 100644 --- a/fboss/qsfp_service/TransceiverManager.h +++ b/fboss/qsfp_service/TransceiverManager.h @@ -601,8 +601,6 @@ class TransceiverManager { virtual std::unique_ptr getI2CBus() = 0; - virtual TransceiverI2CApi* i2cBus() = 0; - // Determine if transceiver FW requires upgrade. // Transceiver has to be present, and the version in the QsfpConfig // has to be different from whats already running in HW. diff --git a/fboss/qsfp_service/fsdb/BUCK b/fboss/qsfp_service/fsdb/BUCK index c0cb20e0e3121..d253592a1c5a4 100644 --- a/fboss/qsfp_service/fsdb/BUCK +++ b/fboss/qsfp_service/fsdb/BUCK @@ -37,7 +37,6 @@ cpp_library( "//fboss/agent:switch_state-cpp2-types", "//fboss/fsdb/client:fsdb_pub_sub", "//fboss/fsdb/client:fsdb_stream_client", - "//fboss/fsdb/common:flags", "//fboss/fsdb/if:fsdb_model", "//fboss/fsdb/if:fsdb_oper-cpp2-types", "//fboss/qsfp_service:transceiver-manager", diff --git a/fboss/qsfp_service/fsdb/QsfpFsdbSubscriber.cpp b/fboss/qsfp_service/fsdb/QsfpFsdbSubscriber.cpp index f8e367ba5e117..262a74c08767a 100644 --- a/fboss/qsfp_service/fsdb/QsfpFsdbSubscriber.cpp +++ b/fboss/qsfp_service/fsdb/QsfpFsdbSubscriber.cpp @@ -4,7 +4,6 @@ #include #include #include "fboss/fsdb/client/FsdbPubSubManager.h" -#include "fboss/fsdb/common/Flags.h" #include "fboss/fsdb/if/FsdbModel.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/qsfp_service/TransceiverManager.h" diff --git a/fboss/qsfp_service/if/transceiver.thrift b/fboss/qsfp_service/if/transceiver.thrift index 228fa68e30724..b9db125f773fa 100644 --- a/fboss/qsfp_service/if/transceiver.thrift +++ b/fboss/qsfp_service/if/transceiver.thrift @@ -216,6 +216,7 @@ enum MediaInterfaceCode { DR4_2x400G = 13, DR4_400G = 14, FR8_800G = 15, + CR_10G = 16, } // The extended specification compliance code of the transceiver module. @@ -276,6 +277,7 @@ enum SMFMediaInterfaceCode { } enum Ethernet10GComplianceCode { + CR_10G = 0x01, SR_10G = 0x10, LR_10G = 0x20, LRM_10G = 0x40, diff --git a/fboss/qsfp_service/module/BUCK b/fboss/qsfp_service/module/BUCK index c38e0574c5888..032fa87ecaa63 100644 --- a/fboss/qsfp_service/module/BUCK +++ b/fboss/qsfp_service/module/BUCK @@ -20,7 +20,13 @@ cpp_library( headers = [ "QsfpFieldInfo.h", "QsfpUtil.h", + "cmis/CmisFieldInfo.h", + "cmis/CmisModule.h", "facebook/SffFr1FieldInfo.h", + "sff/Sff8472FieldInfo.h", + "sff/Sff8472Module.h", + "sff/SffFieldInfo.h", + "sff/SffModule.h", ], exported_deps = [ ":firmware_upgrader", @@ -42,6 +48,9 @@ cpp_library( "//fboss/qsfp_service/if:transceiver-cpp2-types", "//fboss/qsfp_service/lib:qsfp-config-parser-helper", "//fboss/qsfp_service/lib:qsfp-service-client", + "//fboss/qsfp_service/module/cmis:cmis-cpp2-types", + "//fboss/qsfp_service/module/sff:sff-cpp2-types", + "//fboss/qsfp_service/module/sff:sff8472-cpp2-types", "//folly:synchronized", "//folly/executors:function_scheduler", "//folly/futures:core", @@ -79,6 +88,7 @@ cpp_library( "//fboss/lib/usb:transceiver_access_parameter", "//fboss/qsfp_service/if:config-cpp2-types", "//fboss/qsfp_service/if:transceiver-cpp2-types", + "//fboss/qsfp_service/module/cmis:cmis-cpp2-types", "//folly:conv", "//folly:file", "//folly:file_util", @@ -106,7 +116,11 @@ cpp_library( exported_deps = [ "//fboss/lib/usb:transceiver_access_parameter", "//fboss/qsfp_service/if:config-cpp2-types", + "//fboss/qsfp_service/module/cmis:cmis-cpp2-types", + "//fboss/qsfp_service/module/sff:sff-cpp2-types", + "//fboss/qsfp_service/module/sff:sff8472-cpp2-types", "//folly:file_util", + "//folly:string", "//folly/logging:logging", ], ) diff --git a/fboss/qsfp_service/module/CdbCommandBlock.cpp b/fboss/qsfp_service/module/CdbCommandBlock.cpp index b71a83b5a7ce9..cb1aed8eb8499 100644 --- a/fboss/qsfp_service/module/CdbCommandBlock.cpp +++ b/fboss/qsfp_service/module/CdbCommandBlock.cpp @@ -9,6 +9,8 @@ #include "fboss/qsfp_service/module/TransceiverImpl.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" + namespace facebook::fboss { // CDB command definitions @@ -36,7 +38,6 @@ static constexpr uint8_t kCdbCommandStatusBusyCmdExec = 0x83; constexpr int cdbCommandTimeoutUsec = 10000000; constexpr int cdbCommandErrorIntervalUsec = 100000; constexpr int cdbCommandStatusPollIntervalUsec = 10000; -constexpr int cdbMemoryWriteDelayUsec = 5000; // CMIS firmware related register offsets constexpr uint8_t kCdbCommandStatusReg = 37; @@ -46,6 +47,9 @@ constexpr uint8_t kCdbCommandMsbReg = 128; constexpr uint8_t kCdbCommandLsbReg = 129; constexpr uint8_t kCdbRlplLengthReg = 134; +// CMIS command +constexpr int kCmisCommand = static_cast(CmisField::CDB_COMMAND); + /* * i2cWriteAndContinue * Local function to perform the i2c write to module and continue in case of @@ -65,7 +69,10 @@ void CdbCommandBlock::i2cWriteAndContinue( // command run successfully. Some of the optics need this delay /* sleep override */ bus->writeTransceiver( - {i2cAddress, offset, length}, buf, cdbMemoryWriteDelayUsec); + {i2cAddress, offset, length}, + buf, + POST_I2C_WRITE_DELAY_CDB_US, + kCmisCommand); } catch (const std::exception& e) { XLOG(INFO) << "write() raised exception: Sleep for 100ms and continue: " << e.what(); @@ -76,7 +83,7 @@ void CdbCommandBlock::i2cWriteAndContinue( auto writeTime = std::chrono::steady_clock::now() - startTime; memoryWriteTime_ += std::chrono::duration_cast(writeTime) - - std::chrono::milliseconds(cdbMemoryWriteDelayUsec / 1000); + std::chrono::milliseconds(POST_I2C_WRITE_DELAY_CDB_US / 1000); } /* @@ -96,7 +103,8 @@ bool CdbCommandBlock::cmisRunCdbCommand(TransceiverImpl* bus) { bus->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kPageSelectReg, 1}, &page, - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kCmisCommand); // Since we are going to write byte 2 to len-1 in the module CDB memory // without interpreting it so let's take uint8_t* pointer here and do it @@ -168,7 +176,8 @@ bool CdbCommandBlock::cmisRunCdbCommand(TransceiverImpl* bus) { try { bus->readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCdbCommandStatusReg, 1}, - &status); + &status, + kCmisCommand); } catch (const std::exception&) { XLOG(INFO) << folly::sformat( "cmisRunCdbCommand Mod{:d}: read status raised exception: Sleep for 100ms and continue", @@ -214,21 +223,22 @@ bool CdbCommandBlock::cmisRunCdbCommand(TransceiverImpl* bus) { bus->readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCdbRlplLengthReg, 1}, - &this->cdbFields_.cdbRlplLength); + &this->cdbFields_.cdbRlplLength, + kCmisCommand); auto i2cReadWithRetry = [&](uint8_t i2cAddress, int offset, int length, uint8_t* buf) { try { - bus->readTransceiver({i2cAddress, offset, length}, buf); + bus->readTransceiver({i2cAddress, offset, length}, buf, kCmisCommand); } catch (const std::exception&) { XLOG(INFO) << folly::sformat( "cmisRunCdbCommand Mod{:d}: read generic raised exception: Sleep for 100ms and retry", bus->getNum()); /* sleep override */ usleep(cdbCommandErrorIntervalUsec); - bus->readTransceiver({i2cAddress, offset, length}, buf); + bus->readTransceiver({i2cAddress, offset, length}, buf, kCmisCommand); } }; @@ -572,7 +582,8 @@ void CdbCommandBlock::selectCdbPage(TransceiverImpl* bus) { bus->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kPageSelectReg, 1}, &page, - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kCmisCommand); } /* @@ -589,7 +600,8 @@ void CdbCommandBlock::setMsaPassword(TransceiverImpl* bus, uint32_t msaPw) { bus->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kModulePasswordEntryReg, 4}, msaPwArray.data(), - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kCmisCommand); } } // namespace facebook::fboss diff --git a/fboss/qsfp_service/module/FirmwareUpgrader.cpp b/fboss/qsfp_service/module/FirmwareUpgrader.cpp index adf338b6e271f..eef2f6f0ebe6f 100644 --- a/fboss/qsfp_service/module/FirmwareUpgrader.cpp +++ b/fboss/qsfp_service/module/FirmwareUpgrader.cpp @@ -16,6 +16,8 @@ #include "fboss/qsfp_service/module/TransceiverImpl.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" + using folly::MutableByteRange; using folly::StringPiece; using std::make_pair; @@ -32,6 +34,9 @@ constexpr uint8_t kModulePasswordEntryReg = 122; constexpr int moduleDatapathInitDurationUsec = 5000000; +// CMIS FW Upgrade +constexpr int kFwUpgrade = static_cast(CmisField::FW_UPGRADE); + /* * CmisFirmwareUpgrader * @@ -105,7 +110,8 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareDownload( bus_->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kModulePasswordEntryReg, 4}, msaPassword_.data(), - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kFwUpgrade); CdbCommandBlock commandBlockBuf; CdbCommandBlock* commandBlock = &commandBlockBuf; @@ -152,7 +158,17 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareDownload( // Check if EPL memory is supported if (commandBlock->getCdbLplFlatMemory()[5] == 0x10 || - commandBlock->getCdbLplFlatMemory()[5] == 0x11) { + commandBlock->getCdbLplFlatMemory()[5] == 0x11 || + commandBlock->getCdbLplFlatMemory()[5] == 0x3) { + /* Per the spec, the valid values for this register (page 9F, offset 141) + * are 00h: Both LPL and EPL are not supported 01h: LPL supported 10h: EPL + * supported 11h: Both LPL and EPL are supported Certain vendors (vendor + * for 400G-XDR4 GEN1 modules) have incorrectly advertised their + * capability as 0x3 instead of 0x11. As a workaround, also check for 0x3 + * to see if EPL is supported or not. We don't expect any other vendor to + * have it incorrectly advertised as 0x3, thus it should be safe to add + * this additional check as a workaround for this vendor + */ eplSupported = true; XLOG(INFO) << folly::sformat( "cmisModuleFirmwareDownload: Mod{:d} will use EPL memory for firmware download", @@ -295,7 +311,8 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareDownload( bus_->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kModulePasswordEntryReg, 4}, msaPassword_.data(), - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kFwUpgrade); // Step 5: Issue CDB command: Commit the downloaded firmware commandBlock->createCdbCmdFwCommit(); @@ -325,7 +342,8 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareDownload( bus_->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kModulePasswordEntryReg, 4}, msaPassword_.data(), - 0 /*delay*/); + POST_I2C_WRITE_NO_DELAY_US, + kFwUpgrade); // Print IO profiling info auto ioTiming = bus_->getI2cTimeProfileMsec(); @@ -359,6 +377,20 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareUpgrade() { // Call the firmware download operation with this image content result = cmisModuleFirmwareDownload( imageCursor_.data(), imageCursor_.totalLength()); + // Always revert the MSA password at the end. Certain commands like releasing + // low power don't work when certain modules (like xdr4) are still in the CDB + // mode which is the mode that's activated when the msa password is written + // during firmware upgrade + std::array msaPassword_; + msaPassword_[0] = 0; + msaPassword_[1] = 0; + msaPassword_[2] = 0; + msaPassword_[3] = 0; + bus_->writeTransceiver( + {TransceiverAccessParameter::ADDR_QSFP, kModulePasswordEntryReg, 4}, + msaPassword_.data(), + POST_I2C_WRITE_NO_DELAY_US, + kFwUpgrade); if (!result) { // If the download failed then print the message and return. No need // to do any recovery here @@ -372,7 +404,8 @@ bool CmisFirmwareUpgrader::cmisModuleFirmwareUpgrade() { // Find out the current version running on module bus_->readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kfirmwareVersionReg, 2}, - versionNumber.data()); + versionNumber.data(), + kFwUpgrade); XLOG(INFO) << folly::sformat( "cmisModuleFirmwareUpgrade: Mod{:d}: Module Active Firmware Revision now: {:d}.{:d}", moduleId_, diff --git a/fboss/qsfp_service/module/I2cLogBuffer.cpp b/fboss/qsfp_service/module/I2cLogBuffer.cpp index a08f74b3cd068..8b5c5138f289a 100644 --- a/fboss/qsfp_service/module/I2cLogBuffer.cpp +++ b/fboss/qsfp_service/module/I2cLogBuffer.cpp @@ -8,8 +8,13 @@ #include #include +#include #include +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" +#include "fboss/qsfp_service/module/sff/gen-cpp2/sff8472_types.h" +#include "fboss/qsfp_service/module/sff/gen-cpp2/sff_types.h" + namespace { constexpr size_t kMicrosecondsPerSecond = 1000000; const std::string kEmptyOptional = "..."; @@ -34,6 +39,7 @@ I2cLogBuffer::I2cLogBuffer( void I2cLogBuffer::log( const TransceiverAccessParameter& param, + const int field, const uint8_t* data, Operation op, bool success) { @@ -43,17 +49,19 @@ void I2cLogBuffer::log( std::lock_guard g(mutex_); if ((op == Operation::Read && config_.readLog().value()) || (op == Operation::Write && config_.writeLog().value())) { - buffer_[head_].steadyTime = std::chrono::steady_clock::now(); - buffer_[head_].systemTime = std::chrono::system_clock::now(); - buffer_[head_].param = param; + auto& bufferHead = buffer_[head_]; + bufferHead.steadyTime = std::chrono::steady_clock::now(); + bufferHead.systemTime = std::chrono::system_clock::now(); + bufferHead.param = param; + bufferHead.field = field; const size_t len = std::min(param.len, kMaxI2clogDataSize); - auto& bufferData = buffer_[head_].data; + auto& bufferData = bufferHead.data; std::copy(data, data + len, bufferData.begin()); if (len < kMaxI2clogDataSize) { std::fill(bufferData.begin() + len, bufferData.end(), 0); } - buffer_[head_].op = op; - buffer_[head_].success = success; + bufferHead.op = op; + bufferHead.success = success; // Let tail track the oldest entry. if ((head_ == tail_) && (totalEntries_ != 0)) { @@ -70,10 +78,12 @@ void I2cLogBuffer::log( } } -std::pair I2cLogBuffer::dump( +I2cLogBuffer::I2cLogHeader I2cLogBuffer::dump( std::vector& entriesOut) { std::lock_guard g(mutex_); + auto start = std::chrono::high_resolution_clock::now(); + if (entriesOut.size() != size_) { entriesOut.resize(size_); } @@ -110,24 +120,54 @@ std::pair I2cLogBuffer::dump( } } - auto retval = std::make_pair(totalEntries_, entries); + auto end = std::chrono::high_resolution_clock::now(); + auto copyTime = + std::chrono::duration_cast(end - start); + I2cLogHeader retval = { + .mgmtIf = mgmtIf_, + .totalEntries = totalEntries_, + .bufferEntries = entries, + .portNames = portNames_, + .fwStatus = fwStatus_, + .vendor = vendor_, + .duration = copyTime}; totalEntries_ = head_ = tail_ = 0; return retval; } size_t I2cLogBuffer::getHeader( std::stringstream& ss, - size_t entries, - size_t numContents) { + const I2cLogHeader& info) { // Format of the log. All printed header lines must be terminated with \n to // return the right number of lines in header. - ss << "I2cLogBuffer: Total Entries: " << entries << " Logged: " << numContents - << "\n"; + if (auto fw = info.fwStatus) { + if (fw.value().version().has_value()) { + ss << "FW Version: " << *fw.value().get_version(); + } + if (fw.value().dspFwVer().has_value()) { + ss << " DSP FW Version: " << *fw.value().get_dspFwVer(); + } + if (fw.value().buildRev().has_value()) { + ss << " FW Build Revision: " << *fw.value().get_buildRev(); + } + } + if (auto vendor = info.vendor) { + ss << " Vendor: " << vendor.value().get_name() + << " Part Number: " << vendor.value().get_partNumber() + << " Serial Number: " << vendor.value().get_serialNumber(); + } + ss << " Management Interface: " + << apache::thrift::util::enumNameSafe(info.mgmtIf); + ss << "\n"; + ss << "Port Names: " << folly::join(" ", info.portNames) << "\n"; + ss << "I2cLogBuffer: Total Entries: " << info.totalEntries + << " Logged: " << info.bufferEntries + << " Copy Lock Time: " << info.duration.count() << " us\n"; ss << "Between the Operation and [Data], an 'F' indicates a failure in the transaction.\n"; ss << "If the read transaction failed [Data] may not be accurate.\n"; ss << "mmmuuu: milliseconds microseconds, steadclock_ns: time in ns between log entries \n"; ss << "Header format: \n"; - ss << "Month D HH:MM:SS.mmmuuu F [data] steadyclock_ns" + ss << "Month D HH:MM:SS.mmmuuu FIELD_NAME F [data] steadyclock_ns" << "\n"; auto str = ss.str(); @@ -150,6 +190,31 @@ void I2cLogBuffer::getEntryTime( ss << "." << std::setfill('0') << std::setw(6) << us.count(); } +void I2cLogBuffer::getFieldName(std::stringstream& ss, const int field) { + std::string fieldName; + switch (mgmtIf_) { + case TransceiverManagementInterface::CMIS: + fieldName = + apache::thrift::util::enumNameSafe(static_cast(field)); + break; + case TransceiverManagementInterface::SFF: + fieldName = + apache::thrift::util::enumNameSafe(static_cast(field)); + break; + case TransceiverManagementInterface::SFF8472: + fieldName = + apache::thrift::util::enumNameSafe(static_cast(field)); + break; + default: + break; + } + + if (!fieldName.empty()) { + ss << std::setfill(' ') << std::setw(kI2cFieldNameLength) + << fieldName.substr(0, kI2cFieldNameLength); + } +} + template void I2cLogBuffer::getOptional(std::stringstream& ss, T value) { if (value.has_value()) { @@ -166,33 +231,36 @@ std::pair I2cLogBuffer::dumpToFile() { // right size before the call to dump(); const size_t size = getSize(); std::vector entriesOut(size); - auto entries = dump(entriesOut); + const auto headerInfo = dump(entriesOut); std::stringstream ss; - auto logCount = entries.second; - auto hdrSize = getHeader(ss, entries.first, logCount); + auto logCount = headerInfo.bufferEntries; + auto hdrSize = getHeader(ss, headerInfo); TimePointSteady prev; for (size_t i = 0; i < logCount; i++) { - getEntryTime(ss, entriesOut[i].systemTime); + auto& entry = entriesOut[i]; + getEntryTime(ss, entry.systemTime); + ss << " "; + getFieldName(ss, entry.field); ss << " <"; - auto& param = entriesOut[i].param; + auto& param = entry.param; getOptional(ss, param.i2cAddress); - ss << std::setfill(' ') << std::setw(3) << param.offset << " "; - ss << std::setfill(' ') << std::setw(3) << param.len << " "; getOptional(ss, param.page); getOptional(ss, param.bank); - ss << (entriesOut[i].op == Operation::Read ? "R" : "W"); + ss << std::setfill(' ') << std::setw(3) << param.offset << " "; + ss << std::setfill(' ') << std::setw(3) << param.len << " "; + ss << (entry.op == Operation::Read ? "R" : "W"); ss << "> "; - if (entriesOut[i].success) { + if (entry.success) { ss << " "; } else { ss << "F"; } ss << " ["; - for (auto& data : entriesOut[i].data) { + for (auto& data : entry.data) { ss << std::hex << std::setfill('0') << std::setw(2) << (uint16_t)data; } ss << "] "; @@ -202,40 +270,39 @@ std::pair I2cLogBuffer::dumpToFile() { ss << 0; } else { ss << std::chrono::duration_cast( - entriesOut[i].steadyTime - prev) + entry.steadyTime - prev) .count(); } - prev = entriesOut[i].steadyTime; + prev = entry.steadyTime; ss << std::endl; } folly::writeFile(ss.str(), logFile_.c_str()); return std::make_pair(hdrSize, logCount); } -TransceiverAccessParameter I2cLogBuffer::getParam(std::stringstream& ss) { +TransceiverAccessParameter I2cLogBuffer::getParam(const std::string& str) { TransceiverAccessParameter param(0, 0, 0); - std::string token; - ss >> token; - if (token != kEmptyOptional) { - param.i2cAddress = folly::to(token); + std::vector fields; + folly::split(' ', str, fields, true); + if (fields.size() < kNumParamFields) { + throw std::out_of_range("Invalie param fields:" + str); } - ss >> param.offset; - ss >> param.len; - ss >> token; - if (token != kEmptyOptional) { - param.page = folly::to(token); + if (fields.at(0) != kEmptyOptional) { + param.i2cAddress = folly::to(fields.at(0)); + }; + if (fields.at(1) != kEmptyOptional) { + param.page = folly::to(fields.at(1)); } - ss >> token; - if (token != kEmptyOptional) { - param.bank = folly::to(token); + if (fields.at(2) != kEmptyOptional) { + param.bank = folly::to(fields.at(2)); } + param.offset = folly::to(fields.at(3)); + param.len = folly::to(fields.at(4)); return param; } -I2cLogBuffer::Operation I2cLogBuffer::getOp(std::stringstream& ss) { - char c; - ss >> c; - switch (c) { +I2cLogBuffer::Operation I2cLogBuffer::getOp(const char op) { + switch (op) { case 'R': return Operation::Read; break; @@ -243,7 +310,7 @@ I2cLogBuffer::Operation I2cLogBuffer::getOp(std::stringstream& ss) { return Operation::Write; break; default: - throw std::invalid_argument(fmt::format("Invalid Operation :{}", c)); + throw std::invalid_argument(fmt::format("Invalid Operation :{}", op)); break; } } @@ -301,7 +368,8 @@ std::vector I2cLogBuffer::loadFromLog( } std::stringstream ss; - auto hdrSize = getHeader(ss, 0, 0); + I2cLogHeader header = {}; + auto hdrSize = getHeader(ss, header); for (auto i = 0; i < hdrSize; i++) { if (!std::getline(file, line)) { XLOG(ERR) << "Failed to read log header from file " << logFile; @@ -310,10 +378,10 @@ std::vector I2cLogBuffer::loadFromLog( } while (std::getline(file, line)) { - ss = std::stringstream(getField(line, '<', '>')); - auto param = getParam(ss); - auto op = getOp(ss); - auto str = getField(line, '[', ']'); + auto str = getField(line, '<', '>'); + auto param = getParam(str); + auto op = getOp(str.back()); + str = getField(line, '[', ']'); auto data = getData(str); auto delay = getDelay(line); str = getField(line, '>', '['); @@ -323,4 +391,16 @@ std::vector I2cLogBuffer::loadFromLog( return entries; } +void I2cLogBuffer::setTcvrInfoInLog( + const TransceiverManagementInterface& mgmtIf, + const std::set& portNames, + const std::optional& status, + const std::optional& vendor) { + std::lock_guard g(mutex_); + mgmtIf_ = mgmtIf; + portNames_ = portNames; + fwStatus_ = status; + vendor_ = vendor; +} + } // namespace facebook::fboss diff --git a/fboss/qsfp_service/module/I2cLogBuffer.h b/fboss/qsfp_service/module/I2cLogBuffer.h index 4273ebc5e3c12..21028004ab3d0 100644 --- a/fboss/qsfp_service/module/I2cLogBuffer.h +++ b/fboss/qsfp_service/module/I2cLogBuffer.h @@ -29,6 +29,10 @@ namespace facebook::fboss { */ constexpr int kMaxI2clogDataSize = 128; +constexpr size_t kI2cFieldNameLength = 16; + +// Number of address fields in TransceiverAccessParameter +constexpr int kNumParamFields = 5; class I2cLogBuffer { using TimePointSteady = std::chrono::steady_clock::time_point; @@ -47,6 +51,7 @@ class I2cLogBuffer { TimePointSteady steadyTime; TimePointSystem systemTime; TransceiverAccessParameter param; + int field; std::array data; Operation op; bool success{true}; @@ -55,6 +60,16 @@ class I2cLogBuffer { I2cLogEntry() : param(TransceiverAccessParameter(0, 0, 0)) {} }; + struct I2cLogHeader { + TransceiverManagementInterface mgmtIf; + size_t totalEntries; + size_t bufferEntries; + std::set portNames; + std::optional fwStatus; + std::optional vendor; + std::chrono::microseconds duration; + }; + // NOTE: The maximum number of entries is defined in config (qsfp_config.cinc) static_assert( sizeof(I2cLogEntry) < 200, @@ -84,6 +99,7 @@ class I2cLogBuffer { // Insert a log entry into the buffer. void log( const TransceiverAccessParameter& param, + const int field, const uint8_t* data, Operation op, bool success = true); @@ -99,7 +115,7 @@ class I2cLogBuffer { // Returns a pair: total enties logged and number of entries in circular // buffer. Total entries logged could be much higher than capacity of circular // buffer. - std::pair dump(std::vector& entriesOut); + I2cLogHeader dump(std::vector& entriesOut); // Get the number of entries logged to the buffer. The size of the // buffer can be smaller than total entries logged. @@ -123,6 +139,16 @@ class I2cLogBuffer { // to replay the sequence of transactions or test the logging. static std::vector loadFromLog(std::string logFile); + // When Transceiver Information is updated (i.e. inserted), Update that + // in the Header of the log file. + // We will only be setting the info for the very last transceiver plugged + // in to avoid potential memory leaks from higher layers. + void setTcvrInfoInLog( + const TransceiverManagementInterface& mgmtIf, + const std::set& portNames, + const std::optional& status, + const std::optional& vendor); + private: std::vector buffer_; const size_t size_; @@ -132,6 +158,11 @@ class I2cLogBuffer { size_t totalEntries_{0}; std::string logFile_; std::mutex mutex_; + TransceiverManagementInterface mgmtIf_ = + TransceiverManagementInterface::UNKNOWN; + std::set portNames_; + std::optional fwStatus_; + std::optional vendor_; size_t getSize() { // Avoid the tsan errors. size_ is also a const member variable. @@ -140,16 +171,16 @@ class I2cLogBuffer { } void getEntryTime(std::stringstream& ss, const TimePointSystem& time_point); + void getFieldName(std::stringstream& ss, const int field); template void getOptional(std::stringstream& ss, T value); // Operations to re-construct I2cReplayEntry from a log file. - static size_t - getHeader(std::stringstream& ss, size_t entries, size_t numContents); + static size_t getHeader(std::stringstream& ss, const I2cLogHeader& info); static std::string getField(const std::string& line, char left, char right); - static TransceiverAccessParameter getParam(std::stringstream& ss); - static I2cLogBuffer::Operation getOp(std::stringstream& ss); + static TransceiverAccessParameter getParam(const std::string& str); + static I2cLogBuffer::Operation getOp(const char op); static std::array getData(std::string str); static uint64_t getDelay(const std::string& str); static bool getSuccess(const std::string& str); diff --git a/fboss/qsfp_service/module/QsfpModule.cpp b/fboss/qsfp_service/module/QsfpModule.cpp index ad3d663b51bd9..f412a05427e43 100644 --- a/fboss/qsfp_service/module/QsfpModule.cpp +++ b/fboss/qsfp_service/module/QsfpModule.cpp @@ -22,6 +22,7 @@ #include "fboss/qsfp_service/StatsPublisher.h" #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" #include "fboss/qsfp_service/module/TransceiverImpl.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" DEFINE_int32( qsfp_data_refresh_interval, @@ -202,21 +203,30 @@ bool QsfpModule::upgradeFirmwareLocked( << " : Still continuing with firmware upgrade"; } - // Step 2: First ensure the module is out of lower mode - TransceiverSettings settings = getTransceiverSettingsInfo(); - setPowerOverrideIfSupportedLocked(*settings.powerControl()); + for (auto& fw : fwList) { + // Step 2: First ensure the module is out of lower mode + TransceiverSettings settings = getTransceiverSettingsInfo(); + setPowerOverrideIfSupportedLocked(*settings.powerControl()); - // Step 3: Mark the module dirty so that we can refresh the entire cache - // later - dirty_ = true; + // Step 3: Mark the module dirty so that we can refresh the entire cache + // later + dirty_ = true; - // Step 4: Upgrade Firmware - for (auto& fw : fwList) { + // Step 4: Upgrade Firmware fwUpgradeResult &= upgradeFirmwareLockedImpl(fw.get()); + + // Step 5: Trigger a hard reset of the transceiver to kick start the new + // firmware + triggerModuleReset(); + // If there are more than 1 firmware to update on the optic (for modules + // that have separate MCU and DSP firmwares), then update the cache in + // preparation for the next upgrade. The sleep here is for the module to + // recover after the previous hard reset + // @lint-ignore CLANGTIDY facebook-hte-BadCall-sleep + sleep(5); + updateQsfpData(true); } - // Trigger a hard reset of the transceiver to kick start the new firmware - triggerModuleReset(); // End of Firmware Upgrade return fwUpgradeResult; }; @@ -226,12 +236,7 @@ bool QsfpModule::upgradeFirmwareLocked( while (upgradeAttempts <= kAllowedFwUpgradeAttempts) { finalFwUpgradeResult = fwUpgradeFn(); if (!finalFwUpgradeResult && upgradeAttempts < kAllowedFwUpgradeAttempts) { - // Sleep 5 seconds so that the module recovers after it is reset - // @lint-ignore CLANGTIDY facebook-hte-BadCall-sleep - sleep(5); - // Refresh the cache to get the latest state of the module after the - // module was reset after a failed FW upgrade - updateQsfpData(true); + // fwUpgradeFn will wait 5 seconds internally when re-trying. upgradeAttempts++; } else { break; @@ -327,6 +332,7 @@ unsigned int QsfpModule::numHostLanes() const { case MediaInterfaceCode::LR_10G: case MediaInterfaceCode::SR_10G: case MediaInterfaceCode::BASE_T_10G: + case MediaInterfaceCode::CR_10G: return 1; case MediaInterfaceCode::CWDM4_100G: case MediaInterfaceCode::CR4_100G: @@ -355,6 +361,7 @@ unsigned int QsfpModule::numMediaLanes() const { case MediaInterfaceCode::SR_10G: case MediaInterfaceCode::FR1_100G: case MediaInterfaceCode::BASE_T_10G: + case MediaInterfaceCode::CR_10G: return 1; case MediaInterfaceCode::CWDM4_100G: case MediaInterfaceCode::CR4_100G: @@ -1159,11 +1166,15 @@ std::unique_ptr QsfpModule::readTransceiverLocked( // When the page is specified, first update byte 127 with the speciied // pageId qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, &page); + {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(CmisField::PAGE_CHANGE)); // common enum to all tcvr types } qsfpImpl_->readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, offset, length}, - iobuf->writableData()); + iobuf->writableData(), + CAST_TO_INT(CmisField::RAW)); // common enum to all tcvr types // Mark the valid data in the buffer iobuf->append(length); } catch (const std::exception& ex) { @@ -1211,10 +1222,16 @@ bool QsfpModule::writeTransceiverLocked( // When the page is specified, first update byte 127 with the speciied // pageId qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, &page); + {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(CmisField::PAGE_CHANGE)); // common enum to all tcvr types } qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, offset, sizeof(data)}, &data); + {TransceiverAccessParameter::ADDR_QSFP, offset, sizeof(data)}, + &data, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(CmisField::RAW)); // common enum to all tcvr types } catch (const std::exception& ex) { QSFP_LOG(ERR, this) << "Error writing data: " << ex.what(); throw; diff --git a/fboss/qsfp_service/module/QsfpModule.h b/fboss/qsfp_service/module/QsfpModule.h index c5dea02d5dbf6..2f1df1367b0e3 100644 --- a/fboss/qsfp_service/module/QsfpModule.h +++ b/fboss/qsfp_service/module/QsfpModule.h @@ -33,6 +33,8 @@ #define QSFP_LOG_IF(level, cond, tcvr) \ XLOG_IF(level, cond) << "Transceiver " << tcvr->getNameString() << ": " +#define CAST_TO_INT(FIELD) static_cast((FIELD)) + namespace facebook { namespace fboss { diff --git a/fboss/qsfp_service/module/QsfpUtil.cpp b/fboss/qsfp_service/module/QsfpUtil.cpp index 453f248b4af30..fd53a7b42b222 100644 --- a/fboss/qsfp_service/module/QsfpUtil.cpp +++ b/fboss/qsfp_service/module/QsfpUtil.cpp @@ -2,7 +2,6 @@ #include "fboss/qsfp_service/module/QsfpUtil.h" #include -#include namespace facebook::fboss { diff --git a/fboss/qsfp_service/module/TransceiverImpl.h b/fboss/qsfp_service/module/TransceiverImpl.h index eca3bf66e0ca1..a59a363684b3e 100644 --- a/fboss/qsfp_service/module/TransceiverImpl.h +++ b/fboss/qsfp_service/module/TransceiverImpl.h @@ -24,7 +24,9 @@ namespace facebook { namespace fboss { -constexpr uint64_t post_write_delay_us = 20000; +constexpr uint64_t POST_I2C_WRITE_DELAY_US = 20000; +constexpr uint64_t POST_I2C_WRITE_DELAY_CDB_US = 5000; +constexpr uint64_t POST_I2C_WRITE_NO_DELAY_US = 0; /* * This is class is the SFP implementation class @@ -39,7 +41,8 @@ class TransceiverImpl { */ virtual int readTransceiver( const TransceiverAccessParameter& param, - uint8_t* fieldValue) = 0; + uint8_t* fieldValue, + const int field) = 0; /* * Write to a tranceiver with a specific delay post write. @@ -51,7 +54,8 @@ class TransceiverImpl { virtual int writeTransceiver( const TransceiverAccessParameter& param, const uint8_t* fieldValue, - uint64_t delay = post_write_delay_us) = 0; + uint64_t delay, + const int field) = 0; /* * This function will check if the transceiver is present or not diff --git a/fboss/qsfp_service/module/cmis/BUCK b/fboss/qsfp_service/module/cmis/BUCK new file mode 100644 index 0000000000000..e4460427e719a --- /dev/null +++ b/fboss/qsfp_service/module/cmis/BUCK @@ -0,0 +1,29 @@ +load("@fbcode_macros//build_defs:thrift_library.bzl", "thrift_library") + +oncall("fboss_optics_phy") + +thrift_library( + name = "cmis", + go_thrift_namespaces = { + "cmis.thrift": "neteng.fboss.cmis", + }, + languages = [ + "cpp2", + "py", + "py3", + "py-asyncio", + "go", + "rust", + ], + no_plugin_deps = ["//thrift/annotation:all"], + py3_namespace = "neteng.fboss", + py_asyncio_base_module = "neteng.fboss.asyncio", + py_base_module = "neteng.fboss", + thrift_cpp2_options = "json,reflection", + thrift_py_options = "json,sort_keys", + thrift_rust_options = [ + "deprecated_default_enum_min_i32", + "serde", + ], + thrift_srcs = {"cmis.thrift": []}, +) diff --git a/fboss/qsfp_service/module/cmis/CmisFieldInfo.cpp b/fboss/qsfp_service/module/cmis/CmisFieldInfo.cpp index 3163668a2d835..c1624f3aa32f0 100644 --- a/fboss/qsfp_service/module/cmis/CmisFieldInfo.cpp +++ b/fboss/qsfp_service/module/cmis/CmisFieldInfo.cpp @@ -8,7 +8,6 @@ */ #include "fboss/qsfp_service/module/cmis/CmisFieldInfo.h" -#include "fboss/agent/FbossError.h" /* * Parse transceiver data fields, as outlined in diff --git a/fboss/qsfp_service/module/cmis/CmisFieldInfo.h b/fboss/qsfp_service/module/cmis/CmisFieldInfo.h index 3fa815412ec4c..97ddf7648fb4a 100644 --- a/fboss/qsfp_service/module/cmis/CmisFieldInfo.h +++ b/fboss/qsfp_service/module/cmis/CmisFieldInfo.h @@ -11,6 +11,7 @@ #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" #include "fboss/qsfp_service/module/QsfpFieldInfo.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" /* * Parse transceiver data fields, as outlined in @@ -23,206 +24,6 @@ namespace fboss { enum class CmisPages; -enum class CmisField { - // Lower Page - PAGE_LOWER, - IDENTIFIER, - REVISION_COMPLIANCE, - FLAT_MEM, - MODULE_STATE, - BANK0_FLAGS, - BANK1_FLAGS, - BANK2_FLAGS, - BANK3_FLAGS, - MODULE_FLAG, - MODULE_ALARMS, - TEMPERATURE, - VCC, - MODULE_CONTROL, - FIRMWARE_REVISION, - MEDIA_TYPE_ENCODINGS, - APPLICATION_ADVERTISING1, - BANK_SELECT, - PAGE_SELECT_BYTE, - // Page 00h - PAGE_UPPER00H, - VENDOR_NAME, - VENDOR_OUI, - PART_NUMBER, - REVISION_NUMBER, - VENDOR_SERIAL_NUMBER, - MFG_DATE, - EXTENDED_SPECIFICATION_COMPLIANCE, - LENGTH_COPPER, - MEDIA_INTERFACE_TECHNOLOGY, - PAGE0_CSUM, - // Page 01h - PAGE_UPPER01H, - LENGTH_SMF, - LENGTH_OM5, - LENGTH_OM4, - LENGTH_OM3, - LENGTH_OM2, - VDM_DIAG_SUPPORT, - TX_CONTROL_SUPPORT, - RX_CONTROL_SUPPORT, - TX_BIAS_MULTIPLIER, - TX_SIG_INT_CONT_AD, - RX_SIG_INT_CONT_AD, - CDB_SUPPORT, - MEDIA_LANE_ASSIGNMENT, - DSP_FW_VERSION, - BUILD_REVISION, - APPLICATION_ADVERTISING2, - PAGE1_CSUM, - // Page 02h - PAGE_UPPER02H, - TEMPERATURE_THRESH, - VCC_THRESH, - TX_PWR_THRESH, - TX_BIAS_THRESH, - RX_PWR_THRESH, - PAGE2_CSUM, - // Page 10h - PAGE_UPPER10H, - DATA_PATH_DEINIT, - TX_POLARITY_FLIP, - TX_DISABLE, - TX_SQUELCH_DISABLE, - TX_FORCE_SQUELCH, - TX_ADAPTATION_FREEZE, - TX_ADAPTATION_STORE, - RX_POLARITY_FLIP, - RX_DISABLE, - RX_SQUELCH_DISABLE, - STAGE_CTRL_SET_0, - STAGE_CTRL_SET0_IMMEDIATE, - APP_SEL_ALL_LANES, - APP_SEL_LANE_1, - APP_SEL_LANE_2, - APP_SEL_LANE_3, - APP_SEL_LANE_4, - APP_SEL_LANE_5, - APP_SEL_LANE_6, - APP_SEL_LANE_7, - APP_SEL_LANE_8, - RX_CONTROL_PRE_CURSOR, - RX_CONTROL_POST_CURSOR, - RX_CONTROL_MAIN, - // Page 11h - PAGE_UPPER11H, - DATA_PATH_STATE, - TX_FAULT_FLAG, - TX_LOS_FLAG, - TX_LOL_FLAG, - TX_EQ_FLAG, - TX_PWR_FLAG, - TX_BIAS_FLAG, - RX_LOS_FLAG, - RX_LOL_FLAG, - RX_PWR_FLAG, - CHANNEL_TX_PWR, - CHANNEL_TX_BIAS, - CHANNEL_RX_PWR, - CONFIG_ERROR_LANES, - ACTIVE_CTRL_ALL_LANES, - ACTIVE_CTRL_LANE_1, - ACTIVE_CTRL_LANE_2, - ACTIVE_CTRL_LANE_3, - ACTIVE_CTRL_LANE_4, - ACTIVE_CTRL_LANE_5, - ACTIVE_CTRL_LANE_6, - ACTIVE_CTRL_LANE_7, - ACTIVE_CTRL_LANE_8, - TX_CDR_CONTROL, - RX_CDR_CONTROL, - RX_OUT_PRE_CURSOR, - RX_OUT_POST_CURSOR, - RX_OUT_MAIN, - // Page 13h - PAGE_UPPER13H, - // Page 14h - PAGE_UPPER14H, - // Page 1Ch - PAGE_UPPER1CH, - LOOPBACK_CAPABILITY, - PATTERN_CAPABILITY, - DIAGNOSTIC_CAPABILITY, - PATTERN_CHECKER_CAPABILITY, - HOST_SUPPORTED_GENERATOR_PATTERNS, - MEDIA_SUPPORTED_GENERATOR_PATTERNS, - HOST_SUPPORTED_CHECKER_PATTERNS, - MEDIA_SUPPORTED_CHECKER_PATTERNS, - HOST_GEN_ENABLE, - HOST_GEN_INV, - HOST_GEN_PRE_FEC, - HOST_PATTERN_SELECT_LANE_2_1, - HOST_PATTERN_SELECT_LANE_4_3, - HOST_PATTERN_SELECT_LANE_6_5, - HOST_PATTERN_SELECT_LANE_8_7, - MEDIA_GEN_ENABLE, - MEDIA_GEN_INV, - MEDIA_GEN_PRE_FEC, - MEDIA_PATTERN_SELECT_LANE_2_1, - MEDIA_PATTERN_SELECT_LANE_4_3, - MEDIA_PATTERN_SELECT_LANE_6_5, - MEDIA_PATTERN_SELECT_LANE_8_7, - HOST_CHECKER_ENABLE, - HOST_CHECKER_INV, - HOST_CHECKER_POST_FEC, - HOST_CHECKER_PATTERN_SELECT_LANE_2_1, - HOST_CHECKER_PATTERN_SELECT_LANE_4_3, - HOST_CHECKER_PATTERN_SELECT_LANE_6_5, - HOST_CHECKER_PATTERN_SELECT_LANE_8_7, - MEDIA_CHECKER_ENABLE, - MEDIA_CHECKER_INV, - MEDIA_CHECKER_POST_FEC, - MEDIA_CHECKER_PATTERN_SELECT_LANE_2_1, - MEDIA_CHECKER_PATTERN_SELECT_LANE_4_3, - MEDIA_CHECKER_PATTERN_SELECT_LANE_6_5, - MEDIA_CHECKER_PATTERN_SELECT_LANE_8_7, - REF_CLK_CTRL, - BER_CTRL, - HOST_NEAR_LB_EN, - MEDIA_NEAR_LB_EN, - HOST_FAR_LB_EN, - MEDIA_FAR_LB_EN, - REF_CLK_LOSS, - HOST_CHECKER_GATING_COMPLETE, - MEDIA_CHECKER_GATING_COMPLETE, - HOST_PPG_LOL, - MEDIA_PPG_LOL, - HOST_BERT_LOL, - MEDIA_BERT_LOL, - // Page 1Dh - PAGE_UPPER1DH, - DIAG_SEL, - HOST_LANE_GENERATOR_LOL_LATCH, - MEDIA_LANE_GENERATOR_LOL_LATCH, - HOST_LANE_CHECKER_LOL_LATCH, - MEDIA_LANE_CHECKER_LOL_LATCH, - HOST_BER, - MEDIA_BER_HOST_SNR, - MEDIA_SNR, - // Page 20h - PAGE_UPPER20H, - // Page 21h - PAGE_UPPER21H, - // Page 22h - PAGE_UPPER22H, - // Page 24h - PAGE_UPPER24H, - // Page 25h - PAGE_UPPER25H, - // Page 26h - PAGE_UPPER26H, - // Page 2Fh - PAGE_UPPER2FH, - VDM_GROUPS_SUPPORT, - VDM_LATCH_REQUEST, - VDM_LATCH_DONE, -}; - enum FieldMasks : uint8_t { CABLE_LENGTH_MASK = 0x3f, // Highest two bits are multipliers. CDR_IMPL_MASK = 0x01, diff --git a/fboss/qsfp_service/module/cmis/CmisModule.cpp b/fboss/qsfp_service/module/cmis/CmisModule.cpp index a015d5edc2a72..73fcda83ca216 100644 --- a/fboss/qsfp_service/module/cmis/CmisModule.cpp +++ b/fboss/qsfp_service/module/cmis/CmisModule.cpp @@ -13,7 +13,6 @@ #include "fboss/lib/platforms/PlatformMode.h" #include "fboss/lib/usb/TransceiverI2CApi.h" #include "fboss/qsfp_service/StatsPublisher.h" -#include "fboss/qsfp_service/TransceiverManager.h" #include "fboss/qsfp_service/if/gen-cpp2/qsfp_service_config_types.h" #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" #include "fboss/qsfp_service/lib/QsfpConfigParserHelper.h" @@ -593,11 +592,14 @@ void CmisModule::readCmisField( 127, sizeof(page), static_cast(CmisPages::LOWER)}, - &page); + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(CmisField::PAGE_CHANGE)); } qsfpImpl_->readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength, dataPage}, - data); + data, + CAST_TO_INT(field)); } void CmisModule::writeCmisField( @@ -616,11 +618,15 @@ void CmisModule::writeCmisField( 127, sizeof(page), static_cast(CmisPages::LOWER)}, - &page); + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(CmisField::PAGE_CHANGE)); } qsfpImpl_->writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength, dataPage}, - data); + data, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(field)); } FlagLevels CmisModule::getQsfpSensorFlags(CmisField fieldName, int offset) { diff --git a/fboss/qsfp_service/module/cmis/cmis.thrift b/fboss/qsfp_service/module/cmis/cmis.thrift new file mode 100644 index 0000000000000..4ed070bec361a --- /dev/null +++ b/fboss/qsfp_service/module/cmis/cmis.thrift @@ -0,0 +1,223 @@ +namespace cpp2 facebook.fboss +namespace go neteng.fboss.cmis +namespace php fboss +namespace py neteng.fboss.cmis +namespace py3 neteng.fboss +namespace py.asyncio neteng.fboss.asyncio.cmis + +enum CmisField { + // First 10 Fields reserved for fields common between + // cmis/sff/sff8472 + // Raw Read / Write. + RAW = 0, + // Field associated with CDB Command + CDB_COMMAND = 1, + // Field associated with FW upgrade + FW_UPGRADE = 2, + // Field associated with page change + PAGE_CHANGE = 3, + // Management Interface + MGMT_INTERFACE = 4, + // Part Number Operations + PART_NUM = 5, + // Firmware Version + FW_VERSION = 6, + + // Lower Page + PAGE_LOWER = 11, + IDENTIFIER = 12, + REVISION_COMPLIANCE = 13, + FLAT_MEM = 14, + MODULE_STATE = 15, + BANK0_FLAGS = 16, + BANK1_FLAGS = 17, + BANK2_FLAGS = 18, + BANK3_FLAGS = 19, + MODULE_FLAG = 20, + MODULE_ALARMS = 21, + TEMPERATURE = 22, + VCC = 23, + MODULE_CONTROL = 24, + FIRMWARE_REVISION = 25, + MEDIA_TYPE_ENCODINGS = 26, + APPLICATION_ADVERTISING1 = 27, + BANK_SELECT = 28, + PAGE_SELECT_BYTE = 29, + // Page 00h + PAGE_UPPER00H = 30, + VENDOR_NAME = 31, + VENDOR_OUI = 32, + PART_NUMBER = 33, + REVISION_NUMBER = 34, + VENDOR_SERIAL_NUMBER = 35, + MFG_DATE = 36, + EXTENDED_SPECIFICATION_COMPLIANCE = 37, + LENGTH_COPPER = 38, + MEDIA_INTERFACE_TECHNOLOGY = 39, + PAGE0_CSUM = 40, + // Page 01h + PAGE_UPPER01H = 41, + LENGTH_SMF = 42, + LENGTH_OM5 = 43, + LENGTH_OM4 = 44, + LENGTH_OM3 = 45, + LENGTH_OM2 = 46, + VDM_DIAG_SUPPORT = 47, + TX_CONTROL_SUPPORT = 48, + RX_CONTROL_SUPPORT = 49, + TX_BIAS_MULTIPLIER = 50, + TX_SIG_INT_CONT_AD = 51, + RX_SIG_INT_CONT_AD = 52, + CDB_SUPPORT = 53, + MEDIA_LANE_ASSIGNMENT = 54, + DSP_FW_VERSION = 55, + BUILD_REVISION = 56, + APPLICATION_ADVERTISING2 = 57, + PAGE1_CSUM = 58, + // Page 02h + PAGE_UPPER02H = 59, + TEMPERATURE_THRESH = 60, + VCC_THRESH = 61, + TX_PWR_THRESH = 62, + TX_BIAS_THRESH = 63, + RX_PWR_THRESH = 64, + PAGE2_CSUM = 65, + // Page 10h + PAGE_UPPER10H = 66, + DATA_PATH_DEINIT = 67, + TX_POLARITY_FLIP = 68, + TX_DISABLE = 69, + TX_SQUELCH_DISABLE = 70, + TX_FORCE_SQUELCH = 71, + TX_ADAPTATION_FREEZE = 72, + TX_ADAPTATION_STORE = 73, + RX_POLARITY_FLIP = 74, + RX_DISABLE = 75, + RX_SQUELCH_DISABLE = 76, + STAGE_CTRL_SET_0 = 77, + STAGE_CTRL_SET0_IMMEDIATE = 78, + APP_SEL_ALL_LANES = 79, + APP_SEL_LANE_1 = 80, + APP_SEL_LANE_2 = 81, + APP_SEL_LANE_3 = 82, + APP_SEL_LANE_4 = 83, + APP_SEL_LANE_5 = 84, + APP_SEL_LANE_6 = 85, + APP_SEL_LANE_7 = 86, + APP_SEL_LANE_8 = 87, + RX_CONTROL_PRE_CURSOR = 88, + RX_CONTROL_POST_CURSOR = 89, + RX_CONTROL_MAIN = 90, + // Page 11h + PAGE_UPPER11H = 91, + DATA_PATH_STATE = 92, + TX_FAULT_FLAG = 93, + TX_LOS_FLAG = 94, + TX_LOL_FLAG = 95, + TX_EQ_FLAG = 96, + TX_PWR_FLAG = 97, + TX_BIAS_FLAG = 98, + RX_LOS_FLAG = 99, + RX_LOL_FLAG = 100, + RX_PWR_FLAG = 101, + CHANNEL_TX_PWR = 102, + CHANNEL_TX_BIAS = 103, + CHANNEL_RX_PWR = 104, + CONFIG_ERROR_LANES = 105, + ACTIVE_CTRL_ALL_LANES = 106, + ACTIVE_CTRL_LANE_1 = 107, + ACTIVE_CTRL_LANE_2 = 108, + ACTIVE_CTRL_LANE_3 = 109, + ACTIVE_CTRL_LANE_4 = 110, + ACTIVE_CTRL_LANE_5 = 111, + ACTIVE_CTRL_LANE_6 = 112, + ACTIVE_CTRL_LANE_7 = 113, + ACTIVE_CTRL_LANE_8 = 114, + TX_CDR_CONTROL = 115, + RX_CDR_CONTROL = 116, + RX_OUT_PRE_CURSOR = 117, + RX_OUT_POST_CURSOR = 118, + RX_OUT_MAIN = 119, + // Page 13h + PAGE_UPPER13H = 120, + // Page 14h + PAGE_UPPER14H = 121, + // Page 1Ch + PAGE_UPPER1CH = 122, + LOOPBACK_CAPABILITY = 123, + PATTERN_CAPABILITY = 124, + DIAGNOSTIC_CAPABILITY = 125, + PATTERN_CHECKER_CAPABILITY = 126, + HOST_SUPPORTED_GENERATOR_PATTERNS = 127, + MEDIA_SUPPORTED_GENERATOR_PATTERNS = 128, + HOST_SUPPORTED_CHECKER_PATTERNS = 129, + MEDIA_SUPPORTED_CHECKER_PATTERNS = 130, + HOST_GEN_ENABLE = 131, + HOST_GEN_INV = 132, + HOST_GEN_PRE_FEC = 133, + HOST_PATTERN_SELECT_LANE_2_1 = 134, + HOST_PATTERN_SELECT_LANE_4_3 = 135, + HOST_PATTERN_SELECT_LANE_6_5 = 136, + HOST_PATTERN_SELECT_LANE_8_7 = 137, + MEDIA_GEN_ENABLE = 138, + MEDIA_GEN_INV = 139, + MEDIA_GEN_PRE_FEC = 140, + MEDIA_PATTERN_SELECT_LANE_2_1 = 141, + MEDIA_PATTERN_SELECT_LANE_4_3 = 142, + MEDIA_PATTERN_SELECT_LANE_6_5 = 143, + MEDIA_PATTERN_SELECT_LANE_8_7 = 144, + HOST_CHECKER_ENABLE = 145, + HOST_CHECKER_INV = 146, + HOST_CHECKER_POST_FEC = 147, + HOST_CHECKER_PATTERN_SELECT_LANE_2_1 = 148, + HOST_CHECKER_PATTERN_SELECT_LANE_4_3 = 149, + HOST_CHECKER_PATTERN_SELECT_LANE_6_5 = 150, + HOST_CHECKER_PATTERN_SELECT_LANE_8_7 = 151, + MEDIA_CHECKER_ENABLE = 152, + MEDIA_CHECKER_INV = 153, + MEDIA_CHECKER_POST_FEC = 154, + MEDIA_CHECKER_PATTERN_SELECT_LANE_2_1 = 155, + MEDIA_CHECKER_PATTERN_SELECT_LANE_4_3 = 156, + MEDIA_CHECKER_PATTERN_SELECT_LANE_6_5 = 157, + MEDIA_CHECKER_PATTERN_SELECT_LANE_8_7 = 158, + REF_CLK_CTRL = 159, + BER_CTRL = 160, + HOST_NEAR_LB_EN = 161, + MEDIA_NEAR_LB_EN = 162, + HOST_FAR_LB_EN = 163, + MEDIA_FAR_LB_EN = 164, + REF_CLK_LOSS = 165, + HOST_CHECKER_GATING_COMPLETE = 166, + MEDIA_CHECKER_GATING_COMPLETE = 167, + HOST_PPG_LOL = 168, + MEDIA_PPG_LOL = 169, + HOST_BERT_LOL = 170, + MEDIA_BERT_LOL = 171, + // Page 1Dh + PAGE_UPPER1DH = 172, + DIAG_SEL = 173, + HOST_LANE_GENERATOR_LOL_LATCH = 174, + MEDIA_LANE_GENERATOR_LOL_LATCH = 175, + HOST_LANE_CHECKER_LOL_LATCH = 176, + MEDIA_LANE_CHECKER_LOL_LATCH = 177, + HOST_BER = 178, + MEDIA_BER_HOST_SNR = 179, + MEDIA_SNR = 180, + // Page 20h + PAGE_UPPER20H = 181, + // Page 21h + PAGE_UPPER21H = 182, + // Page 22h + PAGE_UPPER22H = 183, + // Page 24h + PAGE_UPPER24H = 184, + // Page 25h + PAGE_UPPER25H = 185, + // Page 26h + PAGE_UPPER26H = 186, + // Page 2Fh + PAGE_UPPER2FH = 187, + VDM_GROUPS_SUPPORT = 188, + VDM_LATCH_REQUEST = 189, + VDM_LATCH_DONE = 190, +} diff --git a/fboss/qsfp_service/module/oss/SffModule.cpp b/fboss/qsfp_service/module/oss/SffModule.cpp index a2a034cd3e55b..36c333763ea2d 100644 --- a/fboss/qsfp_service/module/oss/SffModule.cpp +++ b/fboss/qsfp_service/module/oss/SffModule.cpp @@ -57,12 +57,12 @@ const std::optional SffModule::getPortPrbsStatsOverrideLocked( } void SffModule::readSffFr1Field( - SffFr1Field /* field */, + SffField /* field */, uint8_t* /* data */, bool /* skipPageChange */) {}; void SffModule::writeSffFr1Field( - SffFr1Field /* field */, + SffField /* field */, uint8_t* /* data */, bool /* skipPageChange */) {}; } // namespace fboss diff --git a/fboss/qsfp_service/module/sff/BUCK b/fboss/qsfp_service/module/sff/BUCK new file mode 100644 index 0000000000000..71ba97dffd1e7 --- /dev/null +++ b/fboss/qsfp_service/module/sff/BUCK @@ -0,0 +1,55 @@ +load("@fbcode_macros//build_defs:thrift_library.bzl", "thrift_library") + +oncall("fboss_optics_phy") + +thrift_library( + name = "sff", + go_thrift_namespaces = { + "sff.thrift": "neteng.fboss.sff", + }, + languages = [ + "cpp2", + "py", + "py3", + "py-asyncio", + "go", + "rust", + ], + no_plugin_deps = ["//thrift/annotation:all"], + py3_namespace = "neteng.fboss", + py_asyncio_base_module = "neteng.fboss.asyncio", + py_base_module = "neteng.fboss", + thrift_cpp2_options = "json,reflection", + thrift_py_options = "json,sort_keys", + thrift_rust_options = [ + "deprecated_default_enum_min_i32", + "serde", + ], + thrift_srcs = {"sff.thrift": []}, +) + +thrift_library( + name = "sff8472", + go_thrift_namespaces = { + "sff8472.thrift": "neteng.fboss.sff8472", + }, + languages = [ + "cpp2", + "py", + "py3", + "py-asyncio", + "go", + "rust", + ], + no_plugin_deps = ["//thrift/annotation:all"], + py3_namespace = "neteng.fboss", + py_asyncio_base_module = "neteng.fboss.asyncio", + py_base_module = "neteng.fboss", + thrift_cpp2_options = "json,reflection", + thrift_py_options = "json,sort_keys", + thrift_rust_options = [ + "deprecated_default_enum_min_i32", + "serde", + ], + thrift_srcs = {"sff8472.thrift": []}, +) diff --git a/fboss/qsfp_service/module/sff/Sff8472FieldInfo.cpp b/fboss/qsfp_service/module/sff/Sff8472FieldInfo.cpp index bfda8ffa4c325..06160c6d3724f 100644 --- a/fboss/qsfp_service/module/sff/Sff8472FieldInfo.cpp +++ b/fboss/qsfp_service/module/sff/Sff8472FieldInfo.cpp @@ -8,7 +8,6 @@ */ #include "fboss/qsfp_service/module/sff/Sff8472FieldInfo.h" -#include "fboss/agent/FbossError.h" /* * Parse transceiver data fields, as outlined in various documents diff --git a/fboss/qsfp_service/module/sff/Sff8472FieldInfo.h b/fboss/qsfp_service/module/sff/Sff8472FieldInfo.h index 3f4e719143126..2782c7ee866fe 100644 --- a/fboss/qsfp_service/module/sff/Sff8472FieldInfo.h +++ b/fboss/qsfp_service/module/sff/Sff8472FieldInfo.h @@ -10,6 +10,7 @@ #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" #include "fboss/qsfp_service/module/QsfpFieldInfo.h" +#include "fboss/qsfp_service/module/sff/gen-cpp2/sff8472_types.h" /* * Parse transceiver data fields, as outlined in various documents @@ -21,32 +22,6 @@ namespace fboss { enum class Sff8472Pages; -enum class Sff8472Field { - IDENTIFIER, // Type of Transceiver - ETHERNET_10G_COMPLIANCE_CODE, // 10G Ethernet Compliance codes - - ALARM_WARNING_THRESHOLDS, - TEMPERATURE, - VCC, - CHANNEL_TX_BIAS, - CHANNEL_TX_PWR, - CHANNEL_RX_PWR, - STATUS_AND_CONTROL_BITS, - ALARM_WARNING_FLAGS, - - EXTENDED_SPEC_COMPLIANCE_CODE, - VENDOR_NAME, - VENDOR_OUI, - VENDOR_PART_NUMBER, - VENDOR_REVISION_NUMBER, - VENDOR_SERIAL_NUMBER, - VENDOR_MFG_DATE, - DOM_TYPE, - - PAGE_LOWER_A0, - PAGE_LOWER_A2, -}; - enum FieldMasks : uint8_t { RX_LOS_MASK = 1 << 1, TX_FAULT_MASK = 1 << 2, diff --git a/fboss/qsfp_service/module/sff/Sff8472Module.cpp b/fboss/qsfp_service/module/sff/Sff8472Module.cpp index 41e17c3a93c4a..055e286ddc602 100644 --- a/fboss/qsfp_service/module/sff/Sff8472Module.cpp +++ b/fboss/qsfp_service/module/sff/Sff8472Module.cpp @@ -21,6 +21,7 @@ namespace fboss { static std::map mediaInterfaceMapping = { + {Ethernet10GComplianceCode::CR_10G, MediaInterfaceCode::CR_10G}, {Ethernet10GComplianceCode::LR_10G, MediaInterfaceCode::LR_10G}, {Ethernet10GComplianceCode::SR_10G, MediaInterfaceCode::SR_10G}, }; @@ -124,7 +125,9 @@ void Sff8472Module::readSff8472Field(Sff8472Field field, uint8_t* data) { getSfpFieldAddress( field, dataPage, dataOffset, dataLength, transceiverI2CAddress); qsfpImpl_->readTransceiver( - {transceiverI2CAddress, dataOffset, dataLength}, data); + {transceiverI2CAddress, dataOffset, dataLength}, + data, + CAST_TO_INT(field)); } void Sff8472Module::writeSff8472Field(Sff8472Field field, uint8_t* data) { @@ -133,7 +136,10 @@ void Sff8472Module::writeSff8472Field(Sff8472Field field, uint8_t* data) { getSfpFieldAddress( field, dataPage, dataOffset, dataLength, transceiverI2CAddress); qsfpImpl_->writeTransceiver( - {transceiverI2CAddress, dataOffset, dataLength}, data); + {transceiverI2CAddress, dataOffset, dataLength}, + data, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(field)); } void Sff8472Module::getSfpValue( @@ -283,6 +289,7 @@ TransmitterTechnology Sff8472Module::getQsfpTransmitterTechnology() const { case MediaInterfaceCode::LR_10G: return TransmitterTechnology::OPTICAL; case MediaInterfaceCode::BASE_T_10G: + case MediaInterfaceCode::CR_10G: return TransmitterTechnology::COPPER; default: return TransmitterTechnology::UNKNOWN; diff --git a/fboss/qsfp_service/module/sff/SffFieldInfo.cpp b/fboss/qsfp_service/module/sff/SffFieldInfo.cpp index 4756ea48ecb05..416b9a17ba121 100644 --- a/fboss/qsfp_service/module/sff/SffFieldInfo.cpp +++ b/fboss/qsfp_service/module/sff/SffFieldInfo.cpp @@ -8,7 +8,6 @@ */ #include "fboss/qsfp_service/module/sff/SffFieldInfo.h" -#include "fboss/agent/FbossError.h" /* * Parse transceiver data fields, as outlined in various documents diff --git a/fboss/qsfp_service/module/sff/SffFieldInfo.h b/fboss/qsfp_service/module/sff/SffFieldInfo.h index 1ebd4c30de4e4..4fa92def03b2e 100644 --- a/fboss/qsfp_service/module/sff/SffFieldInfo.h +++ b/fboss/qsfp_service/module/sff/SffFieldInfo.h @@ -10,6 +10,7 @@ #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" #include "fboss/qsfp_service/module/QsfpFieldInfo.h" +#include "fboss/qsfp_service/module/sff/gen-cpp2/sff_types.h" /* * Parse transceiver data fields, as outlined in various documents @@ -22,111 +23,6 @@ namespace fboss { enum class SffPages; -enum class SffField { - // Fields for entire page reads - PAGE_LOWER, - PAGE_UPPER0, - PAGE_UPPER3, - // Shared QSFP and SFP fields: - IDENTIFIER, // Type of Transceiver - STATUS, // Support flags for upper pages - LOS, // Loss of Signal - FAULT, // TX Faults - LOL, // Loss of Lock - TEMPERATURE_ALARMS, - VCC_ALARMS, // Voltage - CHANNEL_RX_PWR_ALARMS, - CHANNEL_TX_BIAS_ALARMS, - CHANNEL_TX_PWR_ALARMS, - TEMPERATURE, - VCC, // Voltage - CHANNEL_RX_PWR, - CHANNEL_TX_BIAS, - CHANNEL_TX_PWR, - TX_DISABLE, - RATE_SELECT_RX, - RATE_SELECT_TX, - POWER_CONTROL, - CDR_CONTROL, // Whether CDR is enabled - ETHERNET_COMPLIANCE, - EXTENDED_IDENTIFIER, - PAGE_SELECT_BYTE, - LENGTH_SM_KM, // Single mode, in km - LENGTH_SM, // Single mode in 100m (not in QSFP) - LENGTH_OM3, - LENGTH_OM2, - LENGTH_OM1, - LENGTH_COPPER, - LENGTH_COPPER_DECIMETERS, - DAC_GAUGE, - - DEVICE_TECHNOLOGY, // Device or cable technology of free side device - OPTIONS, // Variety of options, including rate select support - VENDOR_NAME, // QSFP Vendor Name (ASCII) - VENDOR_OUI, // QSFP Vendor IEEE company ID - PART_NUMBER, // Part NUmber provided by QSFP vendor (ASCII) - REVISION_NUMBER, // Revision number - VENDOR_SERIAL_NUMBER, // Vendor Serial Number (ASCII) - MFG_DATE, // Manufacturing date code - DIAGNOSTIC_MONITORING_TYPE, // Diagnostic monitoring implemented - TEMPERATURE_THRESH, - VCC_THRESH, - RX_PWR_THRESH, - TX_BIAS_THRESH, - TX_PWR_THRESH, - EXTENDED_RATE_COMPLIANCE, - TX_EQUALIZATION, - RX_EMPHASIS, - RX_AMPLITUDE, - SQUELCH_CONTROL, - TXRX_OUTPUT_CONTROL, - EXTENDED_SPECIFICATION_COMPLIANCE, - FR1_PRBS_SUPPORT, - TX_CONTROL_SUPPORT, - RX_CONTROL_SUPPORT, - - PAGE0_CSUM, - PAGE0_EXTCSUM, - PAGE1_CSUM, - - // SFP-specific Fields - /* 0xA0 Address Fields */ - EXT_IDENTIFIER, // Extended type of transceiver - CONNECTOR_TYPE, // Code for Connector Type - TRANSCEIVER_CODE, // Code for Electronic or optical capability - ENCODING_CODE, // High speed Serial encoding algo code - SIGNALLING_RATE, // nominal signalling rate - RATE_IDENTIFIER, // type of rate select functionality - TRANCEIVER_CAPABILITY, // Code for Electronic or optical capability - WAVELENGTH, // laser wavelength - CHECK_CODE_BASEID, // Check code for the above fields - // Extended options - ENABLED_OPTIONS, // Indicates the optional transceiver signals enabled - UPPER_BIT_RATE_MARGIN, // upper bit rate margin - LOWER_BIT_RATE_MARGIN, // lower but rate margin - ENHANCED_OPTIONS, // Enhanced options implemented - SFF_COMPLIANCE, // revision number of SFF compliance - CHECK_CODE_EXTENDED_OPT, // check code for the extended options - VENDOR_EEPROM, - - /* 0xA2 address Fields */ - /* Diagnostics */ - ALARM_THRESHOLD_VALUES, // diagnostic flag alarm and warning thresh values - EXTERNAL_CALIBRATION, // diagnostic calibration constants - CHECK_CODE_DMI, // Check code for base Diagnostic Fields - DIAGNOSTICS, // Diagnostic Monitor Data - STATUS_CONTROL, // Optional Status and Control bits - ALARM_WARN_FLAGS, // Diagnostic alarm and warning flag - EXTENDED_STATUS_CONTROL, // Extended status and control bytes - /* General Purpose */ - VENDOR_MEM_ADDRESS, // Vendor Specific memory address - USER_EEPROM, // User Writable NVM - VENDOR_CONTROL, // Vendor Specific Control - - /* Miniphoton specific */ - MINIPHOTON_LOOPBACK, // Miniphoton Loopback Mode -}; - enum DeviceTechnologySff : uint8_t { TRANSMITTER_TECH_SHIFT = 4, OPTICAL_MAX_VALUE_SFF = 0b1001, diff --git a/fboss/qsfp_service/module/sff/SffModule.cpp b/fboss/qsfp_service/module/sff/SffModule.cpp index eb13dcd07cee5..c78eda61b7d35 100644 --- a/fboss/qsfp_service/module/sff/SffModule.cpp +++ b/fboss/qsfp_service/module/sff/SffModule.cpp @@ -199,7 +199,7 @@ void SffModule::readSffField( bool skipPageChange) { int dataLength, dataPage, dataOffset; getQsfpFieldAddress(field, dataPage, dataOffset, dataLength); - readField(dataPage, dataOffset, dataLength, data, skipPageChange); + readField(field, dataPage, dataOffset, dataLength, data, skipPageChange); } void SffModule::writeSffField( @@ -208,10 +208,11 @@ void SffModule::writeSffField( bool skipPageChange) { int dataLength, dataPage, dataOffset; getQsfpFieldAddress(field, dataPage, dataOffset, dataLength); - writeField(dataPage, dataOffset, dataLength, data, skipPageChange); + writeField(field, dataPage, dataOffset, dataLength, data, skipPageChange); } void SffModule::readField( + SffField field, int dataPage, int dataOffset, int dataLength, @@ -223,13 +224,19 @@ void SffModule::readField( // changing page) and when the skipPageChange argument is not true uint8_t page = static_cast(dataPage); qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, &page); + {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(SffField::PAGE_CHANGE)); } qsfpImpl_->readTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength}, data); + {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength}, + data, + CAST_TO_INT(field)); } void SffModule::writeField( + SffField field, int dataPage, int dataOffset, int dataLength, @@ -241,10 +248,16 @@ void SffModule::writeField( // changing page) and when the skipPageChange argument is not true uint8_t page = static_cast(dataPage); qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, &page); + {TransceiverAccessParameter::ADDR_QSFP, 127, sizeof(page)}, + &page, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(SffField::PAGE_CHANGE)); } qsfpImpl_->writeTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength}, data); + {TransceiverAccessParameter::ADDR_QSFP, dataOffset, dataLength}, + data, + POST_I2C_WRITE_DELAY_US, + CAST_TO_INT(field)); } FlagLevels SffModule::getQsfpSensorFlags(SffField fieldName) { diff --git a/fboss/qsfp_service/module/sff/SffModule.h b/fboss/qsfp_service/module/sff/SffModule.h index 216a2ac3816f6..1f9c4bd7c44a3 100644 --- a/fboss/qsfp_service/module/sff/SffModule.h +++ b/fboss/qsfp_service/module/sff/SffModule.h @@ -19,7 +19,6 @@ enum class SffPages : int { }; enum class SffField; -enum class SffFr1Field; class SffModule : public QsfpModule { public: @@ -308,25 +307,23 @@ class SffModule : public QsfpModule { void readSffField(SffField field, uint8_t* data, bool skipPageChange = false); void writeSffField(SffField field, uint8_t* data, bool skipPageChange = false); - void readSffFr1Field( - SffFr1Field field, - uint8_t* data, - bool skipPageChange = false); - void writeSffFr1Field( - SffFr1Field field, - uint8_t* data, - bool skipPageChange = false); + void + readSffFr1Field(SffField field, uint8_t* data, bool skipPageChange = false); + void + writeSffFr1Field(SffField field, uint8_t* data, bool skipPageChange = false); /* readField and writeField are not intended to be used directly in the * application code. These just help the readSffField/writeSffField to make * the appropriate read/writeTransceiver calls. */ void readField( + SffField field, int dataPage, int dataOffset, int dataLength, uint8_t* data, bool skipPageChange); void writeField( + SffField field, int dataPage, int dataOffset, int dataLength, diff --git a/fboss/qsfp_service/module/sff/sff.thrift b/fboss/qsfp_service/module/sff/sff.thrift new file mode 100644 index 0000000000000..30a0f42da0a11 --- /dev/null +++ b/fboss/qsfp_service/module/sff/sff.thrift @@ -0,0 +1,143 @@ +namespace cpp2 facebook.fboss +namespace go neteng.fboss.sff +namespace php fboss +namespace py neteng.fboss.sff +namespace py3 neteng.fboss +namespace py.asyncio neteng.fboss.asyncio.sff + +enum SffField { + // First 10 Fields reserved for fields common between + // cmis/sff/sff8472 + // Raw Read/Write. + RAW = 0, + // Field associated with CDB Command + CDB_COMMAND = 1, + // Field associated with FW upgrade + FW_UPGRADE = 2, + // Page Change + PAGE_CHANGE = 3, + // Management Interface + MGMT_INTERFACE = 4, + // Part Number Operations + PART_NUM = 5, + // Firmware Version + FW_VERSION = 6, + + // Fields for entire page reads + PAGE_LOWER = 11, + PAGE_UPPER0 = 12, + PAGE_UPPER3 = 13, + // Shared QSFP and SFP fields: + IDENTIFIER = 14, // Type of Transceiver + STATUS = 15, // Support flags for upper pages + LOS = 16, // Loss of Signal + FAULT = 17, // TX Faults + LOL = 18, // Loss of Lock + TEMPERATURE_ALARMS = 19, + VCC_ALARMS = 20, // Voltage + CHANNEL_RX_PWR_ALARMS = 21, + CHANNEL_TX_BIAS_ALARMS = 22, + CHANNEL_TX_PWR_ALARMS = 23, + TEMPERATURE = 24, + VCC = 25, // Voltage + CHANNEL_RX_PWR = 26, + CHANNEL_TX_BIAS = 27, + CHANNEL_TX_PWR = 28, + TX_DISABLE = 29, + RATE_SELECT_RX = 30, + RATE_SELECT_TX = 31, + POWER_CONTROL = 32, + CDR_CONTROL = 33, // Whether CDR is enabled + ETHERNET_COMPLIANCE = 34, + EXTENDED_IDENTIFIER = 35, + PAGE_SELECT_BYTE = 36, + LENGTH_SM_KM = 37, // Single mode = , in km + LENGTH_SM = 38, // Single mode in 100m (not in QSFP) + LENGTH_OM3 = 39, + LENGTH_OM2 = 40, + LENGTH_OM1 = 41, + LENGTH_COPPER = 42, + LENGTH_COPPER_DECIMETERS = 43, + DAC_GAUGE = 44, + + DEVICE_TECHNOLOGY = 45, // Device or cable technology of free side device + OPTIONS = 46, // Variety of options = , including rate select support + VENDOR_NAME = 47, // QSFP Vendor Name (ASCII) + VENDOR_OUI = 48, // QSFP Vendor IEEE company ID + PART_NUMBER = 49, // Part NUmber provided by QSFP vendor (ASCII) + REVISION_NUMBER = 50, // Revision number + VENDOR_SERIAL_NUMBER = 51, // Vendor Serial Number (ASCII) + MFG_DATE = 52, // Manufacturing date code + DIAGNOSTIC_MONITORING_TYPE = 53, // Diagnostic monitoring implemented + TEMPERATURE_THRESH = 54, + VCC_THRESH = 55, + RX_PWR_THRESH = 56, + TX_BIAS_THRESH = 57, + TX_PWR_THRESH = 58, + EXTENDED_RATE_COMPLIANCE = 59, + TX_EQUALIZATION = 60, + RX_EMPHASIS = 61, + RX_AMPLITUDE = 62, + SQUELCH_CONTROL = 63, + TXRX_OUTPUT_CONTROL = 64, + EXTENDED_SPECIFICATION_COMPLIANCE = 65, + FR1_PRBS_SUPPORT = 66, + TX_CONTROL_SUPPORT = 67, + RX_CONTROL_SUPPORT = 68, + + PAGE0_CSUM = 69, + PAGE0_EXTCSUM = 70, + PAGE1_CSUM = 71, + + // SFP-specific Fields + /* 0xA0 Address Fields */ + EXT_IDENTIFIER = 72, // Extended type of transceiver + CONNECTOR_TYPE = 73, // Code for Connector Type + TRANSCEIVER_CODE = 74, // Code for Electronic or optical capability + ENCODING_CODE = 75, // High speed Serial encoding algo code + SIGNALLING_RATE = 76, // nominal signalling rate + RATE_IDENTIFIER = 77, // type of rate select functionality + TRANCEIVER_CAPABILITY = 78, // Code for Electronic or optical capability + WAVELENGTH = 79, // laser wavelength + CHECK_CODE_BASEID = 80, // Check code for the above fields + // Extended options + ENABLED_OPTIONS = 81, // Indicates the optional transceiver signals enabled + UPPER_BIT_RATE_MARGIN = 82, // upper bit rate margin + LOWER_BIT_RATE_MARGIN = 83, // lower but rate margin + ENHANCED_OPTIONS = 84, // Enhanced options implemented + SFF_COMPLIANCE = 85, // revision number of SFF compliance + CHECK_CODE_EXTENDED_OPT = 86, // check code for the extended options + VENDOR_EEPROM = 87, + /* 0xA2 address Fields */ + /* Diagnostics */ + ALARM_THRESHOLD_VALUES = 88, // diagnostic flag alarm and warning thresh values + EXTERNAL_CALIBRATION = 89, // diagnostic calibration constants + CHECK_CODE_DMI = 90, // Check code for base Diagnostic Fields + DIAGNOSTICS = 91, // Diagnostic Monitor Data + STATUS_CONTROL = 92, // Optional Status and Control bits + ALARM_WARN_FLAGS = 93, // Diagnostic alarm and warning flag + EXTENDED_STATUS_CONTROL = 94, // Extended status and control bytes + /* General Purpose */ + VENDOR_MEM_ADDRESS = 95, // Vendor Specific memory address + USER_EEPROM = 96, // User Writable NVM + VENDOR_CONTROL = 97, // Vendor Specific Control + /* Miniphoton specific */ + MINIPHOTON_LOOPBACK = 98, // Miniphoton Loopback Mode + // PRBS Related Fields. These are vendor specific. + PRBS_PATTERN_CONTROL = 99, + PRBS_GENERATOR_CONTROL = 100, + PRBS_CHECKER_CONTROL = 101, + PRBS_COUNTER_FREEZE = 102, + PRBS_HOST_BIT_COUNT_LANE0 = 103, + PRBS_HOST_BIT_COUNT_LANE1 = 104, + PRBS_HOST_BIT_COUNT_LANE2 = 105, + PRBS_HOST_BIT_COUNT_LANE3 = 106, + PRBS_HOST_ERROR_COUNT_LANE0 = 107, + PRBS_HOST_ERROR_COUNT_LANE1 = 108, + PRBS_HOST_ERROR_COUNT_LANE2 = 109, + PRBS_HOST_ERROR_COUNT_LANE3 = 110, + PRBS_MEDIA_BIT_COUNT = 111, + PRBS_MEDIA_ERROR_COUNT = 112, + PRBS_HOST_LOCK = 113, + PRBS_MEDIA_LOCK = 114, +} diff --git a/fboss/qsfp_service/module/sff/sff8472.thrift b/fboss/qsfp_service/module/sff/sff8472.thrift new file mode 100644 index 0000000000000..2237f8931eb6a --- /dev/null +++ b/fboss/qsfp_service/module/sff/sff8472.thrift @@ -0,0 +1,49 @@ +namespace cpp2 facebook.fboss +namespace go neteng.fboss.sff8472 +namespace php fboss +namespace py neteng.fboss.sff8472 +namespace py3 neteng.fboss +namespace py.asyncio neteng.fboss.asyncio.sff8472 + +enum Sff8472Field { + // First 10 Fields reserved for fields common between + // cmis/sff/sff8472 + // Raw Read/write. + RAW = 0, + // Field associated with CDB Command + CDB_COMMAND = 1, + // Field associated with FW upgrade + FW_UPGRADE = 2, + // Page Change + PAGE_CHANGE = 3, + // Management Interface + MGMT_INTERFACE = 4, + // Part Number Operations + PART_NUM = 5, + // Firmware Version + FW_VERSION = 6, + + IDENTIFIER = 11, // Type of Transceiver + ETHERNET_10G_COMPLIANCE_CODE = 12, // 10G Ethernet Compliance codes + + ALARM_WARNING_THRESHOLDS = 13, + TEMPERATURE = 14, + VCC = 15, + CHANNEL_TX_BIAS = 16, + CHANNEL_TX_PWR = 17, + CHANNEL_RX_PWR = 18, + STATUS_AND_CONTROL_BITS = 19, + ALARM_WARNING_FLAGS = 20, + + EXTENDED_SPEC_COMPLIANCE_CODE = 21, + VENDOR_NAME = 22, + VENDOR_OUI = 23, + VENDOR_PART_NUMBER = 24, + VENDOR_REVISION_NUMBER = 25, + VENDOR_SERIAL_NUMBER = 26, + VENDOR_MFG_DATE = 27, + DOM_TYPE = 28, + + PAGE_LOWER_A0 = 29, + PAGE_LOWER_A2 = 30, +} diff --git a/fboss/qsfp_service/module/tests/BUCK b/fboss/qsfp_service/module/tests/BUCK index 8489b91c00c6e..bd31b9b65a0ab 100644 --- a/fboss/qsfp_service/module/tests/BUCK +++ b/fboss/qsfp_service/module/tests/BUCK @@ -59,6 +59,7 @@ cpp_unittest( deps = [ "//fboss/lib/usb:transceiver_access_parameter", "//fboss/qsfp_service/module:i2c_log_buffer", + "//fboss/qsfp_service/module/cmis:cmis-cpp2-types", "//folly:random", "//folly/testing:test_util", ], diff --git a/fboss/qsfp_service/module/tests/FakeTransceiverImpl.cpp b/fboss/qsfp_service/module/tests/FakeTransceiverImpl.cpp index 7242434d1baa0..7607125a99d3d 100644 --- a/fboss/qsfp_service/module/tests/FakeTransceiverImpl.cpp +++ b/fboss/qsfp_service/module/tests/FakeTransceiverImpl.cpp @@ -25,7 +25,8 @@ bool FakeTransceiverImpl::detectTransceiver() { int FakeTransceiverImpl::readTransceiver( const TransceiverAccessParameter& param, - uint8_t* fieldValue) { + uint8_t* fieldValue, + const int /*field*/) { int read = 0; CHECK(param.i2cAddress.has_value()); auto dataAddress = *(param.i2cAddress); @@ -62,7 +63,8 @@ int FakeTransceiverImpl::readTransceiver( int FakeTransceiverImpl::writeTransceiver( const TransceiverAccessParameter& param, const uint8_t* fieldValue, - uint64_t /*unused*/) { + uint64_t /*unused*/, + const int /*field*/) { CHECK(param.i2cAddress.has_value()); auto dataAddress = *(param.i2cAddress); auto offset = param.offset; diff --git a/fboss/qsfp_service/module/tests/FakeTransceiverImpl.h b/fboss/qsfp_service/module/tests/FakeTransceiverImpl.h index ffcd20b7cdbd2..b1796194f0cc1 100644 --- a/fboss/qsfp_service/module/tests/FakeTransceiverImpl.h +++ b/fboss/qsfp_service/module/tests/FakeTransceiverImpl.h @@ -28,12 +28,14 @@ class FakeTransceiverImpl : public TransceiverImpl { /* This function is used to read the SFP EEprom */ int readTransceiver( const TransceiverAccessParameter& param, - uint8_t* fieldValue) override; + uint8_t* fieldValue, + const int field) override; /* write to the eeprom (usually to change the page setting) */ int writeTransceiver( const TransceiverAccessParameter& param, const uint8_t* fieldValue, - uint64_t sleep = 0) override; + uint64_t sleep, + const int field) override; /* This function detects if a SFP is present on the particular port */ bool detectTransceiver() override; /* Returns the name for the port */ diff --git a/fboss/qsfp_service/module/tests/I2cLogBufferTest.cpp b/fboss/qsfp_service/module/tests/I2cLogBufferTest.cpp index 4bebbcf76f20b..79b96891e8286 100644 --- a/fboss/qsfp_service/module/tests/I2cLogBufferTest.cpp +++ b/fboss/qsfp_service/module/tests/I2cLogBufferTest.cpp @@ -12,9 +12,12 @@ #include "fboss/lib/usb/TransceiverAccessParameter.h" #include "fboss/qsfp_service/module/I2cLogBuffer.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" namespace facebook::fboss { +constexpr int kField = static_cast(CmisField::RAW); + namespace { constexpr size_t kFullBuffer = 10; } // namespace @@ -50,6 +53,37 @@ class I2cLogBufferTest : public ::testing::Test { return I2cLogBuffer(config, kLogFile_); } + // Check that the log file contains the port names and the field names. + void checkLogFileContainsWords( + const std::string& fileName, + const std::set& ports, + const std::array& fields) { + std::ifstream file(fileName); + CHECK(file.is_open()); + std::unordered_set expectedWords{ports.begin(), ports.end()}; + for (const auto& field : fields) { + // Expect field name up to kI2cFieldNameLength characters. + expectedWords.insert(apache::thrift::util::enumNameSafe(field).substr( + 0, kI2cFieldNameLength)); + } + // Check that we have unique words. + CHECK_EQ(expectedWords.size(), ports.size() + fields.size()); + + std::unordered_set logWords; + std::string line; + while (std::getline(file, line)) { + std::istringstream iss(line); + std::string word; + while (iss >> word) { + logWords.insert(word); + } + } + for (auto& word : expectedWords) { + EXPECT_TRUE(logWords.find(word) != logWords.end()) + << "Word " << word << " Not Found In Log"; + } + } + std::vector data_; TransceiverAccessParameter param_; }; @@ -63,13 +97,13 @@ TEST_F(I2cLogBufferTest, basic) { for (int i = 0; i < kNumElements; i++) { data_[0] = i; param_.i2cAddress = i; - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, kNumElements); - EXPECT_EQ(count.second, kNumElements); + EXPECT_EQ(count.totalEntries, kNumElements); + EXPECT_EQ(count.bufferEntries, kNumElements); EXPECT_EQ(entries.size(), kFullBuffer); for (int i = 0; i < kNumElements; i++) { EXPECT_EQ(entries[i].param.i2cAddress, i); @@ -79,8 +113,8 @@ TEST_F(I2cLogBufferTest, basic) { // Once dumped, the logBuffer will be empty. Another dump // will have a count of 0. count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 0); - EXPECT_EQ(count.second, 0); + EXPECT_EQ(count.totalEntries, 0); + EXPECT_EQ(count.bufferEntries, 0); } TEST_F(I2cLogBufferTest, basicFullBuffer) { @@ -90,14 +124,14 @@ TEST_F(I2cLogBufferTest, basicFullBuffer) { for (int i = 0; i < kFullBuffer; i++) { data_[0] = i; param_.i2cAddress = i; - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } std::vector entries; auto count = logBuffer.dump(entries); // total entries and entries available in log are the same - EXPECT_EQ(count.first, kFullBuffer); - EXPECT_EQ(count.second, kFullBuffer); + EXPECT_EQ(count.totalEntries, kFullBuffer); + EXPECT_EQ(count.bufferEntries, kFullBuffer); EXPECT_EQ(entries.size(), kFullBuffer); for (int i = 0; i < kFullBuffer; i++) { EXPECT_EQ(entries[i].param.i2cAddress, i); @@ -107,8 +141,8 @@ TEST_F(I2cLogBufferTest, basicFullBuffer) { // Once dumped, the logBuffer will be empty. Another dump // will have a count of 0. count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 0); - EXPECT_EQ(count.second, 0); + EXPECT_EQ(count.totalEntries, 0); + EXPECT_EQ(count.bufferEntries, 0); } TEST_F(I2cLogBufferTest, basicFullBufferAnd1Element) { @@ -119,13 +153,13 @@ TEST_F(I2cLogBufferTest, basicFullBufferAnd1Element) { for (int i = 0; i < kNumElements; i++) { data_[0] = i; param_.i2cAddress = i; - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, kFullBuffer + 1); - EXPECT_EQ(count.second, kFullBuffer); + EXPECT_EQ(count.totalEntries, kFullBuffer + 1); + EXPECT_EQ(count.bufferEntries, kFullBuffer); EXPECT_EQ(entries.size(), kFullBuffer); for (int i = 0; i < kFullBuffer; i++) { EXPECT_EQ(entries[i].param.i2cAddress, i + 1); @@ -135,8 +169,8 @@ TEST_F(I2cLogBufferTest, basicFullBufferAnd1Element) { // Once dumped, the logBuffer will be empty. Another dump // will have a count of 0. count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 0); - EXPECT_EQ(count.second, 0); + EXPECT_EQ(count.totalEntries, 0); + EXPECT_EQ(count.bufferEntries, 0); } TEST_F(I2cLogBufferTest, testRange) { @@ -160,7 +194,8 @@ TEST_F(I2cLogBufferTest, testRange) { for (int i = 0; i < inserts; i++) { data_[0] = i; param_.i2cAddress = i; - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log( + param_, kField, data_.data(), I2cLogBuffer::Operation::Write); } std::vector entries; @@ -173,10 +208,10 @@ TEST_F(I2cLogBufferTest, testRange) { EXPECT_EQ(0, logBuffer.getTotalEntries()); // Expect that total logged elements is number of inserts - EXPECT_EQ(count.first, inserts); + EXPECT_EQ(count.totalEntries, inserts); // Expect that we have the following number of elements: // minimum of the number of logged elements or LogBuffer size - EXPECT_EQ(count.second, std::min(inserts, bufferSize)); + EXPECT_EQ(count.bufferEntries, std::min(inserts, bufferSize)); // The updated vector size is always the size of the LogBuffer. EXPECT_EQ(entries.size(), bufferSize); // if the number of inserts is smaller than or equal to bufferSize: @@ -193,8 +228,8 @@ TEST_F(I2cLogBufferTest, testRange) { // Once dumped, the logBuffer will be empty. Another dump // will have a count of 0. count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 0); - EXPECT_EQ(count.second, 0); + EXPECT_EQ(count.totalEntries, 0); + EXPECT_EQ(count.bufferEntries, 0); } } } @@ -210,12 +245,13 @@ TEST_F(I2cLogBufferTest, testLargeData) { // insert kFullBuffer elements for (int i = 0; i < kFullBuffer; i++) { - logBuffer.log(param, largeData.data(), I2cLogBuffer::Operation::Read); + logBuffer.log( + param, kField, largeData.data(), I2cLogBuffer::Operation::Read); } std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, kFullBuffer); - EXPECT_EQ(count.second, kFullBuffer); + EXPECT_EQ(count.totalEntries, kFullBuffer); + EXPECT_EQ(count.bufferEntries, kFullBuffer); EXPECT_EQ(entries.size(), kFullBuffer); for (int i = 0; i < kFullBuffer; i++) { @@ -237,7 +273,7 @@ TEST_F(I2cLogBufferTest, edgeCases) { I2cLogBuffer logBuffer = createBuffer(kFullBuffer); // nullptr data EXPECT_THROW( - logBuffer.log(param_, nullptr, I2cLogBuffer::Operation::Read), + logBuffer.log(param_, kField, nullptr, I2cLogBuffer::Operation::Read), std::invalid_argument); } @@ -246,16 +282,16 @@ TEST_F(I2cLogBufferTest, testOnlyRead) { createBuffer(kFullBuffer, /*read*/ true, /*write*/ false); // insert 3 elements Read for (int i = 0; i < 3; i++) { - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } // insert 4 elements write (should not log) for (int i = 0; i < 4; i++) { - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); } std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 3); - EXPECT_EQ(count.second, 3); + EXPECT_EQ(count.totalEntries, 3); + EXPECT_EQ(count.bufferEntries, 3); } TEST_F(I2cLogBufferTest, testOnlyWrite) { @@ -263,37 +299,38 @@ TEST_F(I2cLogBufferTest, testOnlyWrite) { createBuffer(kFullBuffer, /*read*/ false, /*write*/ true); // insert 3 elements Read (should not log) for (int i = 0; i < 3; i++) { - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } // insert 4 elements write for (int i = 0; i < 4; i++) { - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); } std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 4); - EXPECT_EQ(count.first, 4); + EXPECT_EQ(count.totalEntries, 4); + EXPECT_EQ(count.totalEntries, 4); } TEST_F(I2cLogBufferTest, testDisableOnFail) { I2cLogBuffer logBuffer = createBuffer( kFullBuffer, /*read*/ true, /*write*/ true, /*disableOnFail*/ true); // insert 1 elements Read - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); // insert 1 elements write - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); // Transaction failure resulting in a fail log. - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write, false); + logBuffer.log( + param_, kField, data_.data(), I2cLogBuffer::Operation::Write, false); // insert 1 element Read (should not log) - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); // insert 1 element write (should not log) - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); // check that we have 3 elements (including the one that failed). // since we have disableOnFail, we stop logging beyond error. std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 3); - EXPECT_EQ(count.second, 3); + EXPECT_EQ(count.totalEntries, 3); + EXPECT_EQ(count.bufferEntries, 3); } TEST_F(I2cLogBufferTest, testNoDisableOnFail) { @@ -301,20 +338,21 @@ TEST_F(I2cLogBufferTest, testNoDisableOnFail) { I2cLogBuffer logBuffer = createBuffer( kFullBuffer, /*read*/ true, /*write*/ true, /*disableOnFail*/ false); // insert 1 elements Read - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); // insert 1 elements write - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); // Transaction failure resulting in a fail log. - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read, false); + logBuffer.log( + param_, kField, data_.data(), I2cLogBuffer::Operation::Read, false); // insert 1 element Read - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); // insert 1 element write - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Write); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Write); // check that we have 5 elements since we dont disable logging on fail std::vector entries; auto count = logBuffer.dump(entries); - EXPECT_EQ(count.first, 5); - EXPECT_EQ(count.second, 5); + EXPECT_EQ(count.totalEntries, 5); + EXPECT_EQ(count.bufferEntries, 5); } TEST_F(I2cLogBufferTest, testEmptyLogFile) { @@ -340,7 +378,7 @@ TEST_F(I2cLogBufferTest, testLogFile) { for (int i = 0; i < kFullBuffer; i++) { data_[0] = i; param_.i2cAddress = i; - logBuffer.log(param_, data_.data(), I2cLogBuffer::Operation::Read); + logBuffer.log(param_, kField, data_.data(), I2cLogBuffer::Operation::Read); } auto ret = logBuffer.dumpToFile(); @@ -375,7 +413,8 @@ TEST_F(I2cLogBufferTest, testReplayBasic) { allData[i][j] = i; } param_.i2cAddress = i; - logBuffer.log(param_, allData[i].data(), I2cLogBuffer::Operation::Write); + logBuffer.log( + param_, kField, allData[i].data(), I2cLogBuffer::Operation::Write); } logBuffer.dumpToFile(); @@ -397,6 +436,66 @@ TEST_F(I2cLogBufferTest, testReplayBasic) { } } +TEST_F(I2cLogBufferTest, testReplayBasicWithCmisFieldNames) { + I2cLogBuffer logBuffer = createBuffer(kFullBuffer); + + // insert kFullBuffer elements + std::vector> allData(kFullBuffer); + for (int i = 0; i < kFullBuffer; i++) { + for (int j = 0; j < param_.len; j++) { + // fill data + allData[i][j] = i; + } + } + + // Now Set the Transceiver Type to CMIS and check that the field (0) for the + // I2C Write is RAW based on enum. + std::set ports = {"eth1/1/1", "eth1/1/5"}; + logBuffer.setTcvrInfoInLog( + TransceiverManagementInterface::CMIS, ports, std::nullopt, std::nullopt); + + std::array fields = { + CmisField::RAW, + CmisField::CDB_COMMAND, + CmisField::FW_UPGRADE, + CmisField::PAGE_CHANGE, + CmisField::MGMT_INTERFACE, + CmisField::PART_NUM, + CmisField::FW_VERSION, + CmisField::PAGE_LOWER, + CmisField::IDENTIFIER, + CmisField::REVISION_COMPLIANCE}; + + for (int i = 0; i < kFullBuffer; i++) { + param_.i2cAddress = i; + logBuffer.log( + param_, + static_cast(fields[i]), + allData[i].data(), + I2cLogBuffer::Operation::Write); + } + logBuffer.dumpToFile(); + + // Check that the log file contains the port names and the field names. + checkLogFileContainsWords(kLogFile_, ports, fields); + + auto replayEntries = I2cLogBuffer::loadFromLog(kLogFile_); + EXPECT_EQ(replayEntries.size(), kFullBuffer); + + // Check replay entries are accurate. + for (int i = 0; i < kFullBuffer; i++) { + EXPECT_EQ(replayEntries[i].param.i2cAddress, i); + EXPECT_EQ(replayEntries[i].param.offset, param_.offset); + EXPECT_EQ(replayEntries[i].param.len, param_.len); + EXPECT_EQ(replayEntries[i].param.page, param_.page); + EXPECT_EQ(replayEntries[i].param.bank, param_.bank); + EXPECT_EQ(replayEntries[i].op, I2cLogBuffer::Operation::Write); + for (int j = 0; j < replayEntries[i].param.len; j++) { + EXPECT_EQ(replayEntries[i].data[j], allData[i][j]); + } + } +} + TEST_F(I2cLogBufferTest, testReplayScenarios) { I2cLogBuffer logBuffer = createBuffer(kFullBuffer); @@ -435,7 +534,7 @@ TEST_F(I2cLogBufferTest, testReplayScenarios) { } // Make odd transactions fail, to check replay data will be identical. bool success = (i % 2 == 0) ? true : false; - logBuffer.log(allParam[i], allData[i].data(), allOps[i], success); + logBuffer.log(allParam[i], kField, allData[i].data(), allOps[i], success); } logBuffer.dumpToFile(); diff --git a/fboss/qsfp_service/module/tests/MockTransceiverImpl.h b/fboss/qsfp_service/module/tests/MockTransceiverImpl.h index a8785b5ed8eb3..c0cd6e2062e55 100644 --- a/fboss/qsfp_service/module/tests/MockTransceiverImpl.h +++ b/fboss/qsfp_service/module/tests/MockTransceiverImpl.h @@ -20,12 +20,15 @@ namespace fboss { class MockTransceiverImpl : public TransceiverImpl { public: - MOCK_METHOD2( - readTransceiver, - int(const TransceiverAccessParameter&, uint8_t*)); MOCK_METHOD3( + readTransceiver, + int(const TransceiverAccessParameter&, uint8_t*, const int)); + MOCK_METHOD4( writeTransceiver, - int(const TransceiverAccessParameter&, const uint8_t*, uint64_t)); + int(const TransceiverAccessParameter&, + const uint8_t*, + uint64_t, + const int)); MOCK_METHOD0(detectTransceiver, bool()); MOCK_METHOD0(getName, folly::StringPiece()); MOCK_CONST_METHOD0(getNum, int()); diff --git a/fboss/qsfp_service/module/tests/QsfpModuleTest.cpp b/fboss/qsfp_service/module/tests/QsfpModuleTest.cpp index 73696f6f04985..7bc281f374d14 100644 --- a/fboss/qsfp_service/module/tests/QsfpModuleTest.cpp +++ b/fboss/qsfp_service/module/tests/QsfpModuleTest.cpp @@ -89,7 +89,7 @@ TEST_F(QsfpModuleTest, setRateSelect) { { InSequence a; // Unsupported - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); TransceiverPortState fortyGState{kPortName, 0, cfg::PortSpeed::FORTYG, 4}; TransceiverPortState hundredGState{ kPortName, 0, cfg::PortSpeed::HUNDREDG, 4}; @@ -108,17 +108,17 @@ TEST_F(QsfpModuleTest, setRateSelect) { // 40G + LESS_THAN_12GB -> no change qsfp_->customizeTransceiver(fortyGState); // 100G + LESS_THAN_12GB -> needs change - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(2); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(2); qsfp_->customizeTransceiver(hundredGState); qsfp_->setRateSelect( RateSelectState::EXTENDED_RATE_SELECT_V2, RateSelectSetting::FROM_24GB_to_26GB); // 40G + FROM_24GB_to_26GB -> needs change - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(2); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(2); qsfp_->customizeTransceiver(fortyGState); // 100G + FROM_24GB_to_26GB -> no change - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); qsfp_->customizeTransceiver(hundredGState); } } @@ -154,7 +154,7 @@ TEST_F(QsfpModuleTest, setCdr) { // writes for settings changes. { InSequence a; - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); // Unsupported qsfp_->customizeTransceiver(fortyGState); qsfp_->customizeTransceiver(hundredGState); @@ -163,24 +163,24 @@ TEST_F(QsfpModuleTest, setCdr) { // Disabled + 40G qsfp_->customizeTransceiver(fortyGState); // Disabled + 100G - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); qsfp_->customizeTransceiver(hundredGState); // CHECK qsfp_->setCdrState(FeatureState::ENABLED, FeatureState::ENABLED); // Enabled + 40G - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); qsfp_->customizeTransceiver(fortyGState); // CHECK // Enabled + 100G - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); qsfp_->customizeTransceiver(hundredGState); // CHECK // One of rx an tx enabled with the other disabled qsfp_->setCdrState(FeatureState::DISABLED, FeatureState::ENABLED); // 40G - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); qsfp_->customizeTransceiver(fortyGState); // CHECK // 100G - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); qsfp_->customizeTransceiver(hundredGState); } } @@ -316,18 +316,18 @@ TEST_F(QsfpModuleTest, updateQsfpDataPartial) { // Ensure that partial updates don't ever call writeTranscevier, // which needs to gain control of the bus and slows the call // down drastically. - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); qsfp_->actualUpdateQsfpData(false); } TEST_F(QsfpModuleTest, updateQsfpDataFull) { // Bit of a hack to ensure we have flatMem_ == false. - ON_CALL(*transImpl_, readTransceiver(_, _)) + ON_CALL(*transImpl_, readTransceiver(_, _, _)) .WillByDefault(DoAll( InvokeWithoutArgs(qsfp_, &MockSffModule::setFlatMem), Return(0))); // Full updates do need to write to select higher pages - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(AtLeast(1)); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(AtLeast(1)); qsfp_->actualUpdateQsfpData(true); } @@ -335,30 +335,30 @@ TEST_F(QsfpModuleTest, updateQsfpDataFull) { TEST_F(QsfpModuleTest, readTransceiver) { // Skip the length field and confirm that the length of data in response is 1. // Page is also skipped so there should not be a write to byte 127. - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); - EXPECT_CALL(*transImpl_, readTransceiver(_, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); + EXPECT_CALL(*transImpl_, readTransceiver(_, _, _)).Times(1); TransceiverIOParameters param; param.offset() = 0; auto buf = qsfp_->readTransceiver(param); EXPECT_EQ(buf->length(), 1); // Test for a specific length - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); - EXPECT_CALL(*transImpl_, readTransceiver(_, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); + EXPECT_CALL(*transImpl_, readTransceiver(_, _, _)).Times(1); param.length() = 10; buf = qsfp_->readTransceiver(param); EXPECT_EQ(buf->length(), *param.length()); // Set the page - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); - EXPECT_CALL(*transImpl_, readTransceiver(_, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); + EXPECT_CALL(*transImpl_, readTransceiver(_, _, _)).Times(1); param.page() = 3; buf = qsfp_->readTransceiver(param); EXPECT_EQ(buf->length(), *param.length()); // Test on a transceiver that fails detection EXPECT_CALL(*transImpl_, detectTransceiver()).WillRepeatedly(Return(false)); - EXPECT_CALL(*transImpl_, readTransceiver(_, _)).Times(0); + EXPECT_CALL(*transImpl_, readTransceiver(_, _, _)).Times(0); qsfp_->detectPresence(); buf = qsfp_->readTransceiver(param); EXPECT_EQ(buf->length(), 0); @@ -366,19 +366,19 @@ TEST_F(QsfpModuleTest, readTransceiver) { TEST_F(QsfpModuleTest, writeTransceiver) { // Expect a call to writeTransceiver and the result to be successful - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(1); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(1); TransceiverIOParameters param; param.offset() = 0x23; EXPECT_EQ(qsfp_->writeTransceiver(param, 0xab), true); // Set the page - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(2); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(2); param.page() = 3; EXPECT_EQ(qsfp_->writeTransceiver(param, 0xde), true); // Test on a transceiver that fails detection, the result should be false EXPECT_CALL(*transImpl_, detectTransceiver()).WillRepeatedly(Return(false)); - EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _)).Times(0); + EXPECT_CALL(*transImpl_, writeTransceiver(_, _, _, _)).Times(0); qsfp_->detectPresence(); EXPECT_EQ(qsfp_->writeTransceiver(param, 0xac), false); } diff --git a/fboss/qsfp_service/platforms/wedge/BUCK b/fboss/qsfp_service/platforms/wedge/BUCK index a5c55feaae2d7..921d9ed1f77b4 100644 --- a/fboss/qsfp_service/platforms/wedge/BUCK +++ b/fboss/qsfp_service/platforms/wedge/BUCK @@ -30,7 +30,6 @@ cpp_library( "//fboss/qsfp_service/module:i2c_log_buffer", "//fboss/qsfp_service/module:qsfp-module", "//folly:conv", - "//folly:memory", "//folly:random", "//folly:range", "//folly:scope_guard", diff --git a/fboss/qsfp_service/platforms/wedge/WedgeManager.cpp b/fboss/qsfp_service/platforms/wedge/WedgeManager.cpp index 0a82bfd9566e1..7e7d4ed613ab7 100644 --- a/fboss/qsfp_service/platforms/wedge/WedgeManager.cpp +++ b/fboss/qsfp_service/platforms/wedge/WedgeManager.cpp @@ -4,8 +4,6 @@ #include "fboss/agent/FbossError.h" #include "fboss/fsdb/common/Flags.h" -#include "fboss/lib/config/PlatformConfigUtils.h" -#include "fboss/lib/fpga/MultiPimPlatformSystemContainer.h" #include "fboss/qsfp_service/QsfpConfig.h" #include "fboss/qsfp_service/if/gen-cpp2/qsfp_service_config_types.h" #include "fboss/qsfp_service/if/gen-cpp2/transceiver_types.h" @@ -20,9 +18,7 @@ #include -#include #include -#include #include #include #include @@ -435,6 +431,41 @@ void WedgeManager::syncPorts( } } +void WedgeManager::updateTransceiverLogInfo( + const std::vector& transceivers) { + for (auto tcvrID : transceivers) { + TransceiverInfo tcvrInfo; + try { + tcvrInfo = getTransceiverInfo(tcvrID); + } catch (const QsfpModuleError&) { + XLOG(INFO) << "Failed to update tcvr log info for transceiver: " + << tcvrID; + continue; + } + const auto& state = tcvrInfo.tcvrState(); + std::optional vendor = std::nullopt; + std::optional fwStatus = std::nullopt; + auto mgmtIf = TransceiverManagementInterface::NONE; + if (state->transceiverManagementInterface().has_value()) { + mgmtIf = state->transceiverManagementInterface().value(); + } + if (state->vendor().has_value()) { + vendor = state->vendor().value(); + } + const auto& moduleStatus = state->status(); + if (moduleStatus.has_value() && moduleStatus->fwStatus().has_value()) { + fwStatus = moduleStatus->fwStatus().value(); + } + if (tcvrID < qsfpImpls_.size()) { + auto portNames = getPortNames(tcvrID); + qsfpImpls_[tcvrID]->setTcvrInfoInLog(mgmtIf, portNames, fwStatus, vendor); + } else { + XLOG(ERR) << "Transceiver " << tcvrID + << " is not in the range of qsfpImpls_"; + } + } +} + // NOTE: this may refresh transceivers multiple times if they're newly plugged // in, as refresh() is called both via updateTransceiverMap and futureRefresh std::vector WedgeManager::refreshTransceivers() { @@ -451,12 +482,17 @@ std::vector WedgeManager::refreshTransceivers() { // Since transceivers may appear or disappear, we need to update our // transceiver mapping and type here. - updateTransceiverMap(); + // Make this return a list of transceivers inserted. We can update + // The logs of those transceivers with TransceiverInfo + const auto discoveredTransceivers = updateTransceiverMap(); // Finally refresh all transceivers without specifying any ids auto refreshedTransceivers = TransceiverManager::refreshTransceivers(kEmptryTransceiverIDs); + // After refresh, add the info for discoveredTransceivers to the log + updateTransceiverLogInfo(discoveredTransceivers); + // Send the optical thermal data to BMC if needed auto currTime = std::time(nullptr); if (FLAGS_optics_data_post_to_rest && qsfpRestClient_.get() && @@ -532,7 +568,7 @@ std::unique_ptr WedgeManager::getI2CBus() { return std::make_unique(std::make_unique()); } -void WedgeManager::updateTransceiverMap() { +std::vector WedgeManager::updateTransceiverMap() { std::vector> futInterfaces; const auto numTransceivers = getNumQsfpModules(); CHECK_EQ(qsfpImpls_.size(), numTransceivers); @@ -542,6 +578,7 @@ void WedgeManager::updateTransceiverMap() { } folly::collectAllUnsafe(futInterfaces.begin(), futInterfaces.end()).wait(); + std::vector retVal; std::unordered_set tcvrsToCreate; std::unordered_set tcvrsToDelete; std::unordered_set tcvrsToHardReset; @@ -606,7 +643,8 @@ void WedgeManager::updateTransceiverMap() { } for (auto idx : tcvrsToCreate) { TransceiverID tcvrID(idx); - if (futInterfaces[idx].value() == TransceiverManagementInterface::CMIS) { + auto mgmtIf = futInterfaces[idx].value(); + if (mgmtIf == TransceiverManagementInterface::CMIS) { XLOG(INFO) << "Making CMIS QSFP for TransceiverID=" << idx; lockedTransceiversWPtr->emplace( tcvrID, @@ -615,21 +653,21 @@ void WedgeManager::updateTransceiverMap() { qsfpImpls_[idx].get(), tcvrConfig, cmisSupportRemediate)); - } else if ( - futInterfaces[idx].value() == TransceiverManagementInterface::SFF) { + retVal.push_back(TransceiverID(idx)); + } else if (mgmtIf == TransceiverManagementInterface::SFF) { XLOG(INFO) << "Making Sff QSFP for TransceiverID=" << idx; lockedTransceiversWPtr->emplace( tcvrID, std::make_unique( getPortNames(tcvrID), qsfpImpls_[idx].get(), tcvrConfig)); - } else if ( - futInterfaces[idx].value() == - TransceiverManagementInterface::SFF8472) { + retVal.push_back(TransceiverID(idx)); + } else if (mgmtIf == TransceiverManagementInterface::SFF8472) { XLOG(INFO) << "Making Sff8472 module for TransceiverID=" << idx; lockedTransceiversWPtr->emplace( tcvrID, std::make_unique( getPortNames(tcvrID), qsfpImpls_[idx].get())); + retVal.push_back(TransceiverID(idx)); } else { XLOG(ERR) << "Unknown Transceiver interface: " << static_cast(futInterfaces[idx].value()) @@ -676,6 +714,7 @@ void WedgeManager::updateTransceiverMap() { << ": " << ex.what(); } } + return retVal; } /* Get the i2c transaction counters from TranscieverManager base class diff --git a/fboss/qsfp_service/platforms/wedge/WedgeManager.h b/fboss/qsfp_service/platforms/wedge/WedgeManager.h index c465b7e508c36..57d072754d90a 100644 --- a/fboss/qsfp_service/platforms/wedge/WedgeManager.h +++ b/fboss/qsfp_service/platforms/wedge/WedgeManager.h @@ -181,11 +181,9 @@ class WedgeManager : public TransceiverManager { virtual std::unique_ptr getI2CBus() override; - virtual TransceiverI2CApi* i2cBus() override { - return wedgeI2cBus_.get(); - } - - void updateTransceiverMap(); + // Return the list of newly added transceivers + // (detected plugged in) after a refresh cycle. + std::vector updateTransceiverMap(); // thread safe handle to access bus std::unique_ptr wedgeI2cBus_; @@ -199,6 +197,8 @@ class WedgeManager : public TransceiverManager { void initQsfpImplMap(); private: + void updateTransceiverLogInfo(const std::vector& tcvrs); + // Forbidden copy constructor and assignment operator WedgeManager(WedgeManager const&) = delete; WedgeManager& operator=(WedgeManager const&) = delete; diff --git a/fboss/qsfp_service/platforms/wedge/WedgeQsfp.cpp b/fboss/qsfp_service/platforms/wedge/WedgeQsfp.cpp index 8add59167ed21..aedf2683c2ddf 100644 --- a/fboss/qsfp_service/platforms/wedge/WedgeQsfp.cpp +++ b/fboss/qsfp_service/platforms/wedge/WedgeQsfp.cpp @@ -10,7 +10,6 @@ #include "fboss/qsfp_service/platforms/wedge/WedgeQsfp.h" #include -#include #include #include @@ -19,6 +18,8 @@ #include "fboss/qsfp_service/TransceiverManager.h" #include "fboss/qsfp_service/module/QsfpModule.h" +#include "fboss/qsfp_service/module/cmis/gen-cpp2/cmis_types.h" + using namespace facebook::fboss; using folly::MutableByteRange; using folly::StringPiece; @@ -80,7 +81,8 @@ WedgeQsfp::~WedgeQsfp() {} int WedgeQsfp::readTransceiver( const TransceiverAccessParameter& param, - uint8_t* fieldValue) { + uint8_t* fieldValue, + const int field) { auto offset = param.offset; auto len = param.len; ioStatsRecorder_.recordReadAttempted(); @@ -98,14 +100,18 @@ int WedgeQsfp::readTransceiver( generateIOErrorForTest("readTransceiver()"); threadSafeI2CBus_->moduleRead(module_ + 1, param, fieldValue); if (logBuffer_) { - logBuffer_->log(param, fieldValue, I2cLogBuffer::Operation::Read); + logBuffer_->log(param, field, fieldValue, I2cLogBuffer::Operation::Read); } } catch (const std::exception& ex) { XLOG(ERR) << "Read from transceiver " << module_ << " at offset " << offset << " with length " << len << " failed: " << ex.what(); if (logBuffer_) { logBuffer_->log( - param, fieldValue, I2cLogBuffer::Operation::Read, /*success*/ false); + param, + field, + fieldValue, + I2cLogBuffer::Operation::Read, + /*success*/ false); } throw; } @@ -115,7 +121,8 @@ int WedgeQsfp::readTransceiver( int WedgeQsfp::writeTransceiver( const TransceiverAccessParameter& param, const uint8_t* fieldValue, - uint64_t delay) { + uint64_t delay, + const int field) { auto offset = param.offset; auto len = param.len; ioStatsRecorder_.recordWriteAttempted(); @@ -133,7 +140,7 @@ int WedgeQsfp::writeTransceiver( generateIOErrorForTest("writeTransceiver()"); threadSafeI2CBus_->moduleWrite(module_ + 1, param, fieldValue); if (logBuffer_) { - logBuffer_->log(param, fieldValue, I2cLogBuffer::Operation::Write); + logBuffer_->log(param, field, fieldValue, I2cLogBuffer::Operation::Write); } // Intel transceiver require some delay for every write. // So in the case of writing succeeded, we wait for 20ms. @@ -145,7 +152,11 @@ int WedgeQsfp::writeTransceiver( << " failed: " << folly::exceptionStr(ex); if (logBuffer_) { logBuffer_->log( - param, fieldValue, I2cLogBuffer::Operation::Write, /*success*/ false); + param, + field, + fieldValue, + I2cLogBuffer::Operation::Write, + /*success*/ false); } throw; } @@ -189,7 +200,10 @@ TransceiverManagementInterface WedgeQsfp::getTransceiverManagementInterface() { for (int i = 0; i < kNumInterfaceDetectionRetries; ++i) { try { readTransceiver( - {TransceiverAccessParameter::ADDR_QSFP, 0, 1}, buf.data()); + {TransceiverAccessParameter::ADDR_QSFP, 0, 1}, + buf.data(), + // common enum to all tcvr types + CAST_TO_INT(CmisField::MGMT_INTERFACE)); XLOG(DBG3) << folly::sformat( "Transceiver {:d} identifier: {:#x}", module_, buf[0]); TransceiverManagementInterface modInterfaceType = @@ -256,20 +270,30 @@ std::array WedgeQsfp::getModulePartNo() { // SFF module. Restore the page in the end readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCommonModulePageReg, 1}, - &savedPage); + &savedPage, + // common enum to all tcvr types + CAST_TO_INT(CmisField::PART_NUM)); if (savedPage != page) { writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCommonModulePageReg, 1}, - &page); + &page, + POST_I2C_WRITE_DELAY_US, + // common enum to all tcvr types + CAST_TO_INT(CmisField::PART_NUM)); } readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, partNoRegOffset, 16}, - partNo.data()); + partNo.data(), + // common enum to all tcvr types + CAST_TO_INT(CmisField::PART_NUM)); if (savedPage != page) { writeTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCommonModulePageReg, 1}, - &savedPage); + &savedPage, + POST_I2C_WRITE_DELAY_US, + // common enum to all tcvr types + CAST_TO_INT(CmisField::PART_NUM)); } return partNo; @@ -287,7 +311,9 @@ std::array WedgeQsfp::getFirmwareVer() { // Read 2 byte firmware version from base page reg 39-40 for CMIS module readTransceiver( {TransceiverAccessParameter::ADDR_QSFP, kCommonModuleFwVerReg, 2}, - fwVer.data()); + fwVer.data(), + // common enum to all tcvr types + CAST_TO_INT(CmisField::FW_VERSION)); return fwVer; } @@ -298,6 +324,16 @@ size_t WedgeQsfp::getI2cLogBufferCapacity() { return 0; } +void WedgeQsfp::setTcvrInfoInLog( + const TransceiverManagementInterface& mgmtIf, + const std::set& portNames, + const std::optional& status, + const std::optional& vendor) { + if (logBuffer_) { + logBuffer_->setTcvrInfoInLog(mgmtIf, portNames, status, vendor); + } +} + std::pair WedgeQsfp::dumpTransceiverI2cLog() { std::pair entries = {0, 0}; if (logBuffer_) { diff --git a/fboss/qsfp_service/platforms/wedge/WedgeQsfp.h b/fboss/qsfp_service/platforms/wedge/WedgeQsfp.h index 79b65b93daa6e..128d898d4408e 100644 --- a/fboss/qsfp_service/platforms/wedge/WedgeQsfp.h +++ b/fboss/qsfp_service/platforms/wedge/WedgeQsfp.h @@ -9,10 +9,8 @@ */ #pragma once -#include #include #include -#include #include #include @@ -21,7 +19,6 @@ #include "fboss/qsfp_service/TransceiverManager.h" #include "fboss/qsfp_service/module/I2cLogBuffer.h" #include "fboss/qsfp_service/module/TransceiverImpl.h" -#include "fboss/qsfp_service/platforms/wedge/WedgeI2CBusLock.h" namespace facebook { namespace fboss { @@ -43,13 +40,15 @@ class WedgeQsfp : public TransceiverImpl { /* This function is used to read the SFP EEprom */ int readTransceiver( const TransceiverAccessParameter& param, - uint8_t* fieldValue) override; + uint8_t* fieldValue, + const int field) override; /* write to the eeprom (usually to change the page setting) */ int writeTransceiver( const TransceiverAccessParameter& param, const uint8_t* fieldValue, - uint64_t delay = post_write_delay_us) override; + uint64_t delay, + const int field) override; /* Returns the name for the port */ folly::StringPiece getName() override; @@ -111,6 +110,12 @@ class WedgeQsfp : public TransceiverImpl { // Get the capacity of the i2c buffer. size_t getI2cLogBufferCapacity(); + void setTcvrInfoInLog( + const TransceiverManagementInterface& mgmtIf, + const std::set& portNames, + const std::optional& status, + const std::optional& vendor); + private: int module_; std::string moduleName_; diff --git a/fboss/qsfp_service/platforms/wedge/tests/WedgeManagerTest.cpp b/fboss/qsfp_service/platforms/wedge/tests/WedgeManagerTest.cpp index 4e349ba6d90ff..04d5a557c6f52 100644 --- a/fboss/qsfp_service/platforms/wedge/tests/WedgeManagerTest.cpp +++ b/fboss/qsfp_service/platforms/wedge/tests/WedgeManagerTest.cpp @@ -194,7 +194,6 @@ TEST_F(WedgeManagerTest, moduleNotPresentTest) { auto synchronizedTransceivers = transceiverManager_->getSynchronizedTransceivers().rlock(); for (const auto& trans : *synchronizedTransceivers) { - QsfpModule* qsfp = dynamic_cast(trans.second.get()); // id is 0 based here EXPECT_EQ( transceiverManager_->getCurrentState(TransceiverID(trans.first)), diff --git a/fboss/qsfp_service/test/BUCK b/fboss/qsfp_service/test/BUCK index 5d3e7591c231c..926d3091f9581 100644 --- a/fboss/qsfp_service/test/BUCK +++ b/fboss/qsfp_service/test/BUCK @@ -16,7 +16,6 @@ cpp_binary( "//fboss/qsfp_service/platforms/wedge:wedge-platform-credo-0.7.2", "//folly:singleton", "//folly/executors:function_scheduler", - "//folly/logging:logging", "//thrift/lib/cpp2:server", ], ) @@ -66,12 +65,10 @@ cpp_unittest( "BspPlatformMapTest.cpp", ], deps = [ - "//fboss/lib:common_file_utils", "//fboss/lib/bsp/meru400bfu:meru400bfu_bsp", "//fboss/lib/bsp/meru400bia:meru400bia_bsp", "//fboss/lib/bsp/meru400biu:meru400biu_bsp", "//fboss/lib/bsp/montblanc:montblanc_bsp", - "//fboss/qsfp_service/platforms/wedge/tests:mock-wedge-manager", "//folly/testing:test_util", ], ) diff --git a/fboss/qsfp_service/test/BspPlatformMapTest.cpp b/fboss/qsfp_service/test/BspPlatformMapTest.cpp index 778556d2baf8b..9c25d66ca7d24 100644 --- a/fboss/qsfp_service/test/BspPlatformMapTest.cpp +++ b/fboss/qsfp_service/test/BspPlatformMapTest.cpp @@ -2,12 +2,10 @@ #include #include -#include "fboss/lib/CommonFileUtils.h" #include "fboss/lib/bsp/meru400bfu/Meru400bfuBspPlatformMapping.h" #include "fboss/lib/bsp/meru400bia/Meru400biaBspPlatformMapping.h" #include "fboss/lib/bsp/meru400biu/Meru400biuBspPlatformMapping.h" #include "fboss/lib/bsp/montblanc/MontblancBspPlatformMapping.h" -#include "fboss/qsfp_service/platforms/wedge/tests/MockWedgeManager.h" namespace facebook::fboss { diff --git a/fboss/qsfp_service/test/QsfpServiceTest.cpp b/fboss/qsfp_service/test/QsfpServiceTest.cpp index 23df27e31f992..e7e6b5e915131 100644 --- a/fboss/qsfp_service/test/QsfpServiceTest.cpp +++ b/fboss/qsfp_service/test/QsfpServiceTest.cpp @@ -10,7 +10,6 @@ #include "fboss/qsfp_service/test/QsfpServiceTest.h" #include -#include #include "common/init/Init.h" diff --git a/fboss/qsfp_service/test/hw_test/HwExternalPhyPortTest.cpp b/fboss/qsfp_service/test/hw_test/HwExternalPhyPortTest.cpp index 51295d2eede1f..b28dd6b4d9a19 100644 --- a/fboss/qsfp_service/test/hw_test/HwExternalPhyPortTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwExternalPhyPortTest.cpp @@ -13,8 +13,6 @@ #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" -#include - namespace facebook::fboss { std::string HwExternalPhyPortTest::neededFeatureNames() const { std::stringstream ss; diff --git a/fboss/qsfp_service/test/hw_test/HwI2CStressTest.cpp b/fboss/qsfp_service/test/hw_test/HwI2CStressTest.cpp index 821bef68cd09d..ffc2510054d18 100644 --- a/fboss/qsfp_service/test/hw_test/HwI2CStressTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwI2CStressTest.cpp @@ -2,11 +2,8 @@ #include "fboss/qsfp_service/test/hw_test/HwTest.h" -#include "fboss/agent/platforms/common/PlatformMapping.h" - #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" -#include "thrift/lib/cpp/util/EnumUtils.h" #include #include diff --git a/fboss/qsfp_service/test/hw_test/HwI2cSelectTest.cpp b/fboss/qsfp_service/test/hw_test/HwI2cSelectTest.cpp index 81eb6bd41dd6e..6fd1e4d3afa88 100644 --- a/fboss/qsfp_service/test/hw_test/HwI2cSelectTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwI2cSelectTest.cpp @@ -2,11 +2,8 @@ #include "fboss/qsfp_service/test/hw_test/HwTest.h" -#include "fboss/agent/platforms/common/PlatformMapping.h" - #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" -#include "thrift/lib/cpp/util/EnumUtils.h" #include #include @@ -77,11 +74,11 @@ TEST_F(HwTest, i2cUniqueSerialNumbers) { auto transmitterTech = *(transceiverInfo[tcvrId].tcvrState()->cable()->transmitterTech()); - EXPECT_TRUE(TransmitterTechnology::COPPER == transmitterTech); + EXPECT_EQ(TransmitterTechnology::COPPER, transmitterTech); transmitterTech = *( transceiverInfo[neighborId].tcvrState()->cable()->transmitterTech()); - EXPECT_TRUE(TransmitterTechnology::COPPER == transmitterTech); + EXPECT_EQ(TransmitterTechnology::COPPER, transmitterTech); } } } diff --git a/fboss/qsfp_service/test/hw_test/HwPortProfileTest.cpp b/fboss/qsfp_service/test/hw_test/HwPortProfileTest.cpp index 4e803a54f29f7..0897cb2ac23e5 100644 --- a/fboss/qsfp_service/test/hw_test/HwPortProfileTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwPortProfileTest.cpp @@ -13,7 +13,6 @@ #include "fboss/agent/platforms/common/PlatformMapping.h" #include "fboss/agent/state/Port.h" #include "fboss/lib/config/PlatformConfigUtils.h" -#include "fboss/lib/phy/PhyManager.h" #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" #include "fboss/qsfp_service/test/hw_test/HwTransceiverUtils.h" diff --git a/fboss/qsfp_service/test/hw_test/HwPortUtils.h b/fboss/qsfp_service/test/hw_test/HwPortUtils.h index 0dd839d3a6b7f..edd4c55a69fed 100644 --- a/fboss/qsfp_service/test/hw_test/HwPortUtils.h +++ b/fboss/qsfp_service/test/hw_test/HwPortUtils.h @@ -21,7 +21,7 @@ namespace facebook::fboss { class HwQsfpEnsemble; class PhyManager; -class AgentConfig; +struct AgentConfig; namespace phy { struct PhyPortConfig; diff --git a/fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.cpp b/fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.cpp index 86a3b36c8e310..e28c1df597c74 100644 --- a/fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.cpp +++ b/fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.cpp @@ -9,11 +9,8 @@ */ #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" -#include "fboss/agent/FbossError.h" #include "fboss/agent/platforms/common/MultiPimPlatformMapping.h" #include "fboss/lib/CommonFileUtils.h" -#include "fboss/lib/config/PlatformConfigUtils.h" -#include "fboss/lib/fpga/MultiPimPlatformSystemContainer.h" #include "fboss/lib/phy/PhyManager.h" #include "fboss/qsfp_service/QsfpServer.h" #include "fboss/qsfp_service/QsfpServiceHandler.h" diff --git a/fboss/qsfp_service/test/hw_test/HwStateMachineTest.cpp b/fboss/qsfp_service/test/hw_test/HwStateMachineTest.cpp index d549e2412a76d..daf7499523093 100644 --- a/fboss/qsfp_service/test/hw_test/HwStateMachineTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwStateMachineTest.cpp @@ -10,7 +10,6 @@ #include "fboss/qsfp_service/test/hw_test/HwTest.h" #include "fboss/lib/CommonUtils.h" -#include "fboss/lib/config/PlatformConfigUtils.h" #include "fboss/qsfp_service/module/QsfpModule.h" #include "fboss/qsfp_service/platforms/wedge/WedgeManager.h" #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" diff --git a/fboss/qsfp_service/test/hw_test/HwTest.cpp b/fboss/qsfp_service/test/hw_test/HwTest.cpp index 238eada4ec9a4..d91a3af171590 100644 --- a/fboss/qsfp_service/test/hw_test/HwTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwTest.cpp @@ -16,7 +16,6 @@ #include "fboss/lib/CommonUtils.h" #include "fboss/lib/fpga/MultiPimPlatformSystemContainer.h" #include "fboss/lib/phy/PhyManager.h" -#include "fboss/lib/platforms/PlatformProductInfo.h" #include "fboss/qsfp_service/QsfpServer.h" #include "fboss/qsfp_service/test/hw_test/HwPortUtils.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" diff --git a/fboss/qsfp_service/test/hw_test/HwTransceiverResetTest.cpp b/fboss/qsfp_service/test/hw_test/HwTransceiverResetTest.cpp index d574bddb724e0..96c55f347fd2c 100644 --- a/fboss/qsfp_service/test/hw_test/HwTransceiverResetTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwTransceiverResetTest.cpp @@ -10,7 +10,6 @@ #include "fboss/qsfp_service/test/hw_test/HwTest.h" #include "fboss/agent/AgentConfig.h" -#include "fboss/agent/platforms/common/PlatformMapping.h" #include #include "fboss/lib/CommonUtils.h" diff --git a/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp b/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp index de7beb440e8ad..60aeea83b8bdb 100644 --- a/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp +++ b/fboss/qsfp_service/test/hw_test/HwTransceiverUtils.cpp @@ -140,6 +140,7 @@ void HwTransceiverUtils::verifyPortNameToLaneMap( case MediaInterfaceCode::LR_10G: case MediaInterfaceCode::SR_10G: case MediaInterfaceCode::BASE_T_10G: + case MediaInterfaceCode::CR_10G: expectedMediaLanes = {0}; break; case MediaInterfaceCode::UNKNOWN: @@ -361,11 +362,15 @@ void HwTransceiverUtils::verify10gProfile( EXPECT_EQ(*tcvrState.transceiver(), TransceiverType::SFP); for (const auto& mediaId : mediaInterfaces) { - EXPECT_EQ( - *mediaId.media()->ethernet10GComplianceCode_ref(), - Ethernet10GComplianceCode::LR_10G); + EXPECT_TRUE( + *mediaId.media()->ethernet10GComplianceCode_ref() == + Ethernet10GComplianceCode::LR_10G || + *mediaId.media()->ethernet10GComplianceCode_ref() == + Ethernet10GComplianceCode::CR_10G); - EXPECT_EQ(*mediaId.code(), MediaInterfaceCode::LR_10G); + EXPECT_TRUE( + *mediaId.code() == MediaInterfaceCode::LR_10G || + *mediaId.code() == MediaInterfaceCode::CR_10G); } } diff --git a/fboss/qsfp_service/test/hw_test/HwXphyFirmwareTest.cpp b/fboss/qsfp_service/test/hw_test/HwXphyFirmwareTest.cpp index 956df7eef6ee4..5e2ca69dec9af 100644 --- a/fboss/qsfp_service/test/hw_test/HwXphyFirmwareTest.cpp +++ b/fboss/qsfp_service/test/hw_test/HwXphyFirmwareTest.cpp @@ -12,7 +12,6 @@ #include "fboss/agent/platforms/common/PlatformMapping.h" #include "fboss/lib/phy/ExternalPhy.h" #include "fboss/lib/phy/PhyManager.h" -#include "fboss/lib/platforms/PlatformMode.h" #include "fboss/qsfp_service/test/hw_test/HwQsfpEnsemble.h" #include diff --git a/fboss/thrift_cow/nodes/Serializer.h b/fboss/thrift_cow/nodes/Serializer.h index d7e344865ec07..9a99f46546d78 100644 --- a/fboss/thrift_cow/nodes/Serializer.h +++ b/fboss/thrift_cow/nodes/Serializer.h @@ -64,42 +64,38 @@ struct Serializer { using Writer = typename Serializers::Writer; using TSerializer = apache::thrift::Serializer; - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static folly::fbstring serialize(const TType& ttype) { + template + static folly::fbstring serialize(const TType& ttype) + requires(detail::tc_is_struct_or_union) + { folly::fbstring encoded; TSerializer::serialize(ttype, &encoded); encoded.shrink_to_fit(); return encoded; } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static folly::fbstring serialize(const TType& ttype) { + template + static folly::fbstring serialize(const TType& ttype) + requires(!detail::tc_is_struct_or_union) + { auto str = serializeBuf(ttype).moveToFbString(); str.shrink_to_fit(); return str; } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static folly::IOBuf serializeBuf(const TType& ttype) { + template + static folly::IOBuf serializeBuf(const TType& ttype) + requires(detail::tc_is_struct_or_union) + { folly::IOBufQueue queue; TSerializer::serialize(ttype, &queue); return queue.moveAsValue(); } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static folly::IOBuf serializeBuf(const TType& ttype) { + template + static folly::IOBuf serializeBuf(const TType& ttype) + requires(!detail::tc_is_struct_or_union) + { folly::IOBufQueue queue; Writer writer; writer.setOutput(&queue); @@ -108,19 +104,17 @@ struct Serializer { return queue.moveAsValue(); } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static TType deserialize(const folly::fbstring& encoded) { + template + static TType deserialize(const folly::fbstring& encoded) + requires(detail::tc_is_struct_or_union) + { return TSerializer::template deserialize(encoded.toStdString()); } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static TType deserialize(const folly::fbstring& encoded) { + template + static TType deserialize(const folly::fbstring& encoded) + requires(!detail::tc_is_struct_or_union) + { Reader reader; auto buf = folly::IOBuf::copyBuffer(encoded.data(), encoded.length()); reader.setInput(buf.get()); @@ -130,19 +124,17 @@ struct Serializer { return recovered; } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static TType deserializeBuf(folly::IOBuf&& buf) { + template + static TType deserializeBuf(folly::IOBuf&& buf) + requires(detail::tc_is_struct_or_union) + { return TSerializer::template deserialize(&buf); } - template < - typename TC, - typename TType, - std::enable_if_t, bool> = true> - static TType deserializeBuf(folly::IOBuf&& buf) { + template + static TType deserializeBuf(folly::IOBuf&& buf) + requires(!detail::tc_is_struct_or_union) + { Reader reader; reader.setInput(&buf); TType recovered; diff --git a/fboss/thrift_cow/nodes/ThriftListNode-inl.h b/fboss/thrift_cow/nodes/ThriftListNode-inl.h index a7edf06c9292e..107cdd82df4a8 100644 --- a/fboss/thrift_cow/nodes/ThriftListNode-inl.h +++ b/fboss/thrift_cow/nodes/ThriftListNode-inl.h @@ -42,7 +42,7 @@ struct ThriftListFields : public FieldBaseType { using ChildTypeClass = typename list_helpers::ExtractValueTypeClass::type; using ChildTType = typename TType::value_type; - using ChildTraits = ConvertToNodeTraits; + using ChildTraits = ConvertToNodeTraits; using value_type = typename ChildTraits::type; using StorageType = std::vector; using iterator = typename StorageType::iterator; diff --git a/fboss/thrift_cow/nodes/ThriftMapNode-inl.h b/fboss/thrift_cow/nodes/ThriftMapNode-inl.h index e8739927a0b94..5e6e60216b4b4 100644 --- a/fboss/thrift_cow/nodes/ThriftMapNode-inl.h +++ b/fboss/thrift_cow/nodes/ThriftMapNode-inl.h @@ -52,8 +52,8 @@ struct ThriftMapFields : public FieldBaseType { using ValueTypeClass = typename map_helpers::ExtractTypeClass::value_type; using ValueTType = typename TType::mapped_type; - using ValueTraits = - typename Traits::template ConvertToNodeTraits; + using ValueTraits = typename Traits:: + template ConvertToNodeTraits; using key_type = typename TType::key_type; using value_type = typename ValueTraits::type; using StorageType = @@ -186,11 +186,11 @@ struct ThriftMapFields : public FieldBaseType { } template - auto remove(const key_type& key) -> std::enable_if_t< - !std::is_same_v< - typename T::KeyTypeClass, - apache::thrift::type_class::string>, - bool> { + bool remove(const key_type& key) + requires(!std::is_same_v< + typename T::KeyTypeClass, + apache::thrift::type_class::string>) + { return storage_.erase(key); } @@ -383,11 +383,11 @@ class ThriftMapNode } template - auto remove(const key_type& key) -> std::enable_if_t< - !std::is_same_v< - typename T::KeyTypeClass, - apache::thrift::type_class::string>, - bool> { + bool remove(const key_type& key) + requires(!std::is_same_v< + typename T::KeyTypeClass, + apache::thrift::type_class::string>) + { return this->writableFields()->remove(key); } diff --git a/fboss/thrift_cow/nodes/ThriftPrimitiveNode-inl.h b/fboss/thrift_cow/nodes/ThriftPrimitiveNode-inl.h index eff168f6abf39..67929983ec757 100644 --- a/fboss/thrift_cow/nodes/ThriftPrimitiveNode-inl.h +++ b/fboss/thrift_cow/nodes/ThriftPrimitiveNode-inl.h @@ -37,12 +37,16 @@ class ThriftPrimitiveNode : public thrift_cow::Serializable { explicit ThriftPrimitiveNode(ThriftType obj) : obj_(std::move(obj)) {} template - auto set(const ThriftType& obj) -> std::enable_if_t { + void set(const ThriftType& obj) + requires(!T::immutable) + { obj_ = obj; } template - auto set(const ThriftType&) const -> std::enable_if_t { + void set(const ThriftType&) const + requires(T::immutable) + { throwImmutableException(); } @@ -75,14 +79,16 @@ class ThriftPrimitiveNode : public thrift_cow::Serializable { } template - auto fromThrift(const ThriftType& obj) - -> std::enable_if_t { + void fromThrift(const ThriftType& obj) + requires(!T::immutable) + { set(obj); } template - auto fromThrift(const ThriftType&) const - -> std::enable_if_t { + void fromThrift(const ThriftType&) const + requires(T::immutable) + { throwImmutableException(); } @@ -96,8 +102,9 @@ class ThriftPrimitiveNode : public thrift_cow::Serializable { } template - auto fromFollyDynamic(const folly::dynamic& value) - -> std::enable_if_t { + void fromFollyDynamic(const folly::dynamic& value) + requires(!T::immutable) + { ThriftType thrift; facebook::thrift::from_dynamic( thrift, value, facebook::thrift::dynamic_format::JSON_1); @@ -105,8 +112,9 @@ class ThriftPrimitiveNode : public thrift_cow::Serializable { } template - auto fromFollyDynamic(const folly::dynamic&) const - -> std::enable_if_t { + void fromFollyDynamic(const folly::dynamic&) const + requires(T::immutable) + { throwImmutableException(); } #endif diff --git a/fboss/thrift_cow/nodes/ThriftSetNode-inl.h b/fboss/thrift_cow/nodes/ThriftSetNode-inl.h index bc724c678de78..62c5b5b04e9c7 100644 --- a/fboss/thrift_cow/nodes/ThriftSetNode-inl.h +++ b/fboss/thrift_cow/nodes/ThriftSetNode-inl.h @@ -153,12 +153,11 @@ struct ThriftSetFields : public FieldBaseType { } template - auto remove(const ValueTType& value) - -> std::enable_if_t< - !std::is_same_v< - typename T::ValueTypeClass, - apache::thrift::type_class::string>, - bool> { + bool remove(const ValueTType& value) + requires(!std::is_same_v< + typename T::ValueTypeClass, + apache::thrift::type_class::string>) + { return erase(value); } @@ -358,12 +357,11 @@ class ThriftSetNode : public NodeBaseT< } template - auto remove(const ValueTType& value) - -> std::enable_if_t< - !std::is_same_v< - typename T::ValueTypeClass, - apache::thrift::type_class::string>, - bool> { + bool remove(const ValueTType& value) + requires(!std::is_same_v< + typename T::ValueTypeClass, + apache::thrift::type_class::string>) + { // TODO: better handling of set tc so we don't need // special impl remove fn return this->writableFields()->remove(value); diff --git a/fboss/thrift_cow/nodes/ThriftStructNode-inl.h b/fboss/thrift_cow/nodes/ThriftStructNode-inl.h index 0add9ffca7fa0..53ebc5ba47e43 100644 --- a/fboss/thrift_cow/nodes/ThriftStructNode-inl.h +++ b/fboss/thrift_cow/nodes/ThriftStructNode-inl.h @@ -182,11 +182,10 @@ struct ThriftStructFields : public FieldBaseType { template constexpr bool isSkipThriftCowEnabled() const { - if constexpr (EnableHybridStorage) { - if constexpr (HasSkipThriftCow::value) { - return true; - } + if constexpr (EnableHybridStorage && HasSkipThriftCow::value) { + return true; } + return false; } @@ -550,6 +549,13 @@ class ThriftStructNode : public NodeBaseT< auto clonedChild = child->clone(); child.swap(clonedChild); } + } else if constexpr ( + EnableHybridStorage && + Fields::template HasSkipThriftCow::value) { + using UnderlyingType = + typename Fields::template TypeFor::element_type; + auto clonedChild = std::make_shared(child->ref()); + child.swap(clonedChild); } } else if (construct) { this->template constructMember(); @@ -594,7 +600,14 @@ class ThriftStructNode : public NodeBaseT< return; } auto tok = *begin; - node.modify(tok); + if constexpr (thrift_cow::is_cow_type_v) { + if constexpr (std::is_same_v< + typename folly::remove_cvref_t< + decltype(node)>::CowType, + NodeType>) { + node.modify(tok); + } + } }); result = diff --git a/fboss/thrift_cow/nodes/Traits.h b/fboss/thrift_cow/nodes/Traits.h index 8bb7493f9df5a..8b2b08ad1e27d 100644 --- a/fboss/thrift_cow/nodes/Traits.h +++ b/fboss/thrift_cow/nodes/Traits.h @@ -49,13 +49,14 @@ struct ThriftMapResolver { using type = CppType; \ }; -template -using ResolvedType = typename ThriftStructResolver::type; +template +using ResolvedType = + typename ThriftStructResolver::type; template using ResolvedMapType = typename ThriftMapResolver::type; -template +template struct ConvertToNodeTraits { // we put primitives in optionals so that access patterns are the // same for all node types. Either will get std::optional or @@ -66,11 +67,16 @@ struct ConvertToNodeTraits { using isChild = std::false_type; }; -template -struct ConvertToNodeTraits { - using default_type = - ThriftStructNode, false>; - using struct_type = ResolvedType; +template +struct ConvertToNodeTraits< + EnableHybridStorage, + apache::thrift::type_class::structure, + TType> { + using default_type = ThriftStructNode< + TType, + ThriftStructResolver, + EnableHybridStorage>; + using struct_type = ResolvedType; static_assert( std::is_base_of_v, "Resolved type needs to be a subclass of ThriftStructNode"); @@ -82,44 +88,65 @@ struct ConvertToNodeTraits { using isChild = std::true_type; }; -template -struct ConvertToNodeTraits { +template +struct ConvertToNodeTraits< + EnableHybridStorage, + apache::thrift::type_class::variant, + TType> { using type = std::shared_ptr>; using isChild = std::true_type; }; -template -struct ConvertToNodeTraits, TType> { +template +struct ConvertToNodeTraits< + EnableHybridStorage, + apache::thrift::type_class::list, + TType> { using type = std::shared_ptr< ThriftListNode, TType>>; using isChild = std::true_type; }; +template +using bool_constant = std::integral_constant; + template < + bool EnableHybridStorage, typename TypeClass, typename TType, - template typename ConvertToNodeTraitsT = ConvertToNodeTraits> + template typename ConvertToNodeTraitsT = + ConvertToNodeTraits> struct ThriftMapTraits { using TC = TypeClass; using Type = TType; using KeyType = typename TType::key_type; using KeyCompare = std::less; - template - using ConvertToNodeTraits = ConvertToNodeTraitsT; + using EnableHybridStorageT = bool_constant; + template + using ConvertToNodeTraits = ConvertToNodeTraitsT; }; -template +template < + bool EnableHybridStorage, + typename KeyT, + typename ValueT, + typename TType> struct ConvertToNodeTraits< + EnableHybridStorage, apache::thrift::type_class::map, TType> { using type_class = apache::thrift::type_class::map; - using map_type = ResolvedMapType>; + using map_type = + ResolvedMapType>; using type = std::shared_ptr; using isChild = std::true_type; }; -template -struct ConvertToNodeTraits, TType> { +template +struct ConvertToNodeTraits< + EnableHybridStorage, + apache::thrift::type_class::set, + TType> { using type = std::shared_ptr< ThriftSetNode, TType>>; using isChild = std::true_type; @@ -170,10 +197,10 @@ struct read_annotation_allow_skip_thrift_cow< fatal_true>::value; }; -template +template struct StructMemberTraits { using member = Member; - using traits = StructMemberTraits; + using traits = StructMemberTraits; using name = typename Member::name; using ttype = typename Member::type; using tc = typename Member::type_class; @@ -187,11 +214,11 @@ struct StructMemberTraits { using default_type = std::conditional_t< allowSkipThriftCow, typename std::shared_ptr>, - typename ConvertToNodeTraits::type>; + typename ConvertToNodeTraits::type>; using isChild = std::conditional_t< allowSkipThriftCow, std::false_type, - typename ConvertToNodeTraits::isChild>; + typename ConvertToNodeTraits::isChild>; // if the member type is overriden, use the overriden type. using type = std::conditional_t< @@ -200,22 +227,24 @@ struct StructMemberTraits { default_type>; }; -template +template struct ExtractStructFields { template using apply = StructMemberTraits; }; -template +template struct UnionMemberTraits { using member = Member; - using traits = UnionMemberTraits; + using traits = UnionMemberTraits; using name = typename Member::metadata::name; using id = typename Member::metadata::id; using ttype = typename Member::type; using tc = typename Member::metadata::type_class; - using type = typename ConvertToNodeTraits::type; - using isChild = typename ConvertToNodeTraits::isChild; + using type = + typename ConvertToNodeTraits::type; + using isChild = + typename ConvertToNodeTraits::isChild; }; struct ExtractUnionFields { diff --git a/fboss/thrift_cow/nodes/Types.h b/fboss/thrift_cow/nodes/Types.h index 3bc78023aa88e..31e6d0fc5e90d 100644 --- a/fboss/thrift_cow/nodes/Types.h +++ b/fboss/thrift_cow/nodes/Types.h @@ -43,38 +43,38 @@ struct ReferenceWrapper : std::reference_wrapper { using Base = std::reference_wrapper; using Base::Base; - template < - typename T = Type, - std::enable_if_t, bool> = true> - auto& operator*() { + template + auto& operator*() + requires(!std::is_const_v) + { return *(this->get()); } - template < - typename T = Type, - std::enable_if_t, bool> = true> - const auto& operator*() const { + template + const auto& operator*() const + requires(std::is_const_v) + { return std::as_const(*(this->get())); } - template < - typename T = Type, - std::enable_if_t, bool> = true> - auto* operator->() { + template + auto* operator->() + requires(!std::is_const_v) + { return std::addressof(**this); } - template < - typename T = Type, - std::enable_if_t, bool> = true> - const auto* operator->() const { + template + const auto* operator->() const + requires(std::is_const_v) + { return std::addressof(**this); } - template < - typename T = Type, - std::enable_if_t, bool> = true> - void reset() { + template + void reset() + requires(!std::is_const_v) + { this->get().reset(); } diff --git a/fboss/thrift_cow/nodes/tests/BUCK b/fboss/thrift_cow/nodes/tests/BUCK index bcc4c9c834f19..264e8766e7b48 100644 --- a/fboss/thrift_cow/nodes/tests/BUCK +++ b/fboss/thrift_cow/nodes/tests/BUCK @@ -50,7 +50,6 @@ cpp_unittest( supports_static_listing = False, deps = [ ":test-cpp2-reflection", - "//fboss/agent:switch_config-cpp2-reflection", "//fboss/agent/state:nodebase", "//fboss/fsdb/if:fsdb_oper-cpp2-types", "//fboss/thrift_cow/nodes:nodes", diff --git a/fboss/thrift_cow/nodes/tests/ThriftListNodeTests.cpp b/fboss/thrift_cow/nodes/tests/ThriftListNodeTests.cpp index 36c1eada05fc0..213c5706ff77e 100644 --- a/fboss/thrift_cow/nodes/tests/ThriftListNodeTests.cpp +++ b/fboss/thrift_cow/nodes/tests/ThriftListNodeTests.cpp @@ -13,11 +13,9 @@ #include #include #include -#include "fboss/agent/gen-cpp2/switch_config_fatal_types.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/thrift_cow/nodes/Serializer.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include #include diff --git a/fboss/thrift_cow/nodes/tests/ThriftMapNodeTests.cpp b/fboss/thrift_cow/nodes/tests/ThriftMapNodeTests.cpp index a47418e3e41f9..c7e9f64152ea0 100644 --- a/fboss/thrift_cow/nodes/tests/ThriftMapNodeTests.cpp +++ b/fboss/thrift_cow/nodes/tests/ThriftMapNodeTests.cpp @@ -10,14 +10,11 @@ #include #include -#include #include #include -#include "fboss/agent/gen-cpp2/switch_config_fatal_types.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/thrift_cow/nodes/Serializer.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include "fboss/agent/state/DeltaFunctions.h" #include "fboss/agent/state/MapDelta.h" @@ -44,6 +41,7 @@ cfg::L4PortRange buildPortRange(int min, int max) { TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesSimple) { ThriftMapFields, @@ -54,6 +52,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesSimple) { TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesGetSet) { ThriftMapFields, @@ -70,6 +69,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesGetSet) { TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesConstructFromThrift) { std::unordered_map data = {{1, 2}, {5, 99}}; ThriftMapFields, @@ -85,6 +85,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsPrimitivesConstructFromThrift) { TEST(ThriftMapNodeTests, ThriftMapFieldsStructsSimple) { ThriftMapFields, @@ -95,6 +96,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsStructsSimple) { TEST(ThriftMapNodeTests, ThriftMapFieldsStructsGetSet) { ThriftMapFields, @@ -121,6 +123,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsStructsConstructFromThrift) { {TestEnum::FIRST, buildPortRange(100, 999)}, {TestEnum::SECOND, buildPortRange(1000, 9999)}}; ThriftMapFields, @@ -136,6 +139,7 @@ TEST(ThriftMapNodeTests, ThriftMapFieldsStructsConstructFromThrift) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesSimple) { ThriftMapNode, @@ -146,6 +150,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesSimple) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesGetSet) { ThriftMapNode, @@ -162,6 +167,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesGetSet) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesConstructFromThrift) { std::unordered_map data = {{1, 2}, {5, 99}}; ThriftMapNode, @@ -178,6 +184,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesConstructFromThrift) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesVisit) { std::unordered_map data = {{1, 2}, {5, 99}}; ThriftMapNode, @@ -205,6 +212,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesVisit) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesVisitMutable) { std::unordered_map data = {{1, 2}, {5, 99}}; ThriftMapNode, @@ -240,6 +248,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesVisitMutable) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesClone) { using TestNodeType = ThriftMapNode, @@ -261,6 +270,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesClone) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesModify) { using TestNodeType = ThriftMapNode, @@ -290,6 +300,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesModify) { TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesRemove) { using TestNodeType = ThriftMapNode, @@ -325,6 +336,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodePrimitivesRemove) { TEST(ThriftMapNodeTests, ThriftMapNodeStructsSimple) { ThriftMapNode, @@ -335,6 +347,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsSimple) { TEST(ThriftMapNodeTests, ThriftMapNodeStructsGetSet) { ThriftMapNode, @@ -361,6 +374,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsConstructFromThrift) { {TestEnum::FIRST, buildPortRange(100, 999)}, {TestEnum::SECOND, buildPortRange(1000, 9999)}}; ThriftMapNode, @@ -379,6 +393,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsVisit) { {TestEnum::FIRST, buildPortRange(100, 999)}, {TestEnum::SECOND, buildPortRange(1000, 9999)}}; ThriftMapNode, @@ -456,6 +471,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsVisitMutable) { {TestEnum::FIRST, buildPortRange(100, 999)}, {TestEnum::SECOND, buildPortRange(1000, 9999)}}; ThriftMapNode, @@ -521,6 +537,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsVisitMutable) { TEST(ThriftMapNodeTests, ThriftMapNodeStructsClone) { using TestNodeType = ThriftMapNode, @@ -547,6 +564,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsClone) { TEST(ThriftMapNodeTests, ThriftMapNodeStructsModify) { using TestNodeType = ThriftMapNode, @@ -593,6 +611,7 @@ TEST(ThriftMapNodeTests, ThriftMapNodeStructsModify) { TEST(ThriftMapNodeTests, MapDelta) { using Map = ThriftMapNode, diff --git a/fboss/thrift_cow/nodes/tests/ThriftSetNodeTests.cpp b/fboss/thrift_cow/nodes/tests/ThriftSetNodeTests.cpp index e5ca5006025b3..7575b3baad52e 100644 --- a/fboss/thrift_cow/nodes/tests/ThriftSetNodeTests.cpp +++ b/fboss/thrift_cow/nodes/tests/ThriftSetNodeTests.cpp @@ -10,14 +10,10 @@ #include #include -#include -#include #include -#include "fboss/agent/gen-cpp2/switch_config_fatal_types.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/thrift_cow/nodes/Serializer.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include #include diff --git a/fboss/thrift_cow/nodes/tests/ThriftStructNodeTests.cpp b/fboss/thrift_cow/nodes/tests/ThriftStructNodeTests.cpp index 8275154000f12..700f6148c1ee8 100644 --- a/fboss/thrift_cow/nodes/tests/ThriftStructNodeTests.cpp +++ b/fboss/thrift_cow/nodes/tests/ThriftStructNodeTests.cpp @@ -13,11 +13,9 @@ #include #include #include -#include "fboss/agent/gen-cpp2/switch_config_fatal_types.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/thrift_cow/nodes/Serializer.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include #include @@ -336,14 +334,36 @@ TEST(ThriftStructNodeTests, ThriftStructNodeClone) { ASSERT_TRUE(newNode->template cref()->isPublished()); } -template -class ThriftStructNodeTestSuite : public ::testing::Test {}; +template +struct TestParams { + static constexpr auto hybridStorage = EnableHybridStorage; +}; + +using StorageTestTypes = ::testing::Types, TestParams>; + +template +class ThriftStructNodeTestSuite : public ::testing::Test { + public: + using T = TestParams; + + auto initNode(auto val) { + using RootType = std::remove_cvref_t; + return std::make_shared, + TestParams::hybridStorage>>(val); + } + constexpr bool isHybridStorage() { + return TestParams::hybridStorage; + } +}; -TYPED_TEST_SUITE_P(ThriftStructNodeTestSuite); +TYPED_TEST_SUITE(ThriftStructNodeTestSuite, StorageTestTypes); + +TYPED_TEST(ThriftStructNodeTestSuite, NodeTypeTest) { + using Param = typename TestFixture::T; + constexpr bool enableHybridStorage = Param::hybridStorage; -// no annotation -template -void thriftStructNodeModify() { auto portRange = buildPortRange(100, 999); TestStruct data; @@ -351,79 +371,109 @@ void thriftStructNodeModify() { data.inlineInt() = 123; data.inlineString() = "HelloThere"; data.inlineStruct() = std::move(portRange); + data.mapOfStringToI32() = {{"test1", 1}}; + data.hybridStruct() = ChildStruct(); - auto node = std::make_shared, - EnableHybridStorage>>(data); + auto node = this->initNode(data); + node->publish(); + + // root is not hybrid node static_assert(!std::is_same_v< typename decltype(node)::element_type::CowType, HybridNodeType>); + + // check fields that are not annotated, should never be hybrid + static_assert(!std::is_same_v< + typename decltype(node->template get< + k::inlineStruct>())::element_type::CowType, + HybridNodeType>); + static_assert( + !std::is_same_v< + typename folly::remove_cvref_t< + decltype(node->template get().value())>::CowType, + HybridNodeType>); + static_assert( + !std::is_same_v< + typename folly::remove_cvref_t< + decltype(node->template get().value())>::CowType, + HybridNodeType>); + + // check fields that are annotated, should be hybrid if enabled + static_assert( + std::is_same_v< + typename decltype(node->template get< + k::mapOfStringToI32>())::element_type::CowType, + HybridNodeType> == enableHybridStorage); + static_assert( + std::is_same_v< + typename decltype(node->template get< + k::hybridStruct>())::element_type::CowType, + HybridNodeType> == enableHybridStorage); +} + +TYPED_TEST(ThriftStructNodeTestSuite, ThriftStructNodeModifyTest) { + using Param = typename TestFixture::T; + constexpr bool enableHybridStorage = Param::hybridStorage; + + auto portRange = buildPortRange(100, 999); + + TestStruct data; + data.inlineBool() = true; + data.inlineInt() = 123; + data.inlineString() = "HelloThere"; + data.inlineStruct() = std::move(portRange); + data.mapOfStringToI32() = {{"test1", 1}}; + + auto node = this->initNode(data); + ASSERT_FALSE(node->isPublished()); - if constexpr (!EnableHybridStorage) { - ASSERT_FALSE(node->template cref()->isPublished()); + ASSERT_FALSE(node->template cref()->isPublished()); + + auto oldNode = node->template ref(); + auto newNode = node->template modify(); + // do a ptr comparison to make sure the node is cloned + // if node is cow node, then it will not be cloned if it is not published + // so only check if hybrid storage is enabled + if constexpr (enableHybridStorage) { + EXPECT_NE(newNode, oldNode); } node->publish(); ASSERT_TRUE(node->isPublished()); - if constexpr (!EnableHybridStorage) { - ASSERT_TRUE(node->template cref()->isPublished()); - } + ASSERT_TRUE(node->template cref()->isPublished()); ThriftStructNode< TestStruct, - ThriftStructResolver, - EnableHybridStorage>::modify(&node, "inlineStruct"); - - static_assert(!std::is_same_v< - typename decltype(node->template get< - k::inlineStruct>())::element_type::CowType, - HybridNodeType>); + ThriftStructResolver, + enableHybridStorage>::modify(&node, "inlineStruct"); - if constexpr (!EnableHybridStorage) { - ASSERT_FALSE(node->isPublished()); - ASSERT_FALSE(node->template cref()->isPublished()); - } + ASSERT_FALSE(node->isPublished()); + ASSERT_FALSE(node->template cref()->isPublished()); // now try modifying a missing optional field ASSERT_FALSE(node->template isSet()); ThriftStructNode< TestStruct, - ThriftStructResolver, - EnableHybridStorage>::modify(&node, "optionalString"); + ThriftStructResolver, + enableHybridStorage>::modify(&node, "optionalString"); ASSERT_TRUE(node->template isSet()); - static_assert(!std::is_same_v< - typename folly::remove_cvref_t< - decltype(node->template get() - .value())>::CowType, - HybridNodeType>); - - node = std::make_shared, - EnableHybridStorage>>(data); + node = this->initNode(data); node->publish(); auto& inLineBool = ThriftStructNode< TestStruct, - ThriftStructResolver, - EnableHybridStorage>::template modify(&node); + ThriftStructResolver, + enableHybridStorage>::template modify(&node); EXPECT_FALSE(node->isPublished()); inLineBool->set(false); auto& optionalStruct1 = ThriftStructNode< TestStruct, - ThriftStructResolver, - EnableHybridStorage>::template modify(&node); + ThriftStructResolver, + enableHybridStorage>::template modify(&node); EXPECT_FALSE(optionalStruct1->isPublished()); optionalStruct1->fromThrift(buildPortRange(1, 10)); - static_assert(!std::is_same_v< - typename folly::remove_cvref_t< - decltype(node->template get())>:: - element_type::CowType, - HybridNodeType>); - node->publish(); EXPECT_TRUE(node->isPublished()); @@ -440,22 +490,6 @@ void thriftStructNodeModify() { EXPECT_FALSE(obj2.optionalStruct().has_value()); } -TYPED_TEST_P(ThriftStructNodeTestSuite, ThriftStructNodeModify) { - // non-annotated fields - thriftStructNodeModify(); - thriftStructNodeModify(); - // TODO: annotated fields -} - -using EnableHybridStorageTypes = testing::Types; - -REGISTER_TYPED_TEST_SUITE_P(ThriftStructNodeTestSuite, ThriftStructNodeModify); - -INSTANTIATE_TYPED_TEST_SUITE_P( - ThriftStructNodeTest, - ThriftStructNodeTestSuite, - EnableHybridStorageTypes); - TEST(ThriftStructNodeTests, ThriftStructNodeRemove) { auto portRange = buildPortRange(100, 999); diff --git a/fboss/thrift_cow/nodes/tests/ThriftUnionNodeTests.cpp b/fboss/thrift_cow/nodes/tests/ThriftUnionNodeTests.cpp index 06d9e12ebc0e7..2fc020a1fc632 100644 --- a/fboss/thrift_cow/nodes/tests/ThriftUnionNodeTests.cpp +++ b/fboss/thrift_cow/nodes/tests/ThriftUnionNodeTests.cpp @@ -12,11 +12,9 @@ #include #include #include -#include "fboss/agent/gen-cpp2/switch_config_fatal_types.h" #include "fboss/fsdb/if/gen-cpp2/fsdb_oper_types.h" #include "fboss/thrift_cow/nodes/Serializer.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include #include diff --git a/fboss/thrift_cow/nodes/tests/test.thrift b/fboss/thrift_cow/nodes/tests/test.thrift index ad2e9448151e3..babed4fb68f35 100644 --- a/fboss/thrift_cow/nodes/tests/test.thrift +++ b/fboss/thrift_cow/nodes/tests/test.thrift @@ -32,6 +32,8 @@ union TestUnion { struct ChildStruct { 1: map childMap; + 2: map strMap; + 3: map structMap; } struct TestStruct { @@ -41,17 +43,23 @@ struct TestStruct { 4: switch_config.L4PortRange inlineStruct; 5: optional i32 optionalInt; 6: optional switch_config.L4PortRange optionalStruct; - 7: list listOfPrimitives; + 7: list listOfPrimitives (allow_skip_thrift_cow = true); 8: list listOfStructs; 9: list> listOfListOfPrimitives; 10: list> listOfListOfStructs; - 11: map mapOfI32ToI32; - 12: map mapOfEnumToI32; - 13: map mapOfStringToI32; - 14: map mapOfI32ToStruct; - 15: map mapOfEnumToStruct; + 11: map mapOfI32ToI32 (allow_skip_thrift_cow = true); + 12: map mapOfEnumToI32 (allow_skip_thrift_cow = true); + 13: map mapOfStringToI32 (allow_skip_thrift_cow = true); + 14: map mapOfI32ToStruct ( + allow_skip_thrift_cow = true, + ); + 15: map mapOfEnumToStruct ( + allow_skip_thrift_cow = true, + ); 16: map mapOfStringToStruct; - 17: map> mapOfI32ToListOfStructs; + 17: map> mapOfI32ToListOfStructs ( + allow_skip_thrift_cow = true, + ); 18: set setOfI32; 19: set setOfEnum; 20: set setOfString; @@ -71,6 +79,9 @@ struct TestStruct { allow_skip_thrift_cow = true, ); 33: map> hybridMapOfMap (allow_skip_thrift_cow = true); + 34: map> mapOfI32ToSetOfString ( + allow_skip_thrift_cow = true, + ); } struct ParentTestStruct { diff --git a/fboss/thrift_cow/storage/CowStorage.h b/fboss/thrift_cow/storage/CowStorage.h index 5b0b240eb7e84..998bda778a2a4 100644 --- a/fboss/thrift_cow/storage/CowStorage.h +++ b/fboss/thrift_cow/storage/CowStorage.h @@ -27,28 +27,24 @@ class CowStorage : public Storage> { using Base = Storage>; using RootT = Root; using StorageImpl = Node; - using Self = CowStorage; using PathIter = typename Base::PathIter; using ExtPath = typename Base::ExtPath; using ExtPathIter = typename Base::ExtPathIter; - template < - typename T, - std::enable_if_t, Root>, bool> = true> + template explicit CowStorage(T&& root) + requires(std::is_same_v, Root>) : root_(std::make_shared(std::forward(root))) {} - template < - typename T, - std::enable_if_t, Root>, bool> = true> - explicit CowStorage(std::shared_ptr root) : root_(root) {} + template + explicit CowStorage(std::shared_ptr root) + requires(std::is_same_v, Root>) + : root_(root) {} - template < - typename T, - std::enable_if_t< - std::is_same_v, std::shared_ptr>, - bool> = true> - explicit CowStorage(T&& storage) : root_(std::forward(storage)) {} + template + explicit CowStorage(T&& storage) + requires(std::is_same_v, std::shared_ptr>) + : root_(std::forward(storage)) {} bool isPublished_impl() { return root_->isPublished(); @@ -246,13 +242,17 @@ class CowStorage : public Storage> { std::shared_ptr root_; }; -template -bool operator==(const CowStorage& first, const CowStorage& second) { +template +bool operator==( + const CowStorage& first, + const CowStorage& second) { return first.root() == second.root(); } -template -bool operator!=(const CowStorage& first, const CowStorage& second) { +template +bool operator!=( + const CowStorage& first, + const CowStorage& second) { return first.root() != second.root(); } diff --git a/fboss/thrift_cow/storage/Storage.h b/fboss/thrift_cow/storage/Storage.h index 8a9faea9073c1..3f19194fc9189 100644 --- a/fboss/thrift_cow/storage/Storage.h +++ b/fboss/thrift_cow/storage/Storage.h @@ -38,11 +38,10 @@ class Storage { static_cast(this)->publish_impl(); } - template < - typename Path, - typename = - std::enable_if_t, void>> - Result get(const Path& path) const { + template + Result get(const Path& path) const + requires(std::is_same_v) + { return this->template get(path.begin(), path.end()); } template @@ -54,11 +53,10 @@ class Storage { return static_cast(this)->template get_impl(begin, end); } - template < - typename Path, - typename = - std::enable_if_t, void>> - Result get_encoded(const Path& path, OperProtocol protocol) const { + template + Result get_encoded(const Path& path, OperProtocol protocol) const + requires(std::is_same_v) + { return this->get_encoded(path.begin(), path.end(), protocol); } Result get_encoded(const ConcretePath& path, OperProtocol protocol) @@ -79,13 +77,10 @@ class Storage { begin, end, protocol); } - template < - typename Path, - typename = - std::enable_if_t, void>> - std::optional set( - const Path& path, - typename Path::DataT value) { + template + std::optional set(const Path& path, typename Path::DataT value) + requires(std::is_same_v) + { return this->set(path.begin(), path.end(), std::move(value)); } @@ -99,13 +94,12 @@ class Storage { begin, end, std::forward(value)); } - template < - typename Path, - typename = - std::enable_if_t, void>> + template std::optional set_encoded( const Path& path, - const OperState& state) { + const OperState& state) + requires(std::is_same_v) + { return this->set_encoded(path.begin(), path.end(), state); } std::optional set_encoded( @@ -130,13 +124,12 @@ class Storage { return static_cast(this)->patch_impl(state); } - template < - typename Path, - typename = - std::enable_if_t, void>> + template std::optional add_encoded( const Path& path, - const OperState& state) { + const OperState& state) + requires(std::is_same_v) + { return this->add_encoded(path.begin(), path.end(), state); } std::optional add_encoded( @@ -149,11 +142,10 @@ class Storage { return static_cast(this)->add_encoded_impl(begin, end, state); } - template < - typename Path, - typename = - std::enable_if_t, void>> - std::optional remove(const Path& path) { + template + std::optional remove(const Path& path) + requires(std::is_same_v) + { return this->remove(path.begin(), path.end()); } diff --git a/fboss/thrift_cow/storage/tests/CowStorageTests.cpp b/fboss/thrift_cow/storage/tests/CowStorageTests.cpp index 483577fcb8d40..5592e922e3250 100644 --- a/fboss/thrift_cow/storage/tests/CowStorageTests.cpp +++ b/fboss/thrift_cow/storage/tests/CowStorageTests.cpp @@ -11,7 +11,6 @@ #include #include "fboss/fsdb/oper/ExtendedPathBuilder.h" #include "fboss/fsdb/tests/gen-cpp2-thriftpath/thriftpath_test.h" // @manual=//fboss/fsdb/tests:thriftpath_test_thrift-cpp2-thriftpath -#include "fboss/fsdb/tests/gen-cpp2/thriftpath_test_fatal_types.h" #include "fboss/fsdb/tests/gen-cpp2/thriftpath_test_types.h" using folly::dynamic; diff --git a/fboss/thrift_cow/visitors/DeltaVisitor.h b/fboss/thrift_cow/visitors/DeltaVisitor.h index 9e8d161a10ea3..9f7c6f386517b 100644 --- a/fboss/thrift_cow/visitors/DeltaVisitor.h +++ b/fboss/thrift_cow/visitors/DeltaVisitor.h @@ -90,16 +90,16 @@ struct DeltaVisitOptions { DeltaVisitMode mode, DeltaVisitOrder order = DeltaVisitOrder::PARENTS_FIRST, bool outputIdPaths = false, - bool recurseIntoHybridNodes = false) + bool hybridNodeDeepTraversal = false) : mode(mode), order(order), outputIdPaths(outputIdPaths), - recurseIntoHybridNodes(recurseIntoHybridNodes) {} + hybridNodeDeepTraversal(hybridNodeDeepTraversal) {} DeltaVisitMode mode; DeltaVisitOrder order; bool outputIdPaths; - bool recurseIntoHybridNodes; + bool hybridNodeDeepTraversal; }; namespace dv_detail { @@ -253,7 +253,7 @@ void visitAddedOrRemovedNode( RecurseVisitMode::FULL, subtreeVisitOrder, options.outputIdPaths, - options.recurseIntoHybridNodes), + options.hybridNodeDeepTraversal), std::move(processChange)); } @@ -277,7 +277,7 @@ void visitAddedOrRemovedNode( // only enable for HybridNode types requires(std::is_same_v) { - if (!options.recurseIntoHybridNodes) { + if (!options.hybridNodeDeepTraversal) { invokeVisitorFnHelper( traverser, oldNode, @@ -286,7 +286,7 @@ void visitAddedOrRemovedNode( std::forward(f)); } else { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal not implemented")); } } @@ -391,9 +391,9 @@ struct DeltaVisitor> { // only enable for HybridNode types requires(std::is_same_v) { - if (options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode for Set not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal of Set not implemented")); } bool hasDifferences{false}; // if both old and new are non-null, compare contents @@ -517,9 +517,9 @@ struct DeltaVisitor> { // only enable for HybridNode types requires(std::is_same_v) { - if (options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode for List not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal of List not implemented")); } bool hasDifferences{false}; // if both old and new are non-null, compare contents @@ -630,40 +630,76 @@ struct DeltaVisitor< // only enable for Fields types requires(std::is_same_v) { - if (options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode for Map not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal of Map not implemented")); } + + if (traverser.shouldShortCircuit(VisitorType::DELTA)) { + return false; + } + bool hasDifferences{false}; - // if both old and new are non-null, compare contents - if ((oldFields != newFields) && - (static_cast(oldFields) && static_cast(newFields))) { - const auto& oldRef = oldFields->ref(); - const auto& newRef = newFields->ref(); - // changed entries - for (const auto& [key, val] : oldRef) { - auto it = newRef.find(key); - if (it == newRef.end()) { - hasDifferences = true; - } else if (val != it->second) { - hasDifferences = true; - } + const auto& oldRef = oldFields->ref(); + const auto& newRef = newFields->ref(); + + for (const auto& [key, val] : oldRef) { + auto it = newRef.find(key); + if (it != newRef.end() && val == it->second) { + // unchanged entry + continue; } + traverser.push(folly::to(key), TCType); + if (it == newRef.end()) { + // deleted entry + hasDifferences = true; + dv_detail::invokeVisitorFnHelper( + traverser, + val, + decltype(val){}, + DeltaElemTag::MINIMAL, + std::forward(f)); + } else if (val != it->second) { + // changed entry + hasDifferences = true; + dv_detail::invokeVisitorFnHelper( + traverser, + val, + it->second, + DeltaElemTag::MINIMAL, + std::forward(f)); + } + traverser.pop(TCType); + } - for (const auto& [key, val] : newRef) { - if (oldRef.find(key) == oldRef.end()) { - hasDifferences = true; - } + // new entries only. First loop handles all replacement deltas. + for (const auto& [key, val] : newRef) { + if (oldRef.find(key) == oldRef.end()) { + hasDifferences = true; + traverser.push(folly::to(key), TCType); + + dv_detail::invokeVisitorFnHelper( + traverser, + decltype(val){}, + val, + DeltaElemTag::MINIMAL, + std::forward(f)); + + traverser.pop(TCType); } } - if (hasDifferences) { + + if (hasDifferences && + (options.mode == DeltaVisitMode::PARENTS || + options.mode == DeltaVisitMode::FULL)) { dv_detail::invokeVisitorFnHelper( traverser, oldFields, newFields, - DeltaElemTag::MINIMAL, + DeltaElemTag::NOT_MINIMAL, std::forward(f)); } + return hasDifferences; } }; @@ -794,9 +830,9 @@ struct DeltaVisitor { // only enable for Fields types requires(std::is_same_v) { - if (options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode for Variant not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal of Variant not implemented")); } bool hasDifferences{false}; // if both old and new are non-null, compare contents @@ -912,9 +948,9 @@ struct DeltaVisitor { // only enable for Fields types requires(std::is_same_v) { - if (options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "DeltaVisitor support for recurseIntoHybridNode for Struct not implemented")); + "DeltaVisitor support for hybridNodeDeepTraversal of Struct not implemented")); } bool hasDifferences{false}; // if both old and new are non-null, compare contents diff --git a/fboss/thrift_cow/visitors/ExtendedPathVisitor.h b/fboss/thrift_cow/visitors/ExtendedPathVisitor.h index 64c07bc9427e8..9c00c2f15c64c 100644 --- a/fboss/thrift_cow/visitors/ExtendedPathVisitor.h +++ b/fboss/thrift_cow/visitors/ExtendedPathVisitor.h @@ -4,6 +4,8 @@ #include +#include +#include #include #include #include @@ -156,7 +158,20 @@ struct ExtendedPathVisitor> { Func&& f) requires(std::is_same_v) { - // TODO: implement specialization for HybridNode + throw std::runtime_error("Set: not implemented yet"); + } + + template + static void visit( + std::vector& path, + Node& node, + epv_detail::ExtPathIter begin, + epv_detail::ExtPathIter end, + const ExtPathVisitorOptions& options, + Func&& f) + requires(!is_cow_type_v && !is_field_type_v) + { + throw std::runtime_error("Set: not implemented yet"); } template @@ -215,7 +230,45 @@ struct ExtendedPathVisitor> { Func&& f) requires(std::is_same_v) { - // TODO: implement specialization for HybridNode + const auto& tObj = node.ref(); + const auto& elem = *begin++; + for (int i = 0; i < tObj.size(); ++i) { + auto matching = + epv_detail::matchingToken( + i, elem); + if (matching) { + path.push_back(*matching); + + ExtendedPathVisitor::visit( + path, tObj.at(i), begin, end, options, std::forward(f)); + path.pop_back(); + } + } + } + + template + static void visit( + std::vector& path, + Node& node, + epv_detail::ExtPathIter begin, + epv_detail::ExtPathIter end, + const ExtPathVisitorOptions& options, + Func&& f) + requires(!is_cow_type_v && !is_field_type_v) + { + const auto& elem = *begin++; + for (int i = 0; i < node.size(); ++i) { + auto matching = + epv_detail::matchingToken( + i, elem); + if (matching) { + path.push_back(*matching); + + ExtendedPathVisitor::visit( + path, node.at(i), begin, end, options, std::forward(f)); + path.pop_back(); + } + } } template @@ -271,6 +324,30 @@ struct ExtendedPathVisitor< path, node, begin, end, options, std::forward(f)); } + template + static void visit( + std::vector& path, + Node& node, + epv_detail::ExtPathIter begin, + epv_detail::ExtPathIter end, + const ExtPathVisitorOptions& options, + Func&& f) + requires(!is_cow_type_v && !is_field_type_v) + { + const auto& elem = *begin++; + for (auto& [key, val] : node) { + auto matching = epv_detail::matchingToken(key, elem); + if (matching) { + path.push_back(*matching); + + ExtendedPathVisitor::visit( + path, val, begin, end, options, std::forward(f)); + + path.pop_back(); + } + } + } + template static void visit( std::vector& path, @@ -281,7 +358,18 @@ struct ExtendedPathVisitor< Func&& f) requires(std::is_same_v) { - // TODO: implement specialization for HybridNode + const auto& elem = *begin++; + for (auto& [key, val] : node.ref()) { + auto matching = epv_detail::matchingToken(key, elem); + if (matching) { + path.push_back(*matching); + + ExtendedPathVisitor::visit( + path, val, begin, end, options, std::forward(f)); + + path.pop_back(); + } + } } template @@ -348,7 +436,20 @@ struct ExtendedPathVisitor { Func&& f) requires(std::is_same_v) { - // TODO: implement specialization for HybridNode + throw std::runtime_error("Variant: not implemented yet"); + } + + template + static void visit( + std::vector& path, + Node& node, + epv_detail::ExtPathIter begin, + epv_detail::ExtPathIter end, + const ExtPathVisitorOptions& options, + Func&& f) + requires(!is_cow_type_v && !is_field_type_v) + { + throw std::runtime_error("Variant: not implemented yet"); } template @@ -437,6 +538,48 @@ struct ExtendedPathVisitor { path, node, begin, end, options, std::forward(f)); } + template + static void visit( + std::vector& path, + Node& node, + epv_detail::ExtPathIter begin, + epv_detail::ExtPathIter end, + const ExtPathVisitorOptions& options, + Func&& f) + requires(!is_cow_type_v && !is_field_type_v) + { + using Members = typename apache::thrift::reflect_struct::members; + + const auto& elem = *begin++; + auto raw = elem.raw_ref(); + if (!raw) { + // Error! wildcards not supported for enum or struct + return; + } + + // Perform trie search over all members for key + visitMember(*raw, [&](auto indexed) { + using member = decltype(fatal::tag_type(indexed)); + using name = typename member::name; + using tc = typename member::type_class; + typename member::getter getter; + + // Recurse further + auto& child = getter(node); + + std::string memberName = options.outputIdPaths + ? folly::to(member::id::value) + : std::string(fatal::z_data(), fatal::size::value); + + path.push_back(std::move(memberName)); + + ExtendedPathVisitor::visit( + path, child, begin, end, options, std::forward(f)); + + path.pop_back(); + }); + } + template static void visit( std::vector& path, @@ -447,7 +590,38 @@ struct ExtendedPathVisitor { Func&& f) requires(std::is_same_v) { - // TODO: implement specialization for HybridNode + auto& tObj = node.ref(); + using T = typename Node::ThriftType; + using Members = typename apache::thrift::reflect_struct::members; + + const auto& elem = *begin++; + auto raw = elem.raw_ref(); + if (!raw) { + // Error! wildcards not supported for enum or struct + return; + } + + // Perform trie search over all members for key + visitMember(*raw, [&](auto indexed) { + using member = decltype(fatal::tag_type(indexed)); + using name = typename member::name; + using tc = typename member::type_class; + typename member::getter getter; + + // Recurse further + auto& child = getter(tObj); + + std::string memberName = options.outputIdPaths + ? folly::to(member::id::value) + : std::string(fatal::z_data(), fatal::size::value); + + path.push_back(std::move(memberName)); + + ExtendedPathVisitor::visit( + path, child, begin, end, options, std::forward(f)); + + path.pop_back(); + }); } template diff --git a/fboss/thrift_cow/visitors/PathVisitor.h b/fboss/thrift_cow/visitors/PathVisitor.h index fef29a4d7c8ad..05f6221cbf1f1 100644 --- a/fboss/thrift_cow/visitors/PathVisitor.h +++ b/fboss/thrift_cow/visitors/PathVisitor.h @@ -32,9 +32,11 @@ using PathIter = typename std::vector::const_iterator; class BasePathVisitorOperator { public: template - class SerializableReader : public Serializable { + class SerializableWrapper : public Serializable { + using TC = apache::thrift::type_class::structure; + public: - explicit SerializableReader(TType& node) : node_(node) {} + explicit SerializableWrapper(TType& node) : node_(node) {} folly::IOBuf encodeBuf(fsdb::OperProtocol proto) const override { folly::IOBufQueue queue; @@ -55,7 +57,10 @@ class BasePathVisitorOperator { return queue.moveAsValue(); } - void fromEncodedBuf(fsdb::OperProtocol, folly::IOBuf&&) override {} + void fromEncodedBuf(fsdb::OperProtocol proto, folly::IOBuf&& encoded) + override { + node_ = deserializeBuf(proto, std::move(encoded)); + } private: TType& node_; @@ -82,11 +87,8 @@ class BasePathVisitorOperator { visitTyped(Node& node, pv_detail::PathIter begin, pv_detail::PathIter end) requires(!is_cow_type_v) { - // supporting only read-only visitation - CHECK(visitReadOnly_); - // Node is not a Serializable, dispatch with wrapper - SerializableReader wrapper(node); + SerializableWrapper wrapper(node); if constexpr (std::is_const_v) { cvisit(wrapper, begin, end); cvisit(wrapper); @@ -110,8 +112,6 @@ class BasePathVisitorOperator { pv_detail::PathIter /* end */) {} virtual void cvisit(const Serializable& node) {} - - bool visitReadOnly_ = true; }; struct GetEncodedPathVisitorOperator : public BasePathVisitorOperator { @@ -137,9 +137,7 @@ struct SetEncodedPathVisitorOperator : public BasePathVisitorOperator { SetEncodedPathVisitorOperator( fsdb::OperProtocol protocol, const folly::fbstring& val) - : protocol_(protocol), val_(val) { - visitReadOnly_ = false; - } + : protocol_(protocol), val_(val) {} protected: void visit(facebook::fboss::thrift_cow::Serializable& node) override { @@ -171,7 +169,8 @@ enum class ThriftTraverseResult { }; /* - * invokeVisitorFnHelper allows us to support two different visitor signatures: + * invokeVisitorFnHelper allows us to support two different visitor + * signatures: * * 1. f(node) * 2. f(node, begin, end) @@ -198,6 +197,22 @@ struct PathVisitorImpl; using PathIter = typename std::vector::const_iterator; +template +struct VisitImplParams { + public: + VisitImplParams( + pv_detail::PathIter begin, + pv_detail::PathIter end, + const PathVisitMode& mode, + Op& op) + : begin(begin), end(end), mode(mode), op(op) {} + + pv_detail::PathIter begin; + pv_detail::PathIter end; + const PathVisitMode& mode; + Op& op; +}; + // Version of an operator that forwards operation to a lambda. This should be // used as sparingly as possible, only when node types are needed, because // every call with this templated operator is a unique instantiation of the @@ -230,32 +245,30 @@ struct LambdaPathVisitorOperator { }; template -ThriftTraverseResult visitNode( - Node& node, - PathIter begin, - PathIter end, - const PathVisitMode& mode, - Op& op) +ThriftTraverseResult +visitNode(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - if (mode == PathVisitMode::FULL || begin == end) { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { try { - op.visitTyped(node, begin, end); - if (begin == end) { + params.op.visitTyped(node, cursor, params.end); + if (cursor == params.end) { return ThriftTraverseResult::OK; } } catch (const std::exception& ex) { - XLOG(ERR) << "Exception while traversing path: " << ex.what(); + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); return ThriftTraverseResult::VISITOR_EXCEPTION; } } if constexpr (std::is_const_v) { - return PathVisitorImpl::visit(*node.getFields(), begin, end, mode, op); + return PathVisitorImpl::visit(*node.getFields(), params, cursor); } else { - return PathVisitorImpl::visit( - *node.writableFields(), begin, end, mode, op); + return PathVisitorImpl::visit(*node.writableFields(), params, cursor); } } @@ -267,39 +280,93 @@ struct PathVisitorImpl> { using TC = apache::thrift::type_class::set; template - static inline ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - return pv_detail::visitNode(node, begin, end, mode, op); + return pv_detail::visitNode(node, params, cursor); + } + + template + static inline ThriftTraverseResult + visit(Obj& tObj, const VisitImplParams& params, PathIter cursor) + requires(!is_cow_type_v && !is_field_type_v) + { + try { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(tObj, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } + } + } catch (const std::exception& ex) { + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); + return ThriftTraverseResult::VISITOR_EXCEPTION; + } + using ValueTType = typename Obj::value_type; + + // Get value + auto token = *cursor++; + + if (auto value = tryParseKey(token)) { + if (auto it = tObj.find(*value); it != tObj.end()) { + // Recurse further + return PathVisitorImpl::visit(*it, params, cursor); + } else { + return ThriftTraverseResult::NON_EXISTENT_NODE; + } + } + // if we get here, we must have a malformed value + return ThriftTraverseResult::INVALID_SET_MEMBER; } template static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + Node& node /* node */, + const VisitImplParams& params, + PathIter cursor) // only enable for HybridNode types requires(std::is_same_v) { - // TODO: implement specialization for hybrid nodes - return ThriftTraverseResult::VISITOR_EXCEPTION; + try { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(node, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } + } + } catch (const std::exception& ex) { + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); + return ThriftTraverseResult::VISITOR_EXCEPTION; + } + auto& tObj = node.ref(); + using ValueTType = typename Node::ThriftType::value_type; + + // Get value + auto token = *cursor++; + + if (auto value = tryParseKey(token)) { + if (auto it = tObj.find(*value); it != tObj.end()) { + // Recurse further + return PathVisitorImpl::visit(*it, params, cursor); + } else { + return ThriftTraverseResult::NON_EXISTENT_NODE; + } + } + // if we get here, we must have a malformed value + return ThriftTraverseResult::INVALID_SET_MEMBER; } template - static ThriftTraverseResult visit( - Fields& fields, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Fields& fields, const VisitImplParams& params, PathIter cursor) // only enable for Fields types requires( is_field_type_v && @@ -308,13 +375,12 @@ struct PathVisitorImpl> { using ValueTType = typename Fields::ValueTType; // Get value - auto token = *begin++; + auto token = *cursor++; if (auto value = tryParseKey(token)) { if (auto it = fields.find(*value); it != fields.end()) { // Recurse further - return PathVisitorImpl::visit( - **it, begin, end, mode, op); + return PathVisitorImpl::visit(**it, params, cursor); } else { return ThriftTraverseResult::NON_EXISTENT_NODE; } @@ -333,46 +399,83 @@ struct PathVisitorImpl> { using TC = apache::thrift::type_class::list; template - static inline ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - return pv_detail::visitNode(node, begin, end, mode, op); + return pv_detail::visitNode(node, params, cursor); + } + + template + static inline ThriftTraverseResult + visit(Obj& tObj, const VisitImplParams& params, PathIter cursor) + requires(!is_cow_type_v && !is_field_type_v) + { + try { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(tObj, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } + } + } catch (const std::exception& ex) { + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); + return ThriftTraverseResult::VISITOR_EXCEPTION; + } + // Parse and pop token. Also check for index bound + auto index = folly::tryTo(*cursor++); + if (index.hasError() || index.value() >= tObj.size()) { + return ThriftTraverseResult::INVALID_ARRAY_INDEX; + } + return PathVisitorImpl::visit( + tObj.at(index.value()), params, cursor); } template - static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for HybridNode types requires(std::is_same_v) { - // TODO: implement specialization for hybrid nodes - return ThriftTraverseResult::VISITOR_EXCEPTION; + try { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(node, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } + } + } catch (const std::exception& ex) { + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); + return ThriftTraverseResult::VISITOR_EXCEPTION; + } + // get the value based on the key + auto& tObj = node.ref(); + // Parse and pop token. Also check for index bound + auto index = folly::tryTo(*cursor++); + if (index.hasError() || index.value() >= tObj.size()) { + return ThriftTraverseResult::INVALID_ARRAY_INDEX; + } + return PathVisitorImpl::visit( + tObj.at(index.value()), params, cursor); } template - static ThriftTraverseResult visit( - Fields& fields, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Fields& fields, const VisitImplParams& params, PathIter cursor) // only enable for Fields types requires( is_field_type_v && std::is_same_v) { // Parse and pop token. Also check for index bound - auto index = folly::tryTo(*begin++); + auto index = folly::tryTo(*cursor++); if (index.hasError() || index.value() >= fields.size()) { return ThriftTraverseResult::INVALID_ARRAY_INDEX; } @@ -380,10 +483,10 @@ struct PathVisitorImpl> { // Recurse at a given index if constexpr (std::is_const_v) { const auto& next = *fields.ref(index.value()); - return PathVisitorImpl::visit(next, begin, end, mode, op); + return PathVisitorImpl::visit(next, params, cursor); } else { return PathVisitorImpl::visit( - *fields.ref(index.value()), begin, end, mode, op); + *fields.ref(index.value()), params, cursor); } } }; @@ -397,92 +500,81 @@ struct PathVisitorImpl< using TC = apache::thrift::type_class::map; template - static inline ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - return pv_detail::visitNode(node, begin, end, mode, op); + return pv_detail::visitNode(node, params, cursor); } template - static inline ThriftTraverseResult visit( - Obj& tObj, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Obj& tObj, const VisitImplParams& params, PathIter cursor) requires(!is_cow_type_v && !is_field_type_v) { try { - if (mode == PathVisitMode::FULL || begin == end) { - op.visitTyped(tObj, begin, end); - if (begin == end) { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(tObj, cursor, params.end); + if (cursor == params.end) { return ThriftTraverseResult::OK; } } - // get the value based on the key - using KeyT = typename folly::remove_cvref_t::key_type; - // Get key - auto token = *begin++; - auto key = folly::tryTo(token); - if (!key.hasValue() || tObj.find(key.value()) == tObj.end()) { - return ThriftTraverseResult::INVALID_MAP_KEY; - } - return PathVisitorImpl::visit( - tObj.at(*key), begin, end, mode, op); - } catch (const std::exception& ex) { - XLOG(ERR) << "Exception while traversing path: " << ex.what(); + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); return ThriftTraverseResult::VISITOR_EXCEPTION; } + // get the value based on the key + using KeyT = typename folly::remove_cvref_t::key_type; + // Get key + auto token = *cursor++; + auto key = folly::tryTo(token); + if (!key.hasValue() || tObj.find(key.value()) == tObj.end()) { + return ThriftTraverseResult::INVALID_MAP_KEY; + } + return PathVisitorImpl::visit( + tObj.at(*key), params, cursor); } template - static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for HybridNode types requires(std::is_same_v) { try { - if (mode == PathVisitMode::FULL || begin == end) { - op.visitTyped(node, begin, end); - if (begin == end) { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(node, cursor, params.end); + if (cursor == params.end) { return ThriftTraverseResult::OK; } } - // get the value based on the key - auto& tObj = node.ref(); - using KeyT = typename folly::remove_cvref_t::key_type; - // Get key - auto token = *begin++; - auto key = folly::tryTo(token); - if (!key.hasValue() || tObj.find(key.value()) == tObj.end()) { - return ThriftTraverseResult::INVALID_MAP_KEY; - } - return PathVisitorImpl::visit( - tObj.at(*key), begin, end, mode, op); } catch (const std::exception& ex) { - XLOG(ERR) << "Exception while traversing path: " << ex.what(); + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); return ThriftTraverseResult::VISITOR_EXCEPTION; } + // get the value based on the key + auto& tObj = node.ref(); + using KeyT = typename folly::remove_cvref_t::key_type; + // Get key + auto token = *cursor++; + auto key = folly::tryTo(token); + if (!key.hasValue() || tObj.find(key.value()) == tObj.end()) { + return ThriftTraverseResult::INVALID_MAP_KEY; + } + return PathVisitorImpl::visit( + tObj.at(*key), params, cursor); } template - static ThriftTraverseResult visit( - Fields& fields, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Fields& fields, const VisitImplParams& params, PathIter cursor) // only enable for Fields types requires( is_field_type_v && @@ -491,18 +583,17 @@ struct PathVisitorImpl< using key_type = typename Fields::key_type; // Get key - auto token = *begin++; + auto token = *cursor++; if (auto key = tryParseKey(token)) { if (fields.find(key.value()) != fields.end()) { // Recurse further if constexpr (std::is_const_v) { const auto& next = *fields.ref(key.value()); - return PathVisitorImpl::visit( - next, begin, end, mode, op); + return PathVisitorImpl::visit(next, params, cursor); } else { return PathVisitorImpl::visit( - *fields.ref(key.value()), begin, end, mode, op); + *fields.ref(key.value()), params, cursor); } } else { return ThriftTraverseResult::NON_EXISTENT_NODE; @@ -521,39 +612,30 @@ struct PathVisitorImpl { using TC = apache::thrift::type_class::variant; template - static inline ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - return pv_detail::visitNode(node, begin, end, mode, op); + return pv_detail::visitNode(node, params, cursor); } template - static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Node& /* node */, const VisitImplParams& params, PathIter cursor) // only enable for HybridNode types requires(std::is_same_v) { // TODO: implement specialization for hybrid nodes + XLOG(ERR) << "Unimplemented visitation for hybrid node: path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor); return ThriftTraverseResult::VISITOR_EXCEPTION; } template - static ThriftTraverseResult visit( - Fields& fields, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Fields& fields, const VisitImplParams& params, PathIter cursor) // only enable for Fields types requires( is_field_type_v && @@ -564,7 +646,7 @@ struct PathVisitorImpl { auto result = ThriftTraverseResult::INVALID_VARIANT_MEMBER; // Get key - auto key = *begin++; + auto key = *cursor++; visitMember(key, [&](auto tag) { using descriptor = typename decltype(fatal::tag_type(tag))::member; @@ -582,9 +664,9 @@ struct PathVisitorImpl { // const shared_ptr, not shared_ptr. if constexpr (std::is_const_v) { const auto& next = *child; - result = PathVisitorImpl::visit(next, begin, end, mode, op); + result = PathVisitorImpl::visit(next, params, cursor); } else { - result = PathVisitorImpl::visit(*child, begin, end, mode, op); + result = PathVisitorImpl::visit(*child, params, cursor); } }); @@ -600,61 +682,94 @@ struct PathVisitorImpl { using TC = apache::thrift::type_class::structure; template - static inline ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for Node types requires(std::is_same_v) { - return pv_detail::visitNode(node, begin, end, mode, op); + return pv_detail::visitNode(node, params, cursor); } template - static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) // only enable for HybridNode types requires(std::is_same_v) { - // TODO: implement specialization for hybrid nodes - return ThriftTraverseResult::VISITOR_EXCEPTION; + try { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(node, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } + } + } catch (const std::exception& ex) { + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); + return ThriftTraverseResult::VISITOR_EXCEPTION; + } + auto& tObj = node.ref(); + using T = typename Node::ThriftType; + // Get key + auto key = *cursor++; + // Perform linear search over all members for key + ThriftTraverseResult result = ThriftTraverseResult::INVALID_STRUCT_MEMBER; + using Members = typename apache::thrift::reflect_struct::members; + visitMember(key, [&](auto indexed) { + using member = decltype(fatal::tag_type(indexed)); + using tc = typename member::type_class; + typename member::getter getter; + + // Recurse further + auto& child = getter(tObj); + result = PathVisitorImpl::visit(child, params, cursor); + }); + + return result; } template - static inline ThriftTraverseResult visit( - Obj& tObj, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static inline ThriftTraverseResult + visit(Obj& tObj, const VisitImplParams& params, PathIter cursor) requires(!is_cow_type_v && !is_field_type_v) { try { - if (begin == end) { - op.visitTyped(tObj, begin, end); - } else { - throw std::runtime_error("not implemented yet"); + if (params.mode == PathVisitMode::FULL || cursor == params.end) { + params.op.visitTyped(tObj, cursor, params.end); + if (cursor == params.end) { + return ThriftTraverseResult::OK; + } } - return ThriftTraverseResult::OK; } catch (const std::exception& ex) { - XLOG(ERR) << "Exception while traversing path: " << ex.what(); + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); return ThriftTraverseResult::VISITOR_EXCEPTION; } + // Get key + auto key = *cursor++; + // Perform linear search over all members for key + ThriftTraverseResult result = ThriftTraverseResult::INVALID_STRUCT_MEMBER; + using Members = typename apache::thrift::reflect_struct::members; + visitMember(key, [&](auto indexed) { + using member = decltype(fatal::tag_type(indexed)); + using tc = typename member::type_class; + typename member::getter getter; + + // Recurse further + auto& child = getter(tObj); + result = PathVisitorImpl::visit(child, params, cursor); + }); + + return result; } template - static ThriftTraverseResult visit( - Fields& fields, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) + static ThriftTraverseResult + visit(Fields& fields, const VisitImplParams& params, PathIter cursor) // only enable for Fields types requires( is_field_type_v && @@ -663,7 +778,7 @@ struct PathVisitorImpl { using Members = typename Fields::Members; // Get key - auto key = *begin++; + auto key = *cursor++; ThriftTraverseResult result = ThriftTraverseResult::INVALID_STRUCT_MEMBER; @@ -685,9 +800,9 @@ struct PathVisitorImpl { // const shared_ptr, not shared_ptr. if constexpr (std::is_const_v) { const auto& next = *child; - result = PathVisitorImpl::visit(next, begin, end, mode, op); + result = PathVisitorImpl::visit(next, params, cursor); } else { - result = PathVisitorImpl::visit(*child, begin, end, mode, op); + result = PathVisitorImpl::visit(*child, params, cursor); } }); @@ -711,25 +826,25 @@ struct PathVisitorImpl { "Refer to thrift/lib/cpp2/reflection/reflection.h"); template - static ThriftTraverseResult visit( - Node& node, - pv_detail::PathIter begin, - pv_detail::PathIter end, - const PathVisitMode& mode, - Op& op) { - if (mode == PathVisitMode::FULL || begin == end) { + static ThriftTraverseResult + visit(Node& node, const VisitImplParams& params, PathIter cursor) { + if (params.mode == PathVisitMode::FULL || cursor == params.end) { try { // unfortunately its tough to get full const correctness for primitive - // types since we don't enforce whether or not lambdas or operators take - // a const param. Here we cast away the const and rely on primitive - // node's functions throwing an exception if the node is immutable. - op.visitTyped( - *const_cast*>(&node), begin, end); - if (begin == end) { + // types since we don't enforce whether or not lambdas or operators + // take a const param. Here we cast away the const and rely on + // primitive node's functions throwing an exception if the node is + // immutable. + params.op.visitTyped( + *const_cast*>(&node), cursor, params.end); + if (cursor == params.end) { return ThriftTraverseResult::OK; } } catch (const std::exception& ex) { - XLOG(ERR) << "Exception while traversing path: " << ex.what(); + XLOG(ERR) << "Exception while traversing path: " + << folly::join("/", params.begin, params.end) + << " at: " << (cursor == params.end ? "(end)" : *cursor) + << ", exception: " << ex.what(); return ThriftTraverseResult::VISITOR_EXCEPTION; } } @@ -758,7 +873,9 @@ struct PathVisitor { // only enable for Node types requires(std::is_same_v) { - return pv_detail::PathVisitorImpl::visit(node, begin, end, mode, op); + pv_detail::VisitImplParams> + params(begin, end, mode, op); + return pv_detail::PathVisitorImpl::visit(node, params, begin); } template @@ -771,7 +888,9 @@ struct PathVisitor { // only enable for Node types requires(std::is_same_v) { - return pv_detail::PathVisitorImpl::visit(node, begin, end, mode, op); + pv_detail::VisitImplParams params( + begin, end, mode, op); + return pv_detail::PathVisitorImpl::visit(node, params, begin); } template @@ -786,7 +905,9 @@ struct PathVisitor { is_field_type_v && std::is_same_v) { - return pv_detail::PathVisitorImpl::visit(fields, begin, end, mode, op); + pv_detail::VisitImplParams> + params(begin, end, mode, op); + return pv_detail::PathVisitorImpl::visit(fields, params, begin); } template @@ -801,7 +922,9 @@ struct PathVisitor { is_field_type_v && std::is_same_v) { - return pv_detail::PathVisitorImpl::visit(fields, begin, end, mode, op); + pv_detail::VisitImplParams params( + begin, end, mode, op); + return pv_detail::PathVisitorImpl::visit(fields, params, begin); } }; diff --git a/fboss/thrift_cow/visitors/RecurseVisitor.h b/fboss/thrift_cow/visitors/RecurseVisitor.h index c88bb565b3488..845a1ddf45255 100644 --- a/fboss/thrift_cow/visitors/RecurseVisitor.h +++ b/fboss/thrift_cow/visitors/RecurseVisitor.h @@ -46,15 +46,15 @@ struct RecurseVisitOptions { RecurseVisitMode mode, RecurseVisitOrder order, bool outputIdPaths = false, - bool recurseIntoHybridNodes = false) + bool hybridNodeDeepTraversal = false) : mode(mode), order(order), outputIdPaths(outputIdPaths), - recurseIntoHybridNodes(recurseIntoHybridNodes) {} + hybridNodeDeepTraversal(hybridNodeDeepTraversal) {} RecurseVisitMode mode; RecurseVisitOrder order; bool outputIdPaths; - bool recurseIntoHybridNodes; + bool hybridNodeDeepTraversal; }; template @@ -160,12 +160,11 @@ struct RecurseVisitor> { typename folly::remove_cvref_t::element_type::CowType, HybridNodeType>) { - if (!options.recurseIntoHybridNodes) { - rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); - } else { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "RecurseVisitor support for recurseIntoHybridNode in Set not implemented")); + "RecurseVisitor support for hybridNodeDeepTraversal in Set not implemented")); } + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); } template @@ -219,11 +218,27 @@ struct RecurseVisitor> { typename folly::remove_cvref_t::element_type::CowType, HybridNodeType>) { - if (!options.recurseIntoHybridNodes) { - rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); - } else { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "RecurseVisitor support for recurseIntoHybridNode in List not implemented")); + "RecurseVisitor support for hybridNodeDeepTraversal in List not implemented")); + } + auto& tObj = node->ref(); + bool visitIntermediate = options.mode == RecurseVisitMode::FULL || + options.mode == RecurseVisitMode::UNPUBLISHED; + if (visitIntermediate && + options.order == RecurseVisitOrder::PARENTS_FIRST) { + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); + } + // visit list elements + for (int i = 0; i < tObj.size(); ++i) { + traverser.push(folly::to(i), TCType); + rv_detail::invokeVisitorFnHelper( + traverser, &tObj.at(i), std::forward(f)); + traverser.pop(TCType); + } + if (visitIntermediate && + options.order == RecurseVisitOrder::CHILDREN_FIRST) { + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); } } @@ -278,11 +293,36 @@ struct RecurseVisitor< typename folly::remove_cvref_t::element_type::CowType, HybridNodeType>) { - if (!options.recurseIntoHybridNodes) { + if (options.hybridNodeDeepTraversal) { + throw std::runtime_error(folly::to( + "RecurseVisitor support for hybridNodeDeepTraversal in Map not implemented")); + } + auto& tObj = node->ref(); + bool visitIntermediate = options.mode == RecurseVisitMode::FULL || + options.mode == RecurseVisitMode::UNPUBLISHED; + if (visitIntermediate && + options.order == RecurseVisitOrder::PARENTS_FIRST) { rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); + } + // visit map entries + if constexpr (std::is_const_v) { + for (const auto& [key, val] : tObj) { + traverser.push(folly::to(key), TCType); + rv_detail::invokeVisitorFnHelper( + traverser, &val, std::forward(f)); + traverser.pop(TCType); + } } else { - throw std::runtime_error(folly::to( - "RecurseVisitor support for recurseIntoHybridNode in Map not implemented")); + for (auto& [key, val] : tObj) { + traverser.push(folly::to(key), TCType); + rv_detail::invokeVisitorFnHelper( + traverser, &val, std::forward(f)); + traverser.pop(TCType); + } + } + if (visitIntermediate && + options.order == RecurseVisitOrder::CHILDREN_FIRST) { + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); } } @@ -345,12 +385,11 @@ struct RecurseVisitor { typename folly::remove_cvref_t::element_type::CowType, HybridNodeType>) { - if (!options.recurseIntoHybridNodes) { - rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); - } else { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "RecurseVisitor support for recurseIntoHybridNode in Variant not implemented")); + "RecurseVisitor support for hybridNodeDeepTraversal in Variant not implemented")); } + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); } template @@ -437,12 +476,11 @@ struct RecurseVisitor { typename folly::remove_cvref_t::element_type::CowType, HybridNodeType>) { - if (!options.recurseIntoHybridNodes) { - rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); - } else { + if (options.hybridNodeDeepTraversal) { throw std::runtime_error(folly::to( - "RecurseVisitor support for recurseIntoHybridNode in Struct not implemented")); + "RecurseVisitor support for hybridNodeDeepTraversal in Struct not implemented")); } + rv_detail::invokeVisitorFnHelper(traverser, node, std::forward(f)); } template diff --git a/fboss/thrift_cow/visitors/tests/BUCK b/fboss/thrift_cow/visitors/tests/BUCK index 3426e108e0fe0..959690a0446f2 100644 --- a/fboss/thrift_cow/visitors/tests/BUCK +++ b/fboss/thrift_cow/visitors/tests/BUCK @@ -31,7 +31,6 @@ cpp_unittest( ":visitor_test_utils", "//fboss/agent:switch_config-cpp2-types", "//fboss/thrift_cow/nodes:nodes", - "//fboss/thrift_cow/nodes/tests:test-cpp2-reflection", "//fboss/thrift_cow/visitors:visitors", "//folly:string", "//folly/json:dynamic", @@ -71,7 +70,6 @@ cpp_unittest( "fbsource//third-party/googletest:gmock", ":visitor_test_utils", "//fboss/thrift_cow/nodes:nodes", - "//fboss/thrift_cow/nodes/tests:test-cpp2-reflection", "//fboss/thrift_cow/visitors:visitors", "//folly:string", "//folly/json:dynamic", diff --git a/fboss/thrift_cow/visitors/tests/DeltaVisitorTests.cpp b/fboss/thrift_cow/visitors/tests/DeltaVisitorTests.cpp index 5d7e69751ce4f..eed1dbd2baa9e 100644 --- a/fboss/thrift_cow/visitors/tests/DeltaVisitorTests.cpp +++ b/fboss/thrift_cow/visitors/tests/DeltaVisitorTests.cpp @@ -10,7 +10,6 @@ #include #include #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" using folly::dynamic; using namespace testing; @@ -40,6 +39,9 @@ class DeltaVisitorTests : public ::testing::Test { ThriftStructResolver, TestParams::hybridStorage>>(val); } + bool isHybridStorage() { + return TestParams::hybridStorage; + } }; TYPED_TEST_SUITE(DeltaVisitorTests, StorageTestTypes); @@ -115,6 +117,20 @@ TYPED_TEST(DeltaVisitorTests, ChangeOneFieldInContainer) { auto structB = structA; structB.mapOfEnumToStruct()->at(TestEnum::THIRD).min() = 11; + PathTagSet expected; + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + if (this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)); + } else { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::MINIMAL)); + } + auto nodeA = this->initNode(structA); auto nodeB = this->initNode(structB); @@ -129,23 +145,22 @@ TYPED_TEST(DeltaVisitorTests, ChangeOneFieldInContainer) { auto result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::PARENTS), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); differingPaths.clear(); + expected.clear(); + if (this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)); + } else { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::MINIMAL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); } TYPED_TEST(DeltaVisitorTests, SetOptional) { @@ -209,6 +224,13 @@ TYPED_TEST(DeltaVisitorTests, AddToMap) { auto nodeA = this->initNode(structA); auto nodeB = this->initNode(structB); + PathTagSet expected; + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); + PathTagSet differingPaths; auto processChange = [&](const std::vector& path, auto&& /*oldValue*/, @@ -220,40 +242,40 @@ TYPED_TEST(DeltaVisitorTests, AddToMap) { auto result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::PARENTS), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test MINIMAL mode differingPaths.clear(); + expected.clear(); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::MINIMAL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test FULL mode differingPaths.clear(); + expected.clear(); + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); + if (!this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::NOT_MINIMAL)); + expected.emplace(std::make_pair( + "/mapOfEnumToStruct/1/invert", DeltaElemTag::NOT_MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::FULL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::NOT_MINIMAL), - std::make_pair( - "/mapOfEnumToStruct/1/invert", DeltaElemTag::NOT_MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); } TYPED_TEST(DeltaVisitorTests, UpdateMap) { @@ -275,6 +297,22 @@ TYPED_TEST(DeltaVisitorTests, UpdateMap) { auto nodeA = this->initNode(structA); auto nodeB = this->initNode(structB); + PathTagSet expected; + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + if (this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); + } else { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL)); + } + PathTagSet differingPaths; auto processChange = [&](const std::vector& path, auto&& /*oldValue*/, @@ -286,30 +324,35 @@ TYPED_TEST(DeltaVisitorTests, UpdateMap) { auto result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::PARENTS), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL), - })); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test MINIMAL mode differingPaths.clear(); + expected.clear(); + if (this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); + } else { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::MINIMAL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test encoding ids differingPaths.clear(); + expected.clear(); + if (this->isHybridStorage()) { + expected.emplace(std::make_pair("/15/1", DeltaElemTag::MINIMAL)); + } else { + expected.emplace(std::make_pair("/15/1/1", DeltaElemTag::MINIMAL)); + expected.emplace(std::make_pair("/15/1/2", DeltaElemTag::MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, @@ -319,27 +362,30 @@ TYPED_TEST(DeltaVisitorTests, UpdateMap) { true), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/15/1/1", DeltaElemTag::MINIMAL), - std::make_pair("/15/1/2", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test FULL mode differingPaths.clear(); + expected.clear(); + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + if (this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::MINIMAL)); + } else { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::FULL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/min", DeltaElemTag::MINIMAL), - std::make_pair("/mapOfEnumToStruct/1/max", DeltaElemTag::MINIMAL), - })); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); } TYPED_TEST(DeltaVisitorTests, DeleteFromMap) { @@ -350,6 +396,13 @@ TYPED_TEST(DeltaVisitorTests, DeleteFromMap) { auto nodeA = this->initNode(structA); auto nodeB = this->initNode(structB); + PathTagSet expected; + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)); + PathTagSet differingPaths; auto processChange = [&](const std::vector& path, auto&& /*oldValue*/, @@ -361,40 +414,40 @@ TYPED_TEST(DeltaVisitorTests, DeleteFromMap) { auto result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::PARENTS), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test MINIMAL mode differingPaths.clear(); + expected.clear(); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)); result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::MINIMAL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); // Test FULL mode differingPaths.clear(); + expected.clear(); + expected.emplace(std::make_pair("/", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL)); + if (!this->isHybridStorage()) { + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::NOT_MINIMAL)); + expected.emplace( + std::make_pair("/mapOfEnumToStruct/3/max", DeltaElemTag::NOT_MINIMAL)); + expected.emplace(std::make_pair( + "/mapOfEnumToStruct/3/invert", DeltaElemTag::NOT_MINIMAL)); + } result = RootDeltaVisitor::visit( nodeA, nodeB, DeltaVisitOptions(DeltaVisitMode::FULL), processChange); EXPECT_EQ(result, true); - EXPECT_THAT( - differingPaths, - ::testing::ContainerEq(PathTagSet{ - std::make_pair("/", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/3", DeltaElemTag::MINIMAL), - std::make_pair("/mapOfEnumToStruct/3/min", DeltaElemTag::NOT_MINIMAL), - std::make_pair("/mapOfEnumToStruct/3/max", DeltaElemTag::NOT_MINIMAL), - std::make_pair( - "/mapOfEnumToStruct/3/invert", DeltaElemTag::NOT_MINIMAL)})); + EXPECT_THAT(differingPaths, ::testing::ContainerEq(expected)); } TYPED_TEST(DeltaVisitorTests, AddToList) { diff --git a/fboss/thrift_cow/visitors/tests/ExtendedPathVisitorTests.cpp b/fboss/thrift_cow/visitors/tests/ExtendedPathVisitorTests.cpp index 34736d7f679f8..11b26a8a121c9 100644 --- a/fboss/thrift_cow/visitors/tests/ExtendedPathVisitorTests.cpp +++ b/fboss/thrift_cow/visitors/tests/ExtendedPathVisitorTests.cpp @@ -33,7 +33,11 @@ TestStruct createTestStruct() { dynamic::object("3", dynamic::object("min", 100)("max", 200)))( "mapOfStringToI32", dynamic::object)( "listOfPrimitives", dynamic::array())("setOfI32", dynamic::array())( - "mapOfI32ToListOfStructs", dynamic::object()); + "mapOfI32ToListOfStructs", dynamic::object())( + "hybridMapOfMap", dynamic::object())( + "hybridStruct", + dynamic::object("strMap", dynamic::object())( + "structMap", dynamic::object())); for (int i = 0; i <= 20; ++i) { testDyn["mapOfStringToI32"][fmt::format("test{}", i)] = i; @@ -43,6 +47,12 @@ TestStruct createTestStruct() { dynamic::array( dynamic::object("min", 1)("max", 2), dynamic::object("min", 3)("max", 4)); + dynamic innerMap = dynamic::object(); + innerMap[i * 10] = i * 100; + testDyn["hybridMapOfMap"][i] = std::move(innerMap); + testDyn["hybridStruct"]["strMap"][fmt::format("test{}", i)] = i; + testDyn["hybridStruct"]["structMap"][fmt::format("test{}", i)] = + dynamic::object("min", i)("max", i + 10); } return facebook::thrift::from_dynamic( @@ -130,13 +140,44 @@ TEST(ExtendedPathVisitorTests, AccessOptional) { EXPECT_TRUE(got.empty()); } -TEST(ExtendedPathVisitorTests, AccessRegexMap) { +template +struct TestParams { + static constexpr auto hybridStorage = EnableHybridStorage; +}; + +using StorageTestTypes = ::testing::Types, TestParams>; + +template +class ExtendedPathVisitorTests : public ::testing::Test { + public: + auto initNode(auto val) { + using RootType = std::remove_cvref_t; + return std::make_shared, + TestParams::hybridStorage>>(val); + } + bool isHybridStorage() { + return TestParams::hybridStorage; + } +}; + +TYPED_TEST_SUITE(ExtendedPathVisitorTests, StorageTestTypes); + +TYPED_TEST(ExtendedPathVisitorTests, AccessRegexMap) { auto structA = createTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); std::set, folly::dynamic>> visited; auto processPath = [&visited](auto&& path, auto&& node) { - visited.emplace(std::make_pair(path, node.toFollyDynamic())); + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } }; auto path = ext_path_builder::raw("mapOfStringToI32").regex("test1.*").get(); @@ -195,13 +236,20 @@ TEST(ExtendedPathVisitorTests, AccessRegexMap) { EXPECT_THAT(visited, ::testing::ContainerEq(expected2)); } -TEST(ExtendedPathVisitorTests, AccessAnyMap) { +TYPED_TEST(ExtendedPathVisitorTests, AccessAnyMap) { auto structA = createTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); std::set, folly::dynamic>> visited; auto processPath = [&visited](auto&& path, auto&& node) { - visited.emplace(std::make_pair(path, node.toFollyDynamic())); + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } }; auto path = ext_path_builder::raw("mapOfStringToI32").any().get(); @@ -235,13 +283,67 @@ TEST(ExtendedPathVisitorTests, AccessAnyMap) { EXPECT_THAT(visited, ::testing::ContainerEq(expected)); } -TEST(ExtendedPathVisitorTests, AccessRegexList) { +TYPED_TEST(ExtendedPathVisitorTests, AccessDeepMap) { auto structA = createTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); std::set, folly::dynamic>> visited; auto processPath = [&visited](auto&& path, auto&& node) { - visited.emplace(std::make_pair(path, node.toFollyDynamic())); + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } + }; + + auto path = ext_path_builder::raw("hybridMapOfMap").any().any().get(); + std::set, folly::dynamic>> expected = { + {{"hybridMapOfMap", "0", "0"}, 0}, + {{"hybridMapOfMap", "1", "10"}, 100}, + {{"hybridMapOfMap", "2", "20"}, 200}, + {{"hybridMapOfMap", "3", "30"}, 300}, + {{"hybridMapOfMap", "4", "40"}, 400}, + {{"hybridMapOfMap", "5", "50"}, 500}, + {{"hybridMapOfMap", "6", "60"}, 600}, + {{"hybridMapOfMap", "7", "70"}, 700}, + {{"hybridMapOfMap", "8", "80"}, 800}, + {{"hybridMapOfMap", "9", "90"}, 900}, + {{"hybridMapOfMap", "10", "100"}, 1000}, + {{"hybridMapOfMap", "11", "110"}, 1100}, + {{"hybridMapOfMap", "12", "120"}, 1200}, + {{"hybridMapOfMap", "13", "130"}, 1300}, + {{"hybridMapOfMap", "14", "140"}, 1400}, + {{"hybridMapOfMap", "15", "150"}, 1500}, + {{"hybridMapOfMap", "16", "160"}, 1600}, + {{"hybridMapOfMap", "17", "170"}, 1700}, + {{"hybridMapOfMap", "18", "180"}, 1800}, + {{"hybridMapOfMap", "19", "190"}, 1900}, + {{"hybridMapOfMap", "20", "200"}, 2000}, + + }; + + ExtPathVisitorOptions options; + RootExtendedPathVisitor::visit( + *nodeA, path.path()->begin(), path.path()->end(), options, processPath); + EXPECT_THAT(visited, ::testing::ContainerEq(expected)); +} + +TYPED_TEST(ExtendedPathVisitorTests, AccessRegexList) { + auto structA = createTestStruct(); + auto nodeA = this->initNode(structA); + std::set, folly::dynamic>> visited; + auto processPath = [&visited](auto&& path, auto&& node) { + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } }; auto path = ext_path_builder::raw("listOfPrimitives").regex("1.*").get(); @@ -265,13 +367,20 @@ TEST(ExtendedPathVisitorTests, AccessRegexList) { EXPECT_THAT(visited, ::testing::ContainerEq(expected)); } -TEST(ExtendedPathVisitorTests, AccessAnyList) { +TYPED_TEST(ExtendedPathVisitorTests, AccessAnyList) { auto structA = createTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); std::set, folly::dynamic>> visited; auto processPath = [&visited](auto&& path, auto&& node) { - visited.emplace(std::make_pair(path, node.toFollyDynamic())); + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } }; auto path = ext_path_builder::raw("listOfPrimitives").any().get(); @@ -354,3 +463,89 @@ TEST(ExtendedPathVisitorTests, AccessAnySet) { *nodeA, path.path()->begin(), path.path()->end(), options, processPath); EXPECT_THAT(visited, ::testing::ContainerEq(expected)); } + +TYPED_TEST(ExtendedPathVisitorTests, HybridStructAccess) { + auto structA = createTestStruct(); + auto nodeA = this->initNode(structA); + + std::set, folly::dynamic>> visited; + auto processPath = [&visited](auto&& path, auto&& node) { + if constexpr (is_cow_type_v) { + visited.emplace(std::make_pair(path, node.toFollyDynamic())); + } else { + folly::dynamic out; + facebook::thrift::to_dynamic( + out, node, facebook::thrift::dynamic_format::JSON_1); + visited.emplace(std::make_pair(path, out)); + } + }; + // hybridStruct/strMap/.* + { + auto path = ext_path_builder::raw("hybridStruct").raw("strMap").any().get(); + std::set, folly::dynamic>> expected = { + {{"hybridStruct", "strMap", "test0"}, 0}, + {{"hybridStruct", "strMap", "test1"}, 1}, + {{"hybridStruct", "strMap", "test2"}, 2}, + {{"hybridStruct", "strMap", "test3"}, 3}, + {{"hybridStruct", "strMap", "test4"}, 4}, + {{"hybridStruct", "strMap", "test5"}, 5}, + {{"hybridStruct", "strMap", "test6"}, 6}, + {{"hybridStruct", "strMap", "test7"}, 7}, + {{"hybridStruct", "strMap", "test8"}, 8}, + {{"hybridStruct", "strMap", "test9"}, 9}, + {{"hybridStruct", "strMap", "test10"}, 10}, + {{"hybridStruct", "strMap", "test11"}, 11}, + {{"hybridStruct", "strMap", "test12"}, 12}, + {{"hybridStruct", "strMap", "test13"}, 13}, + {{"hybridStruct", "strMap", "test14"}, 14}, + {{"hybridStruct", "strMap", "test15"}, 15}, + {{"hybridStruct", "strMap", "test16"}, 16}, + {{"hybridStruct", "strMap", "test17"}, 17}, + {{"hybridStruct", "strMap", "test18"}, 18}, + {{"hybridStruct", "strMap", "test19"}, 19}, + {{"hybridStruct", "strMap", "test20"}, 20}, + }; + + ExtPathVisitorOptions options; + RootExtendedPathVisitor::visit( + *nodeA, path.path()->begin(), path.path()->end(), options, processPath); + EXPECT_THAT(visited, ::testing::ContainerEq(expected)); + } + // hybridStruct/strMap/.* + { + auto path = ext_path_builder::raw("hybridStruct") + .raw("structMap") + .any() + .raw("min") + .get(); + std::set, folly::dynamic>> expected = { + {{"hybridStruct", "structMap", "test0", "min"}, 0}, + {{"hybridStruct", "structMap", "test1", "min"}, 1}, + {{"hybridStruct", "structMap", "test2", "min"}, 2}, + {{"hybridStruct", "structMap", "test3", "min"}, 3}, + {{"hybridStruct", "structMap", "test4", "min"}, 4}, + {{"hybridStruct", "structMap", "test5", "min"}, 5}, + {{"hybridStruct", "structMap", "test6", "min"}, 6}, + {{"hybridStruct", "structMap", "test7", "min"}, 7}, + {{"hybridStruct", "structMap", "test8", "min"}, 8}, + {{"hybridStruct", "structMap", "test9", "min"}, 9}, + {{"hybridStruct", "structMap", "test10", "min"}, 10}, + {{"hybridStruct", "structMap", "test11", "min"}, 11}, + {{"hybridStruct", "structMap", "test12", "min"}, 12}, + {{"hybridStruct", "structMap", "test13", "min"}, 13}, + {{"hybridStruct", "structMap", "test14", "min"}, 14}, + {{"hybridStruct", "structMap", "test15", "min"}, 15}, + {{"hybridStruct", "structMap", "test16", "min"}, 16}, + {{"hybridStruct", "structMap", "test17", "min"}, 17}, + {{"hybridStruct", "structMap", "test18", "min"}, 18}, + {{"hybridStruct", "structMap", "test19", "min"}, 19}, + {{"hybridStruct", "structMap", "test20", "min"}, 20}, + }; + + ExtPathVisitorOptions options; + visited.clear(); + RootExtendedPathVisitor::visit( + *nodeA, path.path()->begin(), path.path()->end(), options, processPath); + EXPECT_THAT(visited, ::testing::ContainerEq(expected)); + } +} diff --git a/fboss/thrift_cow/visitors/tests/PatchApplierTests.cpp b/fboss/thrift_cow/visitors/tests/PatchApplierTests.cpp index ba2409422be47..7eec4ce89cbec 100644 --- a/fboss/thrift_cow/visitors/tests/PatchApplierTests.cpp +++ b/fboss/thrift_cow/visitors/tests/PatchApplierTests.cpp @@ -7,7 +7,6 @@ #include #include #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" #include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_types.h" using k = facebook::fboss::test_tags::strings; diff --git a/fboss/thrift_cow/visitors/tests/PathVisitorTests.cpp b/fboss/thrift_cow/visitors/tests/PathVisitorTests.cpp index 2ebf9c1c1c971..85e1ab7c3bcfd 100644 --- a/fboss/thrift_cow/visitors/tests/PathVisitorTests.cpp +++ b/fboss/thrift_cow/visitors/tests/PathVisitorTests.cpp @@ -11,7 +11,6 @@ #include #include "fboss/agent/gen-cpp2/switch_config_types.h" #include "fboss/thrift_cow/nodes/Types.h" -#include "fboss/thrift_cow/nodes/tests/gen-cpp2/test_fatal_types.h" namespace facebook::fboss::thrift_cow::test { @@ -34,18 +33,42 @@ struct GetVisitedPathsOperator : public BasePathVisitorOperator { void visit(Node& node, pv_detail::PathIter begin, pv_detail::PathIter end) requires(!is_cow_type_v) { - SerializableReader dummy(node); - visit(dummy, begin, end); + SerializableWrapper wrapper(node); + visit(wrapper, begin, end); } private: std::set visited; }; -TEST(PathVisitorTests, AccessField) { +template +struct TestParams { + static constexpr auto hybridStorage = EnableHybridStorage; +}; + +using StorageTestTypes = ::testing::Types, TestParams>; + +template +class PathVisitorTests : public ::testing::Test { + public: + auto initNode(auto val) { + using RootType = std::remove_cvref_t; + return std::make_shared, + TestParams::hybridStorage>>(val); + } + bool isHybridStorage() { + return TestParams::hybridStorage; + } +}; + +TYPED_TEST_SUITE(PathVisitorTests, StorageTestTypes); + +TYPED_TEST(PathVisitorTests, AccessField) { auto structA = createSimpleTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); folly::dynamic dyn; auto processPath = pvlambda([&dyn](auto& node, auto begin, auto end) { EXPECT_EQ(begin, end); @@ -54,7 +77,8 @@ TEST(PathVisitorTests, AccessField) { std::remove_cvref_t>) { dyn = node.toFollyDynamic(); } else { - FAIL() << "unexpected non-cow visit"; + facebook::thrift::to_dynamic( + dyn, node, facebook::thrift::dynamic_format::JSON_1); } }); std::vector path{"inlineInt"}; @@ -83,116 +107,42 @@ TEST(PathVisitorTests, AccessField) { *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); EXPECT_EQ(result, ThriftTraverseResult::OK); EXPECT_TRUE(dyn.asBool()); -} - -TEST(PathVisitorTests, HybridMapPrimitiveAccess) { - auto structA = createHybridMapTestStruct(); - - auto nodeA = std::make_shared, - true>>(structA); - folly::dynamic dyn; - auto processPath = pvlambda([&dyn](auto& node, auto begin, auto end) { - EXPECT_EQ(begin, end); - if constexpr (std::is_base_of_v< - Serializable, - std::remove_cvref_t>) { - dyn = node.toFollyDynamic(); - } else { - facebook::thrift::to_dynamic( - dyn, node, facebook::thrift::dynamic_format::JSON_1); - } - }); - // hybridMap - { - std::vector path = {"hybridMap"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_TRUE(dyn[1].asBool()); - } - // hybridMap/1 - { - std::vector path = {"hybridMap", "1"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_TRUE(dyn.asBool()); - } - // Invalid path - // hybridMap/2 - { - std::vector path = {"hybridMap", "2"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::INVALID_MAP_KEY); - } -} -TEST(PathVisitorTests, HybridMapStructAccess) { - auto structA = createHybridMapTestStruct(); + // mapOfI32ToStruct/20/min + path = {"mapOfI32ToStruct", "20", "min"}; + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(400, dyn.asInt()); - auto nodeA = std::make_shared, - true>>(structA); - folly::dynamic dyn; - auto processPath = pvlambda([&dyn](auto& node, auto begin, auto end) { - EXPECT_EQ(begin, end); - if constexpr (std::is_base_of_v< - Serializable, - std::remove_cvref_t>) { - dyn = node.toFollyDynamic(); - } else { - facebook::thrift::to_dynamic( - dyn, node, facebook::thrift::dynamic_format::JSON_1); - } - }); - // hybridMapOfI32ToStruct - { - std::vector path = {"hybridMapOfI32ToStruct"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_NE(dyn.find(20), dyn.items().end()); - cfg::L4PortRange got; + // mapOfI32ToListOfStructs + path = {"mapOfI32ToListOfStructs", "20", "0", "min"}; + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(100, dyn.asInt()); - got = facebook::thrift::from_dynamic( - dyn[20], facebook::thrift::dynamic_format::JSON_1); - EXPECT_EQ(*got.min(), 400); - EXPECT_EQ(*got.max(), 600); - } - // hybridMapOfI32ToStruct/20 - { - std::vector path = {"hybridMapOfI32ToStruct", "20"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - cfg::L4PortRange got; + // mapOfI32ToSetOfString + path = {"mapOfI32ToSetOfString", "20", "test1"}; + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ("test1", dyn.asString()); - got = facebook::thrift::from_dynamic( - dyn, facebook::thrift::dynamic_format::JSON_1); - EXPECT_EQ(*got.min(), 400); - EXPECT_EQ(*got.max(), 600); - } - // Invalid path - // hybridMapOfI32ToStruct/30 - { - std::vector path = {"hybridMapOfI32ToStruct", "30"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::INVALID_MAP_KEY); - } + // mapOfI32ToSetOfString invalid + path = {"mapOfI32ToSetOfString", "20", "invalid_entry"}; + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); + EXPECT_EQ(result, ThriftTraverseResult::NON_EXISTENT_NODE); } -TEST(PathVisitorTests, HybridMapOfMapAccess) { - auto structA = createHybridMapTestStruct(); - +TYPED_TEST(PathVisitorTests, AccessFieldInContainer) { + auto structA = createSimpleTestStruct(); auto nodeA = std::make_shared, true>>(structA); + folly::dynamic dyn; auto processPath = pvlambda([&dyn](auto& node, auto begin, auto end) { EXPECT_EQ(begin, end); @@ -205,73 +155,6 @@ TEST(PathVisitorTests, HybridMapOfMapAccess) { dyn, node, facebook::thrift::dynamic_format::JSON_1); } }); - // hybridMapOfMap - { - std::vector path = {"hybridMapOfMap"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_NE(dyn.find(10), dyn.items().end()); - EXPECT_NE(dyn[10].find(20), dyn[10].items().end()); - EXPECT_EQ(dyn[10][20].asInt(), 30); - } - - // hybridMapOfMap/10 - { - std::vector path = {"hybridMapOfMap", "10"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_NE(dyn.find(20), dyn.items().end()); - EXPECT_EQ(dyn[20].asInt(), 30); - } - - // hybridMapOfMap/10/20 - { - std::vector path = {"hybridMapOfMap", "10", "20"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_EQ(dyn.asInt(), 30); - } - - // Invalid path - // hybridMapOfMap/10/30 - { - std::vector path = {"hybridMapOfMap", "10", "30"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); - EXPECT_EQ(result, ThriftTraverseResult::INVALID_MAP_KEY); - } - // full visit mode - { - auto op = GetVisitedPathsOperator(); - std::vector path{"hybridMapOfMap", "10", "20"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::FULL, op); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_THAT( - op.getVisited(), - ::testing::ContainerEq(std::set{ - "/", "/10/20", "/20", "/hybridMapOfMap/10/20"})); - } -} - -TEST(PathVisitorTests, AccessFieldInContainer) { - auto structA = createSimpleTestStruct(); - auto nodeA = std::make_shared>(structA); - - folly::dynamic dyn; - auto processPath = pvlambda([&dyn](auto& node, auto begin, auto end) { - EXPECT_EQ(begin, end); - if constexpr (std::is_base_of_v< - Serializable, - std::remove_cvref_t>) { - dyn = node.toFollyDynamic(); - } else { - FAIL() << "unexpected non-cow visit"; - } - }); std::vector path{"mapOfEnumToStruct", "3"}; auto result = RootPathVisitor::visit( *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, processPath); @@ -291,19 +174,36 @@ TEST(PathVisitorTests, AccessFieldInContainer) { EXPECT_EQ(*got.max(), 200); } -TEST(PathVisitorTests, TraversalModeFull) { +TYPED_TEST(PathVisitorTests, TraversalModeFull) { auto structA = createSimpleTestStruct(); - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); - auto op = GetVisitedPathsOperator(); - std::vector path{"mapOfEnumToStruct", "3"}; - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::FULL, op); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_THAT( - op.getVisited(), - ::testing::ContainerEq( - std::set{"/", "/3", "/mapOfEnumToStruct/3"})); + { + auto op = GetVisitedPathsOperator(); + std::vector path{"mapOfEnumToStruct", "3"}; + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::FULL, op); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_THAT( + op.getVisited(), + ::testing::ContainerEq( + std::set{"/", "/3", "/mapOfEnumToStruct/3"})); + } + { + auto op = GetVisitedPathsOperator(); + std::vector path{"mapOfI32ToListOfStructs", "20", "0", "min"}; + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::FULL, op); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_THAT( + op.getVisited(), + ::testing::ContainerEq(std::set{ + "/", + "/min", + "/0/min", + "/20/0/min", + "/mapOfI32ToListOfStructs/20/0/min"})); + } } TEST(PathVisitorTests, AccessOptional) { @@ -336,31 +236,133 @@ TEST(PathVisitorTests, AccessOptional) { EXPECT_TRUE(got.empty()); } -TEST(PathVisitorTests, VisitWithOperators) { +TYPED_TEST(PathVisitorTests, VisitWithOperators) { auto structA = createSimpleTestStruct(); structA.setOfI32() = {1}; - auto nodeA = std::make_shared>(structA); + auto nodeA = this->initNode(structA); - std::vector path{"inlineInt"}; + { + folly::fbstring newVal = "123"; + SetEncodedPathVisitorOperator setOp( + fsdb::OperProtocol::SIMPLE_JSON, newVal); + std::vector path{"inlineInt"}; - folly::fbstring newVal = "123"; - SetEncodedPathVisitorOperator setOp(fsdb::OperProtocol::SIMPLE_JSON, newVal); - auto result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); - EXPECT_EQ(result, ThriftTraverseResult::OK); + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); - GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); - result = RootPathVisitor::visit( - *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); - EXPECT_EQ(result, ThriftTraverseResult::OK); - EXPECT_EQ(getOp.val, "123"); + GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(getOp.val, "123"); + } - std::vector path2{"setOfI32", "1"}; - result = RootPathVisitor::visit( - *nodeA, path2.begin(), path2.end(), PathVisitMode::LEAF, setOp); - // should throw trying to set an immutable node - EXPECT_EQ(result, ThriftTraverseResult::VISITOR_EXCEPTION); + { + folly::fbstring newVal = "123"; + SetEncodedPathVisitorOperator setOp( + fsdb::OperProtocol::SIMPLE_JSON, newVal); + std::vector path{"setOfI32", "1"}; + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); + // should throw trying to set an immutable node + EXPECT_EQ(result, ThriftTraverseResult::VISITOR_EXCEPTION); + } + + { + folly::fbstring newVal = "123"; + SetEncodedPathVisitorOperator setOp( + fsdb::OperProtocol::SIMPLE_JSON, newVal); + std::vector path{"mapOfStringToI32", "test1"}; + + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + + GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(getOp.val, "123"); + } + + { + using TC = apache::thrift::type_class::structure; + std::vector path{"mapOfI32ToStruct", "20"}; + + cfg::L4PortRange newRange; + newRange.min() = 666; + newRange.max() = 999; + folly::fbstring newVal = + serialize(fsdb::OperProtocol::SIMPLE_JSON, newRange); + SetEncodedPathVisitorOperator setOp( + fsdb::OperProtocol::SIMPLE_JSON, newVal); + + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + + GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(getOp.val, newVal); + auto encoded = *getOp.val; + auto buf = + folly::IOBuf::wrapBufferAsValue(encoded.data(), encoded.length()); + auto getStruct = deserializeBuf( + fsdb::OperProtocol::SIMPLE_JSON, std::move(buf)); + EXPECT_EQ(getStruct.min(), 666); + EXPECT_EQ(getStruct.max(), 999); + } + + { + using TC = apache::thrift::type_class::structure; + std::vector path{"mapOfI32ToListOfStructs", "20", "0"}; + + cfg::L4PortRange newRange; + newRange.min() = 666; + newRange.max() = 999; + folly::fbstring newVal = + serialize(fsdb::OperProtocol::SIMPLE_JSON, newRange); + SetEncodedPathVisitorOperator setOp( + fsdb::OperProtocol::SIMPLE_JSON, newVal); + + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, setOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + + GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); + result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + EXPECT_EQ(getOp.val, newVal); + auto encoded = *getOp.val; + auto buf = + folly::IOBuf::wrapBufferAsValue(encoded.data(), encoded.length()); + auto getStruct = deserializeBuf( + fsdb::OperProtocol::SIMPLE_JSON, std::move(buf)); + EXPECT_EQ(getStruct.min(), 666); + EXPECT_EQ(getStruct.max(), 999); + } + + { + using TC = apache::thrift::type_class::structure; + std::vector path{"mapOfI32ToSetOfString", "20", "test1"}; + + GetEncodedPathVisitorOperator getOp(fsdb::OperProtocol::SIMPLE_JSON); + auto result = RootPathVisitor::visit( + *nodeA, path.begin(), path.end(), PathVisitMode::LEAF, getOp); + EXPECT_EQ(result, ThriftTraverseResult::OK); + + auto encoded = *getOp.val; + auto buf = + folly::IOBuf::wrapBufferAsValue(encoded.data(), encoded.length()); + auto getStruct = deserializeBuf( + fsdb::OperProtocol::SIMPLE_JSON, std::move(buf)); + EXPECT_EQ(getStruct, "test1"); + } } } // namespace facebook::fboss::thrift_cow::test diff --git a/fboss/thrift_cow/visitors/tests/RecurseVisitorTests.cpp b/fboss/thrift_cow/visitors/tests/RecurseVisitorTests.cpp index 6fd931c5fa1e8..d2e65a8047d3e 100644 --- a/fboss/thrift_cow/visitors/tests/RecurseVisitorTests.cpp +++ b/fboss/thrift_cow/visitors/tests/RecurseVisitorTests.cpp @@ -32,6 +32,7 @@ folly::dynamic createTestDynamic() { "listOfPrimitives", dynamic::array())("listOfStructs", dynamic::array())( "mapOfEnumToI32", dynamic::object())("mapOfI32ToI32", dynamic::object())( "mapOfI32ToListOfStructs", dynamic::object())( + "mapOfI32ToSetOfString", dynamic::object())( "mapOfI32ToStruct", dynamic::object())( "mapOfStringToI32", dynamic::object())( "mapOfStringToStruct", dynamic::object())("setOfEnum", dynamic::array())( @@ -40,7 +41,9 @@ folly::dynamic createTestDynamic() { "mapB", dynamic::object())("cowMap", dynamic::object())( "hybridMap", dynamic::object())("hybridList", dynamic::array())( "hybridSet", dynamic::array())("hybridUnion", dynamic::object())( - "hybridStruct", dynamic::object("childMap", dynamic::object()))( + "hybridStruct", + dynamic::object("childMap", dynamic::object())( + "strMap", dynamic::object())("structMap", dynamic::object()))( "hybridMapOfI32ToStruct", dynamic::object())( "hybridMapOfMap", dynamic::object()); } @@ -84,7 +87,14 @@ TYPED_TEST(RecurseVisitorTests, TestFullRecurse) { std::map, folly::dynamic> visited; auto processPath = [&visited]( const std::vector& path, auto&& node) { - visited.emplace(std::make_pair(path, node->toFollyDynamic())); + folly::dynamic dyn; + if constexpr (is_cow_type_v) { + dyn = node->toFollyDynamic(); + } else { + facebook::thrift::to_dynamic( + dyn, *node, facebook::thrift::dynamic_format::JSON_1); + } + visited.emplace(path, dyn); }; RootRecurseVisitor::visit( @@ -100,6 +110,7 @@ TYPED_TEST(RecurseVisitorTests, TestFullRecurse) { {{"hybridSet"}, dynamic::array()}, {{"hybridUnion"}, dynamic::object()}, {{"hybridStruct"}, testDyn["hybridStruct"]}, + {{"mapOfEnumToStruct"}, testDyn["mapOfEnumToStruct"]}, {{"inlineBool"}, testDyn["inlineBool"]}, {{"inlineInt"}, testDyn["inlineInt"]}, {{"inlineString"}, testDyn["inlineString"]}, @@ -111,14 +122,6 @@ TYPED_TEST(RecurseVisitorTests, TestFullRecurse) { {{"inlineStruct", "invert"}, false}, {{"inlineVariant"}, testDyn["inlineVariant"]}, {{"inlineVariant", "inlineInt"}, testDyn["inlineVariant"]["inlineInt"]}, - {{"mapOfEnumToStruct"}, testDyn["mapOfEnumToStruct"]}, - {{"mapOfEnumToStruct", "3"}, testDyn["mapOfEnumToStruct"][3]}, - {{"mapOfEnumToStruct", "3", "min"}, - testDyn["mapOfEnumToStruct"][3]["min"]}, - {{"mapOfEnumToStruct", "3", "max"}, - testDyn["mapOfEnumToStruct"][3]["max"]}, - {{"mapOfEnumToStruct", "3", "invert"}, - testDyn["mapOfEnumToStruct"][3]["invert"]}, {{"listOfListOfPrimitives"}, dynamic::array()}, {{"listOfListOfStructs"}, dynamic::array()}, {{"listOfPrimitives"}, dynamic::array()}, @@ -126,6 +129,7 @@ TYPED_TEST(RecurseVisitorTests, TestFullRecurse) { {{"mapOfEnumToI32"}, dynamic::object()}, {{"mapOfI32ToI32"}, dynamic::object()}, {{"mapOfI32ToListOfStructs"}, dynamic::object()}, + {{"mapOfI32ToSetOfString"}, dynamic::object()}, {{"mapOfI32ToStruct"}, dynamic::object()}, {{"mapOfStringToI32"}, dynamic::object()}, {{"mapOfStringToStruct"}, dynamic::object()}, @@ -135,11 +139,28 @@ TYPED_TEST(RecurseVisitorTests, TestFullRecurse) { {{"mapA"}, dynamic::object()}, {{"mapB"}, dynamic::object()}}; - std::map, folly::dynamic> hybridLeaves = { - {{"hybridStruct", "childMap"}, testDyn["hybridStruct"]["childMap"]}}; + std::map, folly::dynamic> hybridNodes = { + {{"mapOfEnumToStruct", "3"}, testDyn["mapOfEnumToStruct"][3]}}; + + std::map, folly::dynamic> hybridDeepLeaves = { + {{"hybridStruct", "childMap"}, testDyn["hybridStruct"]["childMap"]}, + {{"hybridStruct", "strMap"}, testDyn["hybridStruct"]["strMap"]}, + {{"hybridStruct", "structMap"}, testDyn["hybridStruct"]["structMap"]}, + {{"mapOfEnumToStruct"}, testDyn["mapOfEnumToStruct"]}, + {{"mapOfEnumToStruct", "3"}, testDyn["mapOfEnumToStruct"][3]}, + {{"mapOfEnumToStruct", "3", "min"}, + testDyn["mapOfEnumToStruct"][3]["min"]}, + {{"mapOfEnumToStruct", "3", "max"}, + testDyn["mapOfEnumToStruct"][3]["max"]}, + {{"mapOfEnumToStruct", "3", "invert"}, + testDyn["mapOfEnumToStruct"][3]["invert"]}}; - if (!this->isHybridStorage()) { - for (const auto& entry : hybridLeaves) { + if (this->isHybridStorage()) { + for (const auto& entry : hybridNodes) { + expected.insert(entry); + } + } else { + for (const auto& entry : hybridDeepLeaves) { expected.insert(entry); } } @@ -159,7 +180,14 @@ TYPED_TEST(RecurseVisitorTests, TestLeafRecurse) { std::map, folly::dynamic> visited; auto processPath = [&visited]( const std::vector& path, auto&& node) { - visited.emplace(std::make_pair(path, node->toFollyDynamic())); + folly::dynamic dyn; + if constexpr (is_cow_type_v) { + dyn = node->toFollyDynamic(); + } else { + facebook::thrift::to_dynamic( + dyn, *node, facebook::thrift::dynamic_format::JSON_1); + } + visited.emplace(path, dyn); }; RootRecurseVisitor::visit(nodeA, RecurseVisitMode::LEAVES, processPath); @@ -173,7 +201,9 @@ TYPED_TEST(RecurseVisitorTests, TestLeafRecurse) { {{"inlineStruct", "min"}, 10}, {{"inlineStruct", "max"}, 20}, {{"inlineStruct", "invert"}, false}, - {{"inlineVariant", "inlineInt"}, testDyn["inlineVariant"]["inlineInt"]}, + {{"inlineVariant", "inlineInt"}, testDyn["inlineVariant"]["inlineInt"]}}; + + std::map, folly::dynamic> hybridDeepLeaves = { {{"mapOfEnumToStruct", "3", "min"}, testDyn["mapOfEnumToStruct"][3]["min"]}, {{"mapOfEnumToStruct", "3", "max"}, @@ -182,10 +212,7 @@ TYPED_TEST(RecurseVisitorTests, TestLeafRecurse) { testDyn["mapOfEnumToStruct"][3]["invert"]}}; std::map, folly::dynamic> hybridNodes = { - {{"hybridMap"}, testDyn["hybridMap"]}, - {{"hybridMapOfI32ToStruct"}, testDyn["hybridMapOfI32ToStruct"]}, - {{"hybridMapOfMap"}, testDyn["hybridMapOfMap"]}, - {{"hybridList"}, testDyn["hybridList"]}, + {{"mapOfEnumToStruct", "3"}, testDyn["mapOfEnumToStruct"][3]}, {{"hybridSet"}, testDyn["hybridSet"]}, {{"hybridUnion"}, testDyn["hybridUnion"]}, {{"hybridStruct"}, testDyn["hybridStruct"]}}; @@ -194,6 +221,10 @@ TYPED_TEST(RecurseVisitorTests, TestLeafRecurse) { for (const auto& entry : hybridNodes) { expected.insert(entry); } + } else { + for (const auto& entry : hybridDeepLeaves) { + expected.insert(entry); + } } EXPECT_EQ(visited.size(), expected.size()); @@ -218,24 +249,27 @@ TYPED_TEST(RecurseVisitorTests, TestLeafRecurse) { {{"4", "1"}, 10}, {{"4", "2"}, 20}, {{"4", "3"}, false}, - {{"21", "2"}, testDyn["inlineVariant"]["inlineInt"]}, + {{"21", "2"}, testDyn["inlineVariant"]["inlineInt"]}}; + + hybridDeepLeaves = { {{"15", "3", "1"}, testDyn["mapOfEnumToStruct"][3]["min"]}, {{"15", "3", "2"}, testDyn["mapOfEnumToStruct"][3]["max"]}, {{"15", "3", "3"}, testDyn["mapOfEnumToStruct"][3]["invert"]}}; hybridNodes = { - {{"27"}, testDyn["hybridMap"]}, - {{"28"}, testDyn["hybridList"]}, + {{"15", "3"}, testDyn["mapOfEnumToStruct"][3]}, {{"29"}, testDyn["hybridSet"]}, {{"30"}, testDyn["hybridUnion"]}, - {{"31"}, testDyn["hybridStruct"]}, - {{"32"}, testDyn["hybridMapOfI32ToStruct"]}, - {{"33"}, testDyn["hybridMapOfMap"]}}; + {{"31"}, testDyn["hybridStruct"]}}; if (this->isHybridStorage()) { for (const auto& entry : hybridNodes) { expected.insert(entry); } + } else { + for (const auto& entry : hybridDeepLeaves) { + expected.insert(entry); + } } EXPECT_EQ(visited.size(), expected.size()); diff --git a/fboss/thrift_cow/visitors/tests/VisitorTestUtils.cpp b/fboss/thrift_cow/visitors/tests/VisitorTestUtils.cpp index e9ea6fafd2bf9..08b6db853d1b9 100644 --- a/fboss/thrift_cow/visitors/tests/VisitorTestUtils.cpp +++ b/fboss/thrift_cow/visitors/tests/VisitorTestUtils.cpp @@ -7,22 +7,6 @@ namespace facebook::fboss::thrift_cow { TestStruct createSimpleTestStruct() { - using folly::dynamic; - dynamic testDyn = dynamic::object("inlineBool", true)("inlineInt", 54)( - "inlineString", "testname")("optionalString", "bla")( - "inlineStruct", dynamic::object("min", 10)("max", 20))( - "inlineVariant", dynamic::object("inlineInt", 99))( - "mapOfEnumToStruct", - dynamic::object("3", dynamic::object("min", 100)("max", 200)))( - "mapOfI32ToI32", dynamic::object(1, 1))( - "cowMap", dynamic::object(1, true))( - "hybridMap", dynamic::object(1, true)); - - return facebook::thrift::from_dynamic( - testDyn, facebook::thrift::dynamic_format::JSON_1); -} - -TestStruct createHybridMapTestStruct() { using folly::dynamic; dynamic testDyn = dynamic::object("inlineBool", true)("inlineInt", 54)( "inlineString", "testname")("optionalString", "bla")( @@ -35,7 +19,18 @@ TestStruct createHybridMapTestStruct() { "hybridMap", dynamic::object(1, true))( "hybridMapOfI32ToStruct", dynamic::object(20, dynamic::object("min", 400)("max", 600)))( - "hybridMapOfMap", dynamic::object(10, dynamic::object(20, 30))); + "hybridMapOfMap", dynamic::object(10, dynamic::object(20, 30)))( + "hybridStruct", + dynamic::object( + "childMap", dynamic::object(10, true)(20, false)(50, false)))( + "mapOfStringToI32", dynamic::object("test1", 1)("test2", 2))( + "mapOfI32ToStruct", + dynamic::object(20, dynamic::object("min", 400)("max", 600)))( + "mapOfI32ToListOfStructs", + dynamic::object( + 20, dynamic::array(dynamic::object("min", 100)("max", 200))))( + "mapOfI32ToSetOfString", + dynamic::object(20, dynamic::array("test1", "test2"))); return facebook::thrift::from_dynamic( testDyn, facebook::thrift::dynamic_format::JSON_1); diff --git a/fboss/thrift_cow/visitors/tests/VisitorTestUtils.h b/fboss/thrift_cow/visitors/tests/VisitorTestUtils.h index 7ce40ca918de3..063fa0338382e 100644 --- a/fboss/thrift_cow/visitors/tests/VisitorTestUtils.h +++ b/fboss/thrift_cow/visitors/tests/VisitorTestUtils.h @@ -18,8 +18,6 @@ using L4PortRangeMembers = TestStruct createSimpleTestStruct(); -TestStruct createHybridMapTestStruct(); - template inline ThriftTraverseResult visitPath( Node& node, diff --git a/fboss/thrift_visitors/ThriftPathVisitor.h b/fboss/thrift_visitors/ThriftPathVisitor.h index 77e2226eef433..c79da48d780a8 100644 --- a/fboss/thrift_visitors/ThriftPathVisitor.h +++ b/fboss/thrift_visitors/ThriftPathVisitor.h @@ -48,17 +48,13 @@ struct ThriftPathVisitor; */ template struct ThriftPathVisitor, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { using Tag = apache::thrift::type::enum_t; // Check for terminal condition @@ -80,17 +76,13 @@ struct ThriftPathVisitor, Options> { */ template struct ThriftPathVisitor, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { using Tag = apache::thrift::type::set; using ValueT = typename folly::remove_cvref_t::value_type; @@ -157,17 +149,13 @@ struct ThriftPathVisitor, Options> { */ template struct ThriftPathVisitor, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { using Tag = apache::thrift::type::list; static_assert( @@ -211,17 +199,13 @@ template struct ThriftPathVisitor< apache::thrift::type::map, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { using Tag = apache::thrift::type::map; static_assert( @@ -277,17 +261,13 @@ struct ThriftPathVisitor< */ template struct ThriftPathVisitor, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { static_assert( !(shouldCreateNodeIfMissing && isConst), "Cannot use CreateNodeIfMissing option against a const node"); @@ -339,17 +319,13 @@ struct ThriftPathVisitor, Options> { */ template struct ThriftPathVisitor, Options> { - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { static_assert( !(shouldCreateNodeIfMissing && isConst), "Cannot use CreateNodeIfMissing option against a const node"); @@ -417,17 +393,13 @@ struct ThriftPathVisitor { apache::thrift::type::is_a_v, "expected primitive type"); - template < - typename Node, - typename PathIter, - typename Func, - typename = std::enable_if_t< - std::is_same_v< - typename std::iterator_traits::value_type, - std::string>, - void>> + template static ThriftTraverseResult - visit(Node&& node, PathIter begin, PathIter end, Func&& f) { + visit(Node&& node, PathIter begin, PathIter end, Func&& f) + requires(std::is_same_v< + typename std::iterator_traits::value_type, + std::string>) + { if (begin == end) { try { f(std::forward(node), Tag{}); diff --git a/fboss/util/BUCK b/fboss/util/BUCK index 645ba69d15e3f..a765921b08284 100644 --- a/fboss/util/BUCK +++ b/fboss/util/BUCK @@ -87,7 +87,6 @@ cpp_library( "//fboss/lib/fpga/facebook/fuji:fuji_container", "//fboss/lib/fpga/facebook/yamp:yamp_i2c", "//fboss/lib/i2c/facebook/fuji:fuji_i2c", - "//fboss/lib/platforms:platform_mode", "//fboss/lib/platforms:product-info", "//fboss/lib/usb:i2-api", "//fboss/lib/usb:wedge_i2c", @@ -102,7 +101,6 @@ cpp_library( "//folly:memory", "//folly:singleton", "//folly/gen:base", - "//folly/init:init", "//folly/io/async:async_base", "//folly/logging:logging", "//thrift/lib/cpp/util:enum_utils", diff --git a/fboss/util/CredoDebugShell.cpp b/fboss/util/CredoDebugShell.cpp index 22da8d9bd50eb..5e879be6d13cd 100644 --- a/fboss/util/CredoDebugShell.cpp +++ b/fboss/util/CredoDebugShell.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include diff --git a/fboss/util/find_files_not_built_in_oss.py b/fboss/util/find_files_not_built_in_oss.py index 848b976c58524..e81276f821603 100755 --- a/fboss/util/find_files_not_built_in_oss.py +++ b/fboss/util/find_files_not_built_in_oss.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +# pyre-unsafe + # Run as python3 find_files_not_in_fboss.py # # diff --git a/fboss/util/qsfp_util_main.cpp b/fboss/util/qsfp_util_main.cpp index 0bc6b499b6c66..3c7f990d43bf7 100644 --- a/fboss/util/qsfp_util_main.cpp +++ b/fboss/util/qsfp_util_main.cpp @@ -3,7 +3,6 @@ #include "fboss/lib/thrift_service_client/ThriftServiceClient.h" #include "fboss/qsfp_service/platforms/wedge/WedgeManager.h" // @manual=//fboss/qsfp_service/platforms/wedge:wedge-platform-default #include "fboss/qsfp_service/platforms/wedge/WedgeManagerInit.h" // @manual=//fboss/qsfp_service/platforms/wedge:wedge-platform-default -#include "fboss/util/qsfp/QsfpServiceDetector.h" #include "fboss/util/qsfp/QsfpUtilContainer.h" #include "fboss/util/qsfp/QsfpUtilTx.h" #include "fboss/util/wedge_qsfp_util.h" diff --git a/fboss/util/run_bcm_cint_audit.py b/fboss/util/run_bcm_cint_audit.py index 238e3c8292dce..2f1280d5ca855 100644 --- a/fboss/util/run_bcm_cint_audit.py +++ b/fboss/util/run_bcm_cint_audit.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +# pyre-unsafe + # Run as python3 run_bcm_cint_audit.py # # diff --git a/fboss/util/run_sai_replayer_attribute_audit.py b/fboss/util/run_sai_replayer_attribute_audit.py index 4a17b87c99285..c533e1226650d 100644 --- a/fboss/util/run_sai_replayer_attribute_audit.py +++ b/fboss/util/run_sai_replayer_attribute_audit.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +# pyre-unsafe + # Run as python3 fboss/util/run_sai_replayer_audit.py # # diff --git a/fboss/util/sdk_onboarding/sdk_tests.py b/fboss/util/sdk_onboarding/sdk_tests.py index 02c556f5c9fca..8899bc8a9aac2 100644 --- a/fboss/util/sdk_onboarding/sdk_tests.py +++ b/fboss/util/sdk_onboarding/sdk_tests.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 # Copyright 2004-present Facebook. All Rights Reserved. +# pyre-unsafe + import argparse import json diff --git a/fboss/util/stress_route_insertion.py b/fboss/util/stress_route_insertion.py index 6cabb553f21dd..c71f165b0a80f 100644 --- a/fboss/util/stress_route_insertion.py +++ b/fboss/util/stress_route_insertion.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 # Copyright (c) 2004-present, Facebook, Inc. All rights reserved. +# pyre-unsafe + import argparse import random import time diff --git a/fboss/util/thrift_state.py b/fboss/util/thrift_state.py index 76d8eebc35843..c69a9cface799 100644 --- a/fboss/util/thrift_state.py +++ b/fboss/util/thrift_state.py @@ -1,3 +1,4 @@ +# pyre-unsafe import argparse import json diff --git a/fboss/util/wedge_qsfp_util.cpp b/fboss/util/wedge_qsfp_util.cpp index 768c3dbcc742f..2db9963913119 100644 --- a/fboss/util/wedge_qsfp_util.cpp +++ b/fboss/util/wedge_qsfp_util.cpp @@ -2,7 +2,6 @@ #include "fboss/util/wedge_qsfp_util.h" #include "fboss/lib/usb/GalaxyI2CBus.h" -#include "fboss/lib/usb/Wedge100I2CBus.h" #include "fboss/lib/usb/WedgeI2CBus.h" #include "fboss/qsfp_service/module/QsfpModule.h" @@ -21,7 +20,6 @@ #include #include #include -#include #include #include #include