From 583353d46f0d6d4e55d0d521be44cda1396ac870 Mon Sep 17 00:00:00 2001 From: Cliff Burdick Date: Fri, 12 Jun 2026 21:32:21 +0000 Subject: [PATCH 1/2] Update DAQIRI examples for manager->engine API rename DAQIRI renamed its manager/backend abstraction to 'engine' (ManagerType->EngineType, get_manager_type->get_engine_type, manager_type_to_string->engine_type_to_string, DAQIRI_MGR->DAQIRI_ENGINE). Update the ported networking examples to match: - daqiri_raw_ethernet_bench: drop the unnecessary runtime engine-type check (the raw Ethernet bench only runs on the DPDK engine) and build the RX/TX operators directly under DAQIRI_ENGINE_DPDK; rename the DAQIRI_MGR build option to DAQIRI_ENGINE and DAQIRI_MANAGER_LIST to DAQIRI_ENGINE_LIST (CMake + pytest helpers). - network_radar_pipeline: use engine_type_to_string(common_.engine_type) in the DAQIRI TX connector. - HoloHubDaqiri.cmake and the standalone CMakeLists.txt.install files: rename the manager terminology to engine. Signed-off-by: Cliff Burdick --- .../cpp/CMakeLists.txt | 18 +++---- .../cpp/CMakeLists.txt.install | 24 +++++----- .../daqiri_raw_ethernet_bench/cpp/main.cpp | 47 ++++++++----------- .../cpp/testing/benchmark_utils.py | 6 +-- .../testing/test_daqiri_raw_ethernet_bench.py | 26 +++++----- .../cpp/CMakeLists.txt.install | 8 ++-- .../daqiri_connectors/adv_networking_tx.cu | 4 +- .../cpp/daqiri_connectors/adv_networking_tx.h | 2 +- cmake/HoloHubDaqiri.cmake | 8 ++-- 9 files changed, 68 insertions(+), 75 deletions(-) diff --git a/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt b/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt index 75e69a2b77..423ab75c9c 100644 --- a/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt +++ b/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt @@ -37,15 +37,15 @@ target_link_libraries(daqiri_raw_ethernet_bench ) holohub_link_daqiri(daqiri_raw_ethernet_bench) -# Configure manager support through compile definitions -if(NOT DEFINED DAQIRI_MGR) - set(DAQIRI_MGR "dpdk" CACHE STRING "DAQIRI manager type(s) list") +# Configure engine support through compile definitions +if(NOT DEFINED DAQIRI_ENGINE) + set(DAQIRI_ENGINE "dpdk" CACHE STRING "DAQIRI engine type(s) list") endif() -separate_arguments(DAQIRI_MGR_LIST UNIX_COMMAND ${DAQIRI_MGR}) -foreach(MGR IN LISTS DAQIRI_MGR_LIST) - string(TOUPPER "${MGR}" MGR_UPPER) - message(STATUS "Adding DAQIRI manager ${MGR} to the application configuration") - target_compile_definitions(${PROJECT_NAME} PUBLIC "DAQIRI_MGR_${MGR_UPPER}=1") +separate_arguments(DAQIRI_ENGINE_LIST UNIX_COMMAND ${DAQIRI_ENGINE}) +foreach(ENGINE IN LISTS DAQIRI_ENGINE_LIST) + string(TOUPPER "${ENGINE}" ENGINE_UPPER) + message(STATUS "Adding DAQIRI engine ${ENGINE} to the application configuration") + target_compile_definitions(${PROJECT_NAME} PUBLIC "DAQIRI_ENGINE_${ENGINE_UPPER}=1") endforeach() # Copy config file @@ -117,7 +117,7 @@ if(BUILD_TESTING) include(add_python_tests) add_python_tests( INPUT "testing" - ENVIRONMENT "DAQIRI_MANAGER_LIST=${DAQIRI_MGR_LIST}" + ENVIRONMENT "DAQIRI_ENGINE_LIST=${DAQIRI_ENGINE_LIST}" PYTEST_ARGS "-v" "-s" "--log-cli-level=DEBUG" "--show-capture=no" ) endif() diff --git a/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt.install b/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt.install index 982b4811a4..a471227dc4 100644 --- a/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt.install +++ b/applications/daqiri_raw_ethernet_bench/cpp/CMakeLists.txt.install @@ -31,13 +31,13 @@ find_package(daqiri REQUIRED CONFIG) function(link_daqiri target_name) set(_daqiri_targets daqiri::daqiri) - foreach(_daqiri_manager IN ITEMS dpdk socket rdma) - if(TARGET "daqiri::${_daqiri_manager}") - list(APPEND _daqiri_targets "daqiri::${_daqiri_manager}") + foreach(_daqiri_engine IN ITEMS dpdk socket rdma) + if(TARGET "daqiri::${_daqiri_engine}") + list(APPEND _daqiri_targets "daqiri::${_daqiri_engine}") endif() endforeach() - # DAQIRI static packages can contain cross-references between core and manager archives. + # DAQIRI static packages can contain cross-references between core and engine archives. string(JOIN "," _daqiri_link_group ${_daqiri_targets}) target_link_libraries("${target_name}" PRIVATE "$") endfunction() @@ -53,15 +53,15 @@ target_link_libraries(daqiri_raw_ethernet_bench ) link_daqiri(daqiri_raw_ethernet_bench) -# Configure manager support through compile definitions -if(NOT DEFINED DAQIRI_MGR) - set(DAQIRI_MGR "dpdk" CACHE STRING "DAQIRI manager type(s) list") +# Configure engine support through compile definitions +if(NOT DEFINED DAQIRI_ENGINE) + set(DAQIRI_ENGINE "dpdk" CACHE STRING "DAQIRI engine type(s) list") endif() -separate_arguments(DAQIRI_MGR_LIST UNIX_COMMAND ${DAQIRI_MGR}) -foreach(MGR IN LISTS DAQIRI_MGR_LIST) - string(TOUPPER "${MGR}" MGR_UPPER) - message(STATUS "Adding DAQIRI manager ${MGR} to the application configuration") - target_compile_definitions(${PROJECT_NAME} PUBLIC "DAQIRI_MGR_${MGR_UPPER}=1") +separate_arguments(DAQIRI_ENGINE_LIST UNIX_COMMAND ${DAQIRI_ENGINE}) +foreach(ENGINE IN LISTS DAQIRI_ENGINE_LIST) + string(TOUPPER "${ENGINE}" ENGINE_UPPER) + message(STATUS "Adding DAQIRI engine ${ENGINE} to the application configuration") + target_compile_definitions(${PROJECT_NAME} PUBLIC "DAQIRI_ENGINE_${ENGINE_UPPER}=1") endforeach() # Copy config files diff --git a/applications/daqiri_raw_ethernet_bench/cpp/main.cpp b/applications/daqiri_raw_ethernet_bench/cpp/main.cpp index 1fe45e1341..e2cbfc5430 100644 --- a/applications/daqiri_raw_ethernet_bench/cpp/main.cpp +++ b/applications/daqiri_raw_ethernet_bench/cpp/main.cpp @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#if DAQIRI_MGR_DPDK +#if DAQIRI_ENGINE_DPDK #include "default_bench_op_rx.h" #include "default_bench_op_tx.h" #endif @@ -29,35 +29,28 @@ class App : public holoscan::Application { using namespace holoscan; const auto [rx_en, tx_en] = daqiri::get_rx_tx_configs_enabled(config()); - const auto mgr_type = daqiri::get_manager_type(); - HOLOSCAN_LOG_INFO("Using DAQIRI manager {}", daqiri::manager_type_to_string(mgr_type)); - - if (mgr_type == daqiri::ManagerType::DPDK) { -#if DAQIRI_MGR_DPDK - if (rx_en) { - auto bench_rx = make_operator( - "bench_rx", - from_config("bench_rx"), - make_condition("is_alive", true)); - add_operator(bench_rx); - } - if (tx_en) { - auto bench_tx = make_operator( - "bench_tx", - from_config("bench_tx"), - make_condition("is_alive", true)); - add_operator(bench_tx); - } + // The raw Ethernet benchmark only runs on the DPDK engine, so there is no + // need to query or branch on the engine type at runtime. +#if DAQIRI_ENGINE_DPDK + if (rx_en) { + auto bench_rx = make_operator( + "bench_rx", + from_config("bench_rx"), + make_condition("is_alive", true)); + add_operator(bench_rx); + } + if (tx_en) { + auto bench_tx = make_operator( + "bench_tx", + from_config("bench_tx"), + make_condition("is_alive", true)); + add_operator(bench_tx); + } #else - HOLOSCAN_LOG_ERROR("DPDK manager/backend is disabled"); - exit(1); + HOLOSCAN_LOG_ERROR("DPDK engine is disabled; rebuild with -DDAQIRI_ENGINE=dpdk"); + exit(1); #endif - - } else { - HOLOSCAN_LOG_ERROR("Unsupported DAQIRI manager/backend"); - exit(1); - } } }; diff --git a/applications/daqiri_raw_ethernet_bench/cpp/testing/benchmark_utils.py b/applications/daqiri_raw_ethernet_bench/cpp/testing/benchmark_utils.py index 5e680874ad..f251cde69f 100644 --- a/applications/daqiri_raw_ethernet_bench/cpp/testing/benchmark_utils.py +++ b/applications/daqiri_raw_ethernet_bench/cpp/testing/benchmark_utils.py @@ -305,10 +305,10 @@ def _extract_metric(pattern, text) -> int: return 0 # Return 0 if no match found -def parse_benchmark_results(log: str, manager_type: str) -> BenchmarkResults: - if manager_type == "dpdk": +def parse_benchmark_results(log: str, engine_type: str) -> BenchmarkResults: + if engine_type == "dpdk": return parse_dpdk_benchmark_results(log) - raise ValueError(f"Unsupported manager type: {manager_type}") + raise ValueError(f"Unsupported engine type: {engine_type}") def parse_dpdk_benchmark_results(log: str) -> BenchmarkResults: diff --git a/applications/daqiri_raw_ethernet_bench/cpp/testing/test_daqiri_raw_ethernet_bench.py b/applications/daqiri_raw_ethernet_bench/cpp/testing/test_daqiri_raw_ethernet_bench.py index 25c9230b66..5da3ad0e2d 100644 --- a/applications/daqiri_raw_ethernet_bench/cpp/testing/test_daqiri_raw_ethernet_bench.py +++ b/applications/daqiri_raw_ethernet_bench/cpp/testing/test_daqiri_raw_ethernet_bench.py @@ -46,18 +46,18 @@ def executable(work_dir): return os.path.join(work_dir, "daqiri_raw_ethernet_bench") -def skip_if_manager_unavailable(manager): - """Skip the current test if the given manager is not in DAQIRI_MANAGER_LIST.""" - manager_list = os.environ.get("DAQIRI_MANAGER_LIST", "").split() - if manager not in manager_list: - pytest.skip(f"{manager} manager not available in this build") +def skip_if_engine_unavailable(engine): + """Skip the current test if the given engine is not in DAQIRI_ENGINE_LIST.""" + engine_list = os.environ.get("DAQIRI_ENGINE_LIST", "").split() + if engine not in engine_list: + pytest.skip(f"{engine} engine not available in this build") @pytest.fixture(autouse=True) -def _skip_unavailable_manager(request): - """Auto-skip parametrized tests whose manager is not in DAQIRI_MANAGER_LIST.""" - if hasattr(request.node, "callspec") and "manager" in request.node.callspec.params: - skip_if_manager_unavailable(request.node.callspec.params["manager"]) +def _skip_unavailable_engine(request): + """Auto-skip parametrized tests whose engine is not in DAQIRI_ENGINE_LIST.""" + if hasattr(request.node, "callspec") and "engine" in request.node.callspec.params: + skip_if_engine_unavailable(request.node.callspec.params["engine"]) @pytest.mark.parametrize( @@ -69,12 +69,12 @@ def _skip_unavailable_manager(request): (9000, 96.0, 0.1, 0.0), ], ) -@pytest.mark.parametrize("manager", ["dpdk"]) +@pytest.mark.parametrize("engine", ["dpdk"]) def test_multi_if_loopback( executable, work_dir, nvidia_nics, - manager, + engine, packet_size, avg_throughput_threshold, missed_pkts_threshold, @@ -96,7 +96,7 @@ def test_multi_if_loopback( payload_size = packet_size - header_size in_config_file = os.path.join(work_dir, "daqiri_raw_ethernet_bench_default_tx_rx.yaml") out_config_file = os.path.join( - work_dir, "testing", f"daqiri_raw_ethernet_bench_{manager}_tx_rx_{packet_size}.yaml" + work_dir, "testing", f"daqiri_raw_ethernet_bench_{engine}_tx_rx_{packet_size}.yaml" ) update_yaml_file( in_config_file, @@ -116,7 +116,7 @@ def test_multi_if_loopback( # Run the application until completion and parse the results command = f"{executable} {out_config_file}" result = run_command(command, stream_output=True) - results = parse_benchmark_results(result.stdout + result.stderr, manager) + results = parse_benchmark_results(result.stdout + result.stderr, engine) # Validate some expected metrics port_map = {0: 1} # Port 0 (TX) sends to Port 1 (RX), matching daqiri.cfg.interfaces diff --git a/applications/daqiri_socket_ping/cpp/CMakeLists.txt.install b/applications/daqiri_socket_ping/cpp/CMakeLists.txt.install index cc509e21ee..08b48e7f41 100644 --- a/applications/daqiri_socket_ping/cpp/CMakeLists.txt.install +++ b/applications/daqiri_socket_ping/cpp/CMakeLists.txt.install @@ -27,13 +27,13 @@ find_package(daqiri REQUIRED CONFIG) function(link_daqiri target_name) set(_daqiri_targets daqiri::daqiri) - foreach(_daqiri_manager IN ITEMS dpdk socket rdma) - if(TARGET "daqiri::${_daqiri_manager}") - list(APPEND _daqiri_targets "daqiri::${_daqiri_manager}") + foreach(_daqiri_engine IN ITEMS dpdk socket rdma) + if(TARGET "daqiri::${_daqiri_engine}") + list(APPEND _daqiri_targets "daqiri::${_daqiri_engine}") endif() endforeach() - # DAQIRI static packages can contain cross-references between core and manager archives. + # DAQIRI static packages can contain cross-references between core and engine archives. string(JOIN "," _daqiri_link_group ${_daqiri_targets}) target_link_libraries("${target_name}" PRIVATE "$") endfunction() diff --git a/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.cu b/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.cu index dfb65fa748..1189cc3837 100644 --- a/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.cu +++ b/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.cu @@ -120,9 +120,9 @@ void AdvConnectorOpTx::initialize() { mr.second.kind_ == MemoryKind::DEVICE) gpu_direct_ = true; } - mgr_ = manager_type_to_string(cfg_.get().common_.manager_type); + engine_ = engine_type_to_string(cfg_.get().common_.engine_type); - HOLOSCAN_LOG_INFO("mgr_: {}", mgr_.c_str()); + HOLOSCAN_LOG_INFO("engine_: {}", engine_.c_str()); HOLOSCAN_LOG_INFO("gpu_direct_: {}", gpu_direct_); HOLOSCAN_LOG_INFO("hds_: {}", hds_); diff --git a/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.h b/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.h index 606fbdd809..f2ea851a0a 100644 --- a/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.h +++ b/applications/network_radar_pipeline/cpp/daqiri_connectors/adv_networking_tx.h @@ -89,7 +89,7 @@ class AdvConnectorOpTx : public Operator { uint32_t batch_size_; int hds_; bool gpu_direct_; - std::string mgr_; + std::string engine_; char eth_dst_[6]; uint32_t ip_src_; diff --git a/cmake/HoloHubDaqiri.cmake b/cmake/HoloHubDaqiri.cmake index 24affaa9be..646c5d5141 100644 --- a/cmake/HoloHubDaqiri.cmake +++ b/cmake/HoloHubDaqiri.cmake @@ -11,13 +11,13 @@ function(holohub_link_daqiri target_name) endif() set(_daqiri_targets daqiri::daqiri) - foreach(_daqiri_manager IN ITEMS dpdk socket rdma) - if(TARGET "daqiri::${_daqiri_manager}") - list(APPEND _daqiri_targets "daqiri::${_daqiri_manager}") + foreach(_daqiri_engine IN ITEMS dpdk socket rdma) + if(TARGET "daqiri::${_daqiri_engine}") + list(APPEND _daqiri_targets "daqiri::${_daqiri_engine}") endif() endforeach() - # DAQIRI static packages can contain cross-references between core and manager archives. + # DAQIRI static packages can contain cross-references between core and engine archives. string(JOIN "," _daqiri_link_group ${_daqiri_targets}) target_link_libraries("${target_name}" PRIVATE "$") endfunction() From 92b710b5be4de2b3d407bb89c71df663b316ca00 Mon Sep 17 00:00:00 2001 From: Cliff Burdick Date: Fri, 12 Jun 2026 21:43:25 +0000 Subject: [PATCH 2/2] Update DAQIRI socket examples to URI endpoint layout The DAQIRI engine rename also moved the socket transport into the endpoint URI scheme: the top-level 'protocol:' cfg field is now rejected as legacy, and socket_config takes 'local_addr'/'remote_addr' URIs (udp://host:port) instead of local_ip/local_port/remote_ip/remote_port. Convert the socket-based examples to the new layout: - daqiri_socket_ping - simple_pdw_pipeline - velodyne_lidar_app (lidar.yaml) Signed-off-by: Cliff Burdick --- .../daqiri_socket_ping/daqiri_socket_ping.yaml | 10 +++------- .../simple_pdw_pipeline/simple_pdw_pipeline.yaml | 10 +++------- applications/velodyne_lidar_app/cpp/lidar.yaml | 4 +--- 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/applications/daqiri_socket_ping/daqiri_socket_ping.yaml b/applications/daqiri_socket_ping/daqiri_socket_ping.yaml index 88541aa354..f54352c3da 100644 --- a/applications/daqiri_socket_ping/daqiri_socket_ping.yaml +++ b/applications/daqiri_socket_ping/daqiri_socket_ping.yaml @@ -18,7 +18,6 @@ daqiri: cfg: version: 1 stream_type: "socket" - protocol: "udp" master_core: 3 debug: false log_level: "info" @@ -40,8 +39,7 @@ daqiri: address: "127.0.0.1" socket_config: mode: server - local_ip: "127.0.0.1" - local_port: 5001 + local_addr: "udp://127.0.0.1:5001" max_payload_size: 2048 rx: queues: @@ -63,10 +61,8 @@ daqiri: address: "127.0.0.1" socket_config: mode: client - local_ip: "127.0.0.1" - local_port: 5002 - remote_ip: "127.0.0.1" - remote_port: 5001 + local_addr: "udp://127.0.0.1:5002" + remote_addr: "udp://127.0.0.1:5001" max_payload_size: 2048 rx: queues: diff --git a/applications/simple_pdw_pipeline/simple_pdw_pipeline.yaml b/applications/simple_pdw_pipeline/simple_pdw_pipeline.yaml index 435dd7dc2e..99ee527146 100644 --- a/applications/simple_pdw_pipeline/simple_pdw_pipeline.yaml +++ b/applications/simple_pdw_pipeline/simple_pdw_pipeline.yaml @@ -19,7 +19,6 @@ daqiri: cfg: version: 1 stream_type: "socket" - protocol: "udp" master_core: 3 debug: false log_level: "info" @@ -41,8 +40,7 @@ daqiri: address: "0.0.0.0" socket_config: mode: server - local_ip: "0.0.0.0" - local_port: 8999 + local_addr: "udp://0.0.0.0:8999" max_payload_size: 16400 rx: queues: @@ -56,10 +54,8 @@ daqiri: address: "127.0.0.1" socket_config: mode: client - local_ip: "127.0.0.1" - local_port: 12347 - remote_ip: "127.0.0.1" - remote_port: 12346 + local_addr: "udp://127.0.0.1:12347" + remote_addr: "udp://127.0.0.1:12346" max_payload_size: 8192 min_ipg_ns: 0 retry_connect_s: 1 diff --git a/applications/velodyne_lidar_app/cpp/lidar.yaml b/applications/velodyne_lidar_app/cpp/lidar.yaml index 99096593c6..32257beb92 100644 --- a/applications/velodyne_lidar_app/cpp/lidar.yaml +++ b/applications/velodyne_lidar_app/cpp/lidar.yaml @@ -18,7 +18,6 @@ daqiri: cfg: version: 1 stream_type: "socket" - protocol: "udp" master_core: 3 debug: false log_level: "info" @@ -35,8 +34,7 @@ daqiri: address: "0.0.0.0" socket_config: mode: server - local_ip: "0.0.0.0" - local_port: 2368 + local_addr: "udp://0.0.0.0:2368" max_payload_size: 1400 rx: queues: