# vectorgrp/sil-kit-adapters-qemu architecture

> Architecture diagram of the GitHub repository vectorgrp/sil-kit-adapters-qemu, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vectorgrp/sil-kit-adapters-qemu
- Repository: https://github.com/vectorgrp/sil-kit-adapters-qemu

## Overview

This repository’s runtime product is an adapter connecting QEMU socket-backed devices to a SIL Kit participant. Its main workflow is to parse CLI adaptation requests, establish QEMU socket connections, and forward Ethernet frames or character bytes between QEMU and SIL Kit services/topics. It also includes an Ethernet ICMP echo demo. The README documents character-device pub/sub behavior, but its implementation is not in the supplied tree; that branch is shown at the documented boundary only.

Main entry points: [`eth/adapter/EthSocketToEthControllerAdapter.cpp`](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp) (Ethernet controller), [`adapter/SilKitAdapterQemu.cpp`](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/adapter/SilKitAdapterQemu.cpp) (CLI entry point), [`eth/demos/IcmpEchoDevice/Device.cpp`](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/Device.cpp) (Echo device), [`eth/demos/IcmpEchoDevice/SilKitDemoEthernetIcmpEchoDevice.cpp`](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/SilKitDemoEthernetIcmpEchoDevice.cpp) (Echo demo entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Adapter runtime"]
  node_entry["CLI entry point"]
  node_participant["Participant creation"]
end

subgraph group_ethernet["Ethernet transport"]
  node_ethadapter["Ethernet socket adapter"]
  node_ethargs["Ethernet argument parser"]
  node_protocol["Frame codecs<br/>[EthernetHeader.hpp]"]
  node_ip4["IPv4 codec<br/>[Ip4Header.hpp]"]
  node_ethcontroller["Ethernet controller"]
end

subgraph group_chardev["Character transport"]
  node_charadapter["Socket byte adapter"]
end

subgraph group_demo["Ethernet demo"]
  node_device["Echo device<br/>[Device.cpp]"]
  node_demoapp["Echo demo entry"]
end

node_user(("Operator"))
node_qemu["QEMU guest"]
node_registry["SIL Kit registry"]
node_silkit["SIL Kit networks/topics"]

node_user -->|"provides CLI"| node_entry
node_entry -->|"creates participant"| node_participant
node_participant -->|"connects to"| node_registry
node_entry -->|"parses Ethernet"| node_ethargs
node_ethargs -->|"constructs"| node_ethadapter
node_entry -->|"parses chardev"| node_charadapter
node_qemu -->|"sends frames"| node_ethadapter
node_ethadapter -->|"sends frames"| node_qemu
node_ethadapter -->|"registers handlers"| node_ethcontroller
node_ethcontroller -->|"exchanges frames"| node_silkit
node_qemu -->|"sends characters"| node_charadapter
node_charadapter -->|"sends characters"| node_qemu
node_charadapter -->|"publishes and subscribes"| node_silkit
node_demoapp -->|"creates participant"| node_participant
node_demoapp -->|"creates controller"| node_ethcontroller
node_ethcontroller -->|"delivers frames"| node_demoapp
node_demoapp -->|"processes frames"| node_device
node_device -->|"parses and writes"| node_protocol
node_device -->|"parses and writes"| node_ip4
node_device -->|"sends replies"| node_ethcontroller

click node_entry "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/adapter/SilKitAdapterQemu.cpp"
click node_ethadapter "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp"
click node_ethargs "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp"
click node_protocol "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/Utility/EthernetHeader.hpp"
click node_ip4 "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/Utility/Ip4Header.hpp"
click node_device "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/Device.cpp"
click node_demoapp "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/SilKitDemoEthernetIcmpEchoDevice.cpp"
click node_ethcontroller "https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp"

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_entry,node_participant toneBlue
class node_ethadapter,node_ethargs,node_protocol,node_ip4,node_ethcontroller toneAmber
class node_charadapter toneMint
class node_device,node_demoapp toneRose
class node_user,node_qemu,node_registry,node_silkit toneIndigo
```

## Components

### Adapter runtime

- [CLI entry point](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/adapter/SilKitAdapterQemu.cpp): `adapter/SilKitAdapterQemu.cpp`
- **Participant creation**

### Ethernet transport

- [Ethernet socket adapter](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp): `eth/adapter/EthSocketToEthControllerAdapter.cpp`
- [Ethernet argument parser](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp): `eth/adapter/EthSocketToEthControllerAdapter.cpp`
- [Frame codecs](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/Utility/EthernetHeader.hpp): `eth/Utility/EthernetHeader.hpp`
- [IPv4 codec](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/Utility/Ip4Header.hpp): `eth/Utility/Ip4Header.hpp`
- [Ethernet controller](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/adapter/EthSocketToEthControllerAdapter.cpp): `eth/adapter/EthSocketToEthControllerAdapter.cpp`

### Character transport

- **Socket byte adapter**

### Ethernet demo

- [Echo device](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/Device.cpp): `eth/demos/IcmpEchoDevice/Device.cpp`
- [Echo demo entry](https://github.com/vectorgrp/sil-kit-adapters-qemu/blob/main/eth/demos/IcmpEchoDevice/SilKitDemoEthernetIcmpEchoDevice.cpp): `eth/demos/IcmpEchoDevice/SilKitDemoEthernetIcmpEchoDevice.cpp`

### Other components

- **Operator**
- **QEMU guest**
- **SIL Kit registry**
- **SIL Kit networks/topics**

## Connections

- Operator → CLI entry point: provides CLI
- CLI entry point → Participant creation: creates participant
- Participant creation → SIL Kit registry: connects to
- CLI entry point → Ethernet argument parser: parses Ethernet
- Ethernet argument parser → Ethernet socket adapter: constructs
- CLI entry point → Socket byte adapter: parses chardev
- QEMU guest → Ethernet socket adapter: sends frames
- Ethernet socket adapter → QEMU guest: sends frames
- Ethernet socket adapter → Ethernet controller: registers handlers
- Ethernet controller → SIL Kit networks/topics: exchanges frames
- QEMU guest → Socket byte adapter: sends characters
- Socket byte adapter → QEMU guest: sends characters
- Socket byte adapter → SIL Kit networks/topics: publishes and subscribes
- Echo demo entry → Participant creation: creates participant
- Echo demo entry → Ethernet controller: creates controller
- Ethernet controller → Echo demo entry: delivers frames
- Echo demo entry → Echo device: processes frames
- Echo device → Frame codecs: parses and writes
- Echo device → IPv4 codec: parses and writes
- Echo device → Ethernet controller: sends replies
