# dm20-consortium/dm20 architecture

> Architecture diagram of the GitHub repository dm20-consortium/dm20, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-03). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dm20-consortium/dm20
- Repository: https://github.com/dm20-consortium/dm20

## Overview

#### 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: [`dm2/is/source/Main.cpp`](https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/Main.cpp) (IS runtime), [`dm2/dmClientLib/include/is/Connection.h`](https://github.com/dm20-consortium/dm20/blob/main/dm2/dmClientLib/include/is/Connection.h) (DM client API), [`dm2/cs/source/NwRcv/NwRcv.cpp`](https://github.com/dm20-consortium/dm20/blob/main/dm2/cs/source/NwRcv/NwRcv.cpp) (Network receiver), [`demo/docker-compose.yaml`](https://github.com/dm20-consortium/dm20/blob/main/demo/docker-compose.yaml) (Demo topology)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_is["Information Source"]
  node_is_runtime{{"IS runtime<br/>C++ runtime<br/>[Main.cpp]"}}
  node_query_lifecycle["Query lifecycle<br/>parser and planner<br/>[QueryReceiver.cpp]"]
  node_execution["Execution and queues<br/>execution engine"]
  node_operators["Stream operators<br/>operator library"]
end

subgraph group_cs["Communication Service"]
  node_cs_network{{"Network receiver<br/>CS executable<br/>[NwRcv.cpp]"}}
  node_cs_processing{{"Processing receiver<br/>CS executable<br/>[ProcRcv.cpp]"}}
  node_transport["UDP / multicast / DTLS<br/>transport layer<br/>[Socket.h]"]
end

subgraph group_integration["Integration Contracts"]
  node_tuple_model["Tuple and schema model<br/>data contract<br/>[Tuple.h]"]
  node_client_api["DM client API<br/>client library<br/>[Connection.h]"]
  node_protobuf_contracts["Protobuf contracts<br/>protocol schemas<br/>[dm2is.proto]"]
  node_ros2_dmi["ROS2 DMI<br/>adapter<br/>[uploader.cpp]"]
  node_protobuf_dmi["Protobuf DMI<br/>adapter<br/>[dm_bridge.cpp]"]
  node_udp_tcp_dmi["UDP/TCP DMI<br/>adapter<br/>[sender_wrapper.cpp]"]
end

subgraph group_platform["Data, Extension &amp; Deployment"]
  node_is_configuration["IS configuration<br/>runtime configuration<br/>[system.conf]"]
  node_postgres[("PostgreSQL / PostGIS<br/>relational datastore")]
  node_sql_bootstrap["Database bootstrap<br/>SQL initialization"]
  node_udf_extensions["Native UDFs<br/>query extensions"]
  node_security_material["DTLS and AES material<br/>security configuration<br/>[client-cert.pem]"]
  node_container_topology{{"Demo topology<br/>Docker Compose deployment"}}
end

node_cs_network -->|"receives via"| node_transport
node_transport -->|"sends via"| node_cs_processing
node_cs_network -->|"forwards inbound data"| node_is_runtime
node_is_runtime -->|"emits outbound results"| node_cs_processing
node_is_runtime -->|"accepts queries"| node_query_lifecycle
node_query_lifecycle -->|"builds execution plan"| node_execution
node_execution -->|"runs"| node_operators
node_execution -->|"processes"| node_tuple_model
node_client_api -->|"uses"| node_tuple_model
node_client_api -->|"submits queries and receives results"| node_is_runtime
node_protobuf_contracts -->|"defines exchange types"| node_client_api
node_ros2_dmi -->|"integrates through"| node_client_api
node_protobuf_dmi -->|"serializes"| node_protobuf_contracts
node_protobuf_dmi -->|"integrates through"| node_client_api
node_udp_tcp_dmi -->|"uploads through"| node_cs_network
node_is_configuration -.->|"configures"| node_is_runtime
node_is_runtime -->|"reads and writes relational data"| node_postgres
node_sql_bootstrap -.->|"initializes"| node_postgres
node_udf_extensions -->|"extends evaluation"| node_operators
node_security_material -.->|"secures DTLS/AES"| node_transport
node_container_topology -.->|"deploys"| node_is_runtime
node_container_topology -.->|"deploys"| node_cs_network
node_container_topology -.->|"deploys"| node_postgres

click node_is_runtime "https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/Main.cpp"
click node_query_lifecycle "https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/QueryReceiver.cpp"
click node_execution "https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/ProcessingExecuter.cpp"
click node_operators "https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/SelectionOperator.cpp"
click node_cs_network "https://github.com/dm20-consortium/dm20/blob/main/dm2/cs/source/NwRcv/NwRcv.cpp"
click node_cs_processing "https://github.com/dm20-consortium/dm20/blob/main/dm2/cs/source/ProcRcv/ProcRcv.cpp"
click node_transport "https://github.com/dm20-consortium/dm20/blob/main/dm2/csLib/include/Socket.h"
click node_tuple_model "https://github.com/dm20-consortium/dm20/blob/main/dm2/tupleLib/include/is/Tuple.h"
click node_client_api "https://github.com/dm20-consortium/dm20/blob/main/dm2/dmClientLib/include/is/Connection.h"
click node_protobuf_contracts "https://github.com/dm20-consortium/dm20/blob/main/dm2/proto/is/dm2is.proto"
click node_ros2_dmi "https://github.com/dm20-consortium/dm20/blob/main/dmi/ros2/ros2_dmi/src/ros2_dmi/uploader.cpp"
click node_protobuf_dmi "https://github.com/dm20-consortium/dm20/blob/main/dmi/protobuf/protobuf_dmi/src/protobuf_dmi/dm_bridge.cpp"
click node_udp_tcp_dmi "https://github.com/dm20-consortium/dm20/blob/main/dmi/udptcp/udp_dmi/src/udp_dmi/socket/sender_wrapper.cpp"
click node_is_configuration "https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_conf/system.conf"
click node_postgres "https://github.com/dm20-consortium/dm20/blob/main/dm2/rdb/Dockerfile"
click node_sql_bootstrap "https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_conf/sql/create_dm_config_parameter.sql"
click node_udf_extensions "https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_func/gis/UF_Distance_4326.cpp"
click node_security_material "https://github.com/dm20-consortium/dm20/blob/main/demo/conf_edge1/cs_dtls/certs/client-cert.pem"
click node_container_topology "https://github.com/dm20-consortium/dm20/blob/main/demo/docker-compose.yaml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_is_runtime,node_query_lifecycle,node_execution,node_operators toneBlue
class node_cs_network,node_cs_processing,node_transport toneAmber
class node_tuple_model,node_client_api,node_protobuf_contracts,node_ros2_dmi,node_protobuf_dmi,node_udp_tcp_dmi toneMint
class node_is_configuration,node_postgres,node_sql_bootstrap,node_udf_extensions,node_security_material,node_container_topology toneRose
```

## Components

### Information Source

Central stream and query runtime.

- [IS runtime](https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/Main.cpp): C++ runtime · Main stream-processing entry point. · `dm2/is/source/Main.cpp`
- [Query lifecycle](https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/QueryReceiver.cpp): parser and planner · Receives queries, parses them, and builds operator trees. · `dm2/is/source/QueryReceiver.cpp`
- [Execution and queues](https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/ProcessingExecuter.cpp): execution engine · Executes queries and manages processing queues. · `dm2/is/source/ProcessingExecuter.cpp`
- [Stream operators](https://github.com/dm20-consortium/dm20/blob/main/dm2/is/source/SelectionOperator.cpp): operator library · Selection, windows, transfer, joins, and evaluation semantics. · `dm2/is/source/SelectionOperator.cpp`

### Communication Service

Network-to-processing bridge.

- [Network receiver](https://github.com/dm20-consortium/dm20/blob/main/dm2/cs/source/NwRcv/NwRcv.cpp): CS executable · Receives network traffic for local processing. · `dm2/cs/source/NwRcv/NwRcv.cpp`
- [Processing receiver](https://github.com/dm20-consortium/dm20/blob/main/dm2/cs/source/ProcRcv/ProcRcv.cpp): CS executable · Accepts processed or local data for outbound delivery. · `dm2/cs/source/ProcRcv/ProcRcv.cpp`
- [UDP / multicast / DTLS](https://github.com/dm20-consortium/dm20/blob/main/dm2/csLib/include/Socket.h): transport layer · Socket abstraction and secure network implementations. · `dm2/csLib/include/Socket.h`

### Integration Contracts

Application and adapter boundaries.

- [Tuple and schema model](https://github.com/dm20-consortium/dm20/blob/main/dm2/tupleLib/include/is/Tuple.h): data contract · Internal typed data boundary for processing and clients. · `dm2/tupleLib/include/is/Tuple.h`
- [DM client API](https://github.com/dm20-consortium/dm20/blob/main/dm2/dmClientLib/include/is/Connection.h): client library · Connection, query/result, and DM management API. · `dm2/dmClientLib/include/is/Connection.h`
- [Protobuf contracts](https://github.com/dm20-consortium/dm20/blob/main/dm2/proto/is/dm2is.proto): protocol schemas · DM2 and mobility-information wire contracts. · `dm2/proto/is/dm2is.proto`
- [ROS2 DMI](https://github.com/dm20-consortium/dm20/blob/main/dmi/ros2/ros2_dmi/src/ros2_dmi/uploader.cpp): adapter · Uploads source data and downloads query results for ROS2. · `dmi/ros2/ros2_dmi/src/ros2_dmi/uploader.cpp`
- [Protobuf DMI](https://github.com/dm20-consortium/dm20/blob/main/dmi/protobuf/protobuf_dmi/src/protobuf_dmi/dm_bridge.cpp): adapter · Bridge and uploader for Protobuf runtimes. · `dmi/protobuf/protobuf_dmi/src/protobuf_dmi/dm_bridge.cpp`
- [UDP/TCP DMI](https://github.com/dm20-consortium/dm20/blob/main/dmi/udptcp/udp_dmi/src/udp_dmi/socket/sender_wrapper.cpp): adapter · Raw network adapters for CooL4 and external systems. · `dmi/udptcp/udp_dmi/src/udp_dmi/socket/sender_wrapper.cpp`

### Data, Extension & Deployment

- [IS configuration](https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_conf/system.conf): runtime configuration · Database, system behavior, schemas, and query settings. · `dm2/conf/is_conf/system.conf`
- [PostgreSQL / PostGIS](https://github.com/dm20-consortium/dm20/blob/main/dm2/rdb/Dockerfile): relational datastore · Map and platform data-store integration. · `dm2/rdb/Dockerfile`
- [Database bootstrap](https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_conf/sql/create_dm_config_parameter.sql): SQL initialization · Creates platform database tables. · `dm2/conf/is_conf/sql/create_dm_config_parameter.sql`
- [Native UDFs](https://github.com/dm20-consortium/dm20/blob/main/dm2/conf/is_func/gis/UF_Distance_4326.cpp): query extensions · GIS and data-fusion functions for evaluation. · `dm2/conf/is_func/gis/UF_Distance_4326.cpp`
- [DTLS and AES material](https://github.com/dm20-consortium/dm20/blob/main/demo/conf_edge1/cs_dtls/certs/client-cert.pem): security configuration · Certificates, keys, and AES initialization inputs. · `demo/conf_edge1/cs_dtls/certs/client-cert.pem`
- [Demo topology](https://github.com/dm20-consortium/dm20/blob/main/demo/docker-compose.yaml): Docker Compose deployment · Cloud, edge, and vehicle deployment configuration. · `demo/docker-compose.yaml`

## Connections

- 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
