How dm20-consortium/dm20 works
Purpose and entry points
DM2.0 is a C++ information-exchange platform for vehicle, roadside, and cloud deployments. It ingests dynamic mobility data, performs stream/SQL-style processing, and distributes results across heterogeneous networks. Primary operational entry points are the DM2 runtime (dm2/is/source/Main.cpp), communication service executables (dm2/cs/source/NwRcv/NwRcv.cpp, dm2/cs/source/ProcRcv/ProcRcv.cpp), and the message application (dm2/apl/dm2mes/source/Main.cpp). Build/install roots include build.bash, dm2/makefile, and demo/docker-compose.yaml.
Information Source (IS): stream processing core
IS is the central query and stream-processing runtime. It receives network/file/stream inputs, parses queries, creates operator trees, executes them, and manages queues and sessions.
• Query lifecycle: dm2/is/source/QueryReceiver.cpp, dm2/is/source/QueryParser.cpp, dm2/is/source/OperatorTreeGenerator.cpp.
• Execution boundary: dm2/is/source/ProcessingExecuter.cpp, dm2/is/source/QueryExecuter.cpp, dm2/is/source/QueueManager.cpp.
• Operators implement relational and stream semantics—selection, joins, windows, transfer, RDB access, recursion, and evaluation—under dm2/is/source/SelectionOperator.cpp, dm2/is/source/WindowOperator.cpp, dm2/is/source/TransferOperator.cpp.
Communication Service (CS): network/process bridge
CS separates network-facing receive/send paths from local processing-facing paths. NwRcv receives network traffic and forwards it to processing; ProcRcv accepts processed/local data and sends it outward. Session IDs are handled centrally.
• Network receive path: dm2/cs/source/NwRcv/NwRcv.cpp, dm2/cs/source/NwRcv/NwReceiver.cpp.
• Processing receive/send path: dm2/cs/source/ProcRcv/ProcRcv.cpp, dm2/cs/source/ProcRcv/NwSender.cpp.
• Transport abstraction and UDP/multicast/DTLS implementations: dm2/csLib/include/Socket.h, dm2/csLib/source/socket/SocketDTLS.cpp, dm2/csLib/source/socket/UdpMcNwServer.cpp.
Data contracts and client-facing integration
The platform’s internal tuple model and client library isolate applications and adapters from IS internals. Protocol contracts cover dynamic object, freespace, sensor, and signal information.
• Tuple/schema boundary: dm2/tupleLib/include/is/Tuple.h, dm2/tupleLib/include/is/Schema.h, dm2/tupleLib/source/TupleSet.cpp.
• Client API for connections, query/result handling, and DM management: dm2/dmClientLib/include/is/Connection.h, dm2/dmClientLib/include/is/DmManager.h, dm2/dmClientLib/source/InformationSourceParser.cpp.
• Protobuf interface definitions: dm2/proto/is/dm2is.proto, dm2/proto/api/object_info_0_8_0.proto, dm2/proto/api/freespace_info_0_8_0.proto.
DMI adapters: external producer/consumer boundary
DMI supplies protocol adapters that upload sensor data to DM2 and download query results for external runtimes. This is the principal integration boundary for CooL4 data, ROS2, Protobuf, and raw UDP/TCP.
• ROS2 bridge and executable nodes: dmi/ros2/ros2_dmi/src/ros2_dmi/uploader.cpp, dmi/ros2/ros2_dmi/src/ros2_dmi/downloader.cpp, dmi/ros2/ros2_dmi/launch/uploader.launch.py.
• Protobuf bridge: dmi/protobuf/protobuf_dmi/src/protobuf_dmi/dm_bridge.cpp, dmi/protobuf/protobuf_dmi/src/protobuf_dmi/uploader.cpp.
• UDP/TCP adapters and data classes: dmi/udptcp/udp_dmi/src/udp_dmi/socket/sender_wrapper.cpp, dmi/udptcp/tcp_dmi/src/tcp_dmi/system/server.cpp, dmi/udptcp/cool4_api_dataclass/include/cool4_api_dataclass/object_info.hpp.
Persistence, configuration, and extensibility
IS configuration defines the relational database connection, system behavior, query presets, timers, schemas, and logging. PostgreSQL/PostGIS is the intended map/data-store integration; SQL bootstrap scripts establish platform tables. Native user-defined functions extend query evaluation, including GIS and data fusion.
• Runtime configuration: dm2/conf/is_conf/RDB.conf, dm2/conf/is_conf/system.conf, dm2/conf/dm2.conf.
• Database initialization: dm2/conf/is_conf/sql/create_dm_config_parameter.sql, dm2/rdb/init.sh.
• UDF extension points: dm2/conf/is_func/gis/UF_Distance_4326.cpp, dm2/conf/is_func/fusion/UF_DATA_FUSION.cpp, dm2/conf/is_func/build.sh.
Deployment, security, and topology
Dockerfiles exist for IS, CS, libraries, protocol generation, and RDB, while the demo composes cloud, two edge nodes, and a vehicle configuration. UDP and DTLS are material network runtimes; certificate/key material and AES initialization data are deployment-managed security inputs.
• Container boundaries: dm2/is/Dockerfile, dm2/cs/Dockerfile, dm2/rdb/Dockerfile.
• Demo topology/configurations: demo/docker-compose.yaml, demo/conf_cloud/dm2.conf, demo/conf_vehicle/dmiConf.yml.
• Security implementation/configuration: dm2/secLib/source/DtlsContext.cpp, demo/conf_edge1/cs_dtls/certs/client-cert.pem, demo/conf_edge1/cs_aes/iv.bin.
Main entry points: Main.cpp IS runtime · Connection.h DM client API · NwRcv.cpp Network receiver · docker-compose.yaml Demo topology
Components 19
Information Source
Central stream and query runtime.
- IS runtime · Main stream-processing entry point.
dm2/is/source/Main.cpp - Query lifecycle · Receives queries, parses them, and builds operator trees.
dm2/is/source/QueryReceiver.cpp - Execution and queues · Executes queries and manages processing queues.
dm2/is/source/ProcessingExecuter.cpp - Stream operators · Selection, windows, transfer, joins, and evaluation semantics.
dm2/is/source/SelectionOperator.cpp
Communication Service
Network-to-processing bridge.
- Network receiver · Receives network traffic for local processing.
dm2/cs/source/NwRcv/NwRcv.cpp - Processing receiver · Accepts processed or local data for outbound delivery.
dm2/cs/source/ProcRcv/ProcRcv.cpp - UDP / multicast / DTLS · Socket abstraction and secure network implementations.
dm2/csLib/include/Socket.h
Integration Contracts
Application and adapter boundaries.
- Tuple and schema model · Internal typed data boundary for processing and clients.
dm2/tupleLib/include/is/Tuple.h - DM client API · Connection, query/result, and DM management API.
dm2/dmClientLib/include/is/Connection.h - Protobuf contracts · DM2 and mobility-information wire contracts.
dm2/proto/is/dm2is.proto - ROS2 DMI · Uploads source data and downloads query results for ROS2.
dmi/ros2/ros2_dmi/src/ros2_dmi/uploader.cpp - Protobuf DMI · Bridge and uploader for Protobuf runtimes.
dmi/protobuf/protobuf_dmi/src/protobuf_dmi/dm_bridge.cpp - UDP/TCP DMI · Raw network adapters for CooL4 and external systems.
dmi/udptcp/udp_dmi/src/udp_dmi/socket/sender_wrapper.cpp
Data, Extension & Deployment
- IS configuration · Database, system behavior, schemas, and query settings.
dm2/conf/is_conf/system.conf - PostgreSQL / PostGIS · Map and platform data-store integration.
dm2/rdb/Dockerfile - Database bootstrap · Creates platform database tables.
dm2/conf/is_conf/sql/create_dm_config_parameter.sql - Native UDFs · GIS and data-fusion functions for evaluation.
dm2/conf/is_func/gis/UF_Distance_4326.cpp - DTLS and AES material · Certificates, keys, and AES initialization inputs.
demo/conf_edge1/cs_dtls/certs/client-cert.pem - Demo topology · Cloud, edge, and vehicle deployment configuration.
demo/docker-compose.yaml
Connections 23
- Network receiver → UDP / multicast / DTLS: receives via
- UDP / multicast / DTLS → Processing receiver: sends via
- Network receiver → IS runtime: forwards inbound data
- IS runtime → Processing receiver: emits outbound results
- IS runtime → Query lifecycle: accepts queries
- Query lifecycle → Execution and queues: builds execution plan
- Execution and queues → Stream operators: runs
- Execution and queues → Tuple and schema model: processes
- DM client API → Tuple and schema model: uses
- DM client API → IS runtime: submits queries and receives results
- Protobuf contracts → DM client API: defines exchange types
- ROS2 DMI → DM client API: integrates through
- Protobuf DMI → Protobuf contracts: serializes
- Protobuf DMI → DM client API: integrates through
- UDP/TCP DMI → Network receiver: uploads through
- IS configuration → IS runtime: configures
- IS runtime → PostgreSQL / PostGIS: reads and writes relational data
- Database bootstrap → PostgreSQL / PostGIS: initializes
- Native UDFs → Stream operators: extends evaluation
- DTLS and AES material → UDP / multicast / DTLS: secures DTLS/AES
- Demo topology → IS runtime: deploys
- Demo topology → Network receiver: deploys
- Demo topology → PostgreSQL / PostGIS: deploys