# evilprime98/packettrino architecture

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

- Interactive diagram: https://gitdiagram.com/evilprime98/packettrino
- Repository: https://github.com/evilprime98/packettrino

## Overview

PackeTTrino is a browser-based network lab. Users assemble and configure a topology, then use tools or device services to generate traffic; packet processors apply protocol, routing, and firewall behavior, while packet visualization and device tables expose results. The sampled router and routing code establishes packet-processing and forwarding ownership. Several README capabilities are represented by their exact subsystem paths, but their internal call wiring is omitted where source excerpts were unavailable.

Main entry points: [`src/processors/routerProc.js`](https://github.com/evilprime98/packettrino/blob/main/src/processors/routerProc.js) (Router processing), [`src/processors/routingProc.js`](https://github.com/evilprime98/packettrino/blob/main/src/processors/routingProc.js) (Route forwarding), [`src/app.js`](https://github.com/evilprime98/packettrino/blob/main/src/app.js) (Application bootstrap), [`src/components/network_elements`](https://github.com/evilprime98/packettrino/tree/main/src/components/network_elements) (Network devices)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Workspace Interface"]
  node_app["Application bootstrap<br/>[app.js]"]
  node_board["Topology board<br/>[board.js]"]
  node_panel["Device palette<br/>[panel.js]"]
  node_menus["Device configuration"]
end

subgraph group_topology["Network Topology"]
  node_devices["Network devices"]
  node_cables["Network links<br/>[cable.js]"]
end

subgraph group_engine["Packet Engine"]
  node_routerproc["Router processing<br/>[routerProc.js]"]
  node_routeproc["Route forwarding<br/>[routingProc.js]"]
  node_switchproc["Switch processing<br/>[switchProc.js]"]
  node_kernel["Kernel processing<br/>[kernelProc.js]"]
  node_firewall["Firewall rules<br/>[firewall_lib.js]"]
  node_dynamic["Dynamic routing"]
end

subgraph group_protocols["Protocols And Services"]
  node_protocols["Network protocols"]
  node_dhcp["DHCP services<br/>[dhcpd_service.js]"]
  node_dns["DNS services<br/>[named_service.js]"]
  node_web["Apache HTTP<br/>[apache2_service.js]"]
end

subgraph group_tools["User Tools And State"]
  node_terminal["Network terminal<br/>[terminal.js]"]
  node_browser["Web browser<br/>[browser.js]"]
  node_visualize["Packet visualization"]
  node_tables["Device state tables"]
  node_filesystem[("Virtual filesystem<br/>[fileSystem_lib.js]")]
end

node_user(("Network learner"))

node_user -->|"opens simulator"| node_app
node_app -->|"mounts workspace"| node_board
node_app -->|"mounts palette"| node_panel
node_app -->|"mounts controls"| node_menus
node_user -->|"selects device"| node_panel
node_panel -->|"places device"| node_devices
node_user -->|"connects topology"| node_board
node_board -->|"creates links"| node_cables
node_user -->|"configures devices"| node_menus
node_menus -->|"updates settings"| node_devices
node_devices -->|"receives packets"| node_routerproc
node_routerproc -->|"processes local traffic"| node_kernel
node_routerproc -->|"dispatches services"| node_protocols
node_routerproc -->|"filters traffic"| node_firewall
node_routerproc -->|"routes packets"| node_routeproc
node_routeproc -->|"forwards to switch"| node_switchproc
node_routeproc -->|"filters output"| node_firewall
node_switchproc -->|"delivers packets"| node_routerproc
node_user -->|"runs commands"| node_terminal
node_terminal -->|"invokes utilities"| node_protocols
node_user -->|"requests web content"| node_browser
node_browser -->|"sends HTTP requests"| node_web
node_web -->|"reads site content"| node_filesystem
node_protocols -->|"routes responses"| node_routeproc
node_dynamic -->|"updates route tables"| node_devices
node_routeproc -->|"reads routing state"| node_tables
node_routerproc -->|"records packet traffic"| node_visualize
node_visualize -->|"animates packets"| node_user
node_user -->|"inspects state"| node_tables

click node_app "https://github.com/evilprime98/packettrino/blob/main/src/app.js"
click node_board "https://github.com/evilprime98/packettrino/blob/main/src/components/assemblers/board.js"
click node_panel "https://github.com/evilprime98/packettrino/blob/main/src/components/assemblers/panel.js"
click node_menus "https://github.com/evilprime98/packettrino/tree/main/src/components/menus"
click node_devices "https://github.com/evilprime98/packettrino/tree/main/src/components/network_elements"
click node_cables "https://github.com/evilprime98/packettrino/blob/main/src/components/network_elements/cable.js"
click node_routerproc "https://github.com/evilprime98/packettrino/blob/main/src/processors/routerProc.js"
click node_routeproc "https://github.com/evilprime98/packettrino/blob/main/src/processors/routingProc.js"
click node_switchproc "https://github.com/evilprime98/packettrino/blob/main/src/processors/switchProc.js"
click node_kernel "https://github.com/evilprime98/packettrino/blob/main/src/processors/kernelProc.js"
click node_firewall "https://github.com/evilprime98/packettrino/blob/main/src/lib/firewall_lib.js"
click node_dynamic "https://github.com/evilprime98/packettrino/blob/main/src/lib/dynamic_routing_lib.js"
click node_protocols "https://github.com/evilprime98/packettrino/tree/main/src/services"
click node_dhcp "https://github.com/evilprime98/packettrino/blob/main/src/services/dhcpd_service.js"
click node_dns "https://github.com/evilprime98/packettrino/blob/main/src/services/named_service.js"
click node_web "https://github.com/evilprime98/packettrino/blob/main/src/services/apache2_service.js"
click node_terminal "https://github.com/evilprime98/packettrino/blob/main/src/components/network_tools/terminal.js"
click node_browser "https://github.com/evilprime98/packettrino/blob/main/src/components/network_tools/browser.js"
click node_visualize "https://github.com/evilprime98/packettrino/blob/main/src/lib/packet_visualize_lib.js"
click node_tables "https://github.com/evilprime98/packettrino/tree/main/src/components/tables"
click node_filesystem "https://github.com/evilprime98/packettrino/blob/main/src/lib/fileSystem_lib.js"

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_app,node_board,node_panel,node_menus toneBlue
class node_devices,node_cables toneAmber
class node_routerproc,node_routeproc,node_switchproc,node_kernel,node_firewall,node_dynamic toneMint
class node_protocols,node_dhcp,node_dns,node_web toneRose
class node_terminal,node_browser,node_visualize,node_tables,node_filesystem,node_user toneIndigo
```

## Components

### Workspace Interface

- [Application bootstrap](https://github.com/evilprime98/packettrino/blob/main/src/app.js): `src/app.js`
- [Topology board](https://github.com/evilprime98/packettrino/blob/main/src/components/assemblers/board.js): `src/components/assemblers/board.js`
- [Device palette](https://github.com/evilprime98/packettrino/blob/main/src/components/assemblers/panel.js): `src/components/assemblers/panel.js`
- [Device configuration](https://github.com/evilprime98/packettrino/tree/main/src/components/menus): `src/components/menus`

### Network Topology

- [Network devices](https://github.com/evilprime98/packettrino/tree/main/src/components/network_elements): `src/components/network_elements`
- [Network links](https://github.com/evilprime98/packettrino/blob/main/src/components/network_elements/cable.js): `src/components/network_elements/cable.js`

### Packet Engine

- [Router processing](https://github.com/evilprime98/packettrino/blob/main/src/processors/routerProc.js): `src/processors/routerProc.js`
- [Route forwarding](https://github.com/evilprime98/packettrino/blob/main/src/processors/routingProc.js): `src/processors/routingProc.js`
- [Switch processing](https://github.com/evilprime98/packettrino/blob/main/src/processors/switchProc.js): `src/processors/switchProc.js`
- [Kernel processing](https://github.com/evilprime98/packettrino/blob/main/src/processors/kernelProc.js): `src/processors/kernelProc.js`
- [Firewall rules](https://github.com/evilprime98/packettrino/blob/main/src/lib/firewall_lib.js): `src/lib/firewall_lib.js`
- [Dynamic routing](https://github.com/evilprime98/packettrino/blob/main/src/lib/dynamic_routing_lib.js): `src/lib/dynamic_routing_lib.js`

### Protocols And Services

- [Network protocols](https://github.com/evilprime98/packettrino/tree/main/src/services): `src/services`
- [DHCP services](https://github.com/evilprime98/packettrino/blob/main/src/services/dhcpd_service.js): `src/services/dhcpd_service.js`
- [DNS services](https://github.com/evilprime98/packettrino/blob/main/src/services/named_service.js): `src/services/named_service.js`
- [Apache HTTP](https://github.com/evilprime98/packettrino/blob/main/src/services/apache2_service.js): `src/services/apache2_service.js`

### User Tools And State

- [Network terminal](https://github.com/evilprime98/packettrino/blob/main/src/components/network_tools/terminal.js): `src/components/network_tools/terminal.js`
- [Web browser](https://github.com/evilprime98/packettrino/blob/main/src/components/network_tools/browser.js): `src/components/network_tools/browser.js`
- [Packet visualization](https://github.com/evilprime98/packettrino/blob/main/src/lib/packet_visualize_lib.js): `src/lib/packet_visualize_lib.js`
- [Device state tables](https://github.com/evilprime98/packettrino/tree/main/src/components/tables): `src/components/tables`
- [Virtual filesystem](https://github.com/evilprime98/packettrino/blob/main/src/lib/fileSystem_lib.js): `src/lib/fileSystem_lib.js`

### Other components

- **Network learner**

## Connections

- Network learner → Application bootstrap: opens simulator
- Application bootstrap → Topology board: mounts workspace
- Application bootstrap → Device palette: mounts palette
- Application bootstrap → Device configuration: mounts controls
- Network learner → Device palette: selects device
- Device palette → Network devices: places device
- Network learner → Topology board: connects topology
- Topology board → Network links: creates links
- Network learner → Device configuration: configures devices
- Device configuration → Network devices: updates settings
- Network devices → Router processing: receives packets
- Router processing → Kernel processing: processes local traffic
- Router processing → Network protocols: dispatches services
- Router processing → Firewall rules: filters traffic
- Router processing → Route forwarding: routes packets
- Route forwarding → Switch processing: forwards to switch
- Route forwarding → Firewall rules: filters output
- Switch processing → Router processing: delivers packets
- Network learner → Network terminal: runs commands
- Network terminal → Network protocols: invokes utilities
- Network learner → Web browser: requests web content
- Web browser → Apache HTTP: sends HTTP requests
- Apache HTTP → Virtual filesystem: reads site content
- Network protocols → Route forwarding: routes responses
- Dynamic routing → Network devices: updates route tables
- Route forwarding → Device state tables: reads routing state
- Router processing → Packet visualization: records packet traffic
- Packet visualization → Network learner: animates packets
- Network learner → Device state tables: inspects state
