@startuml skinparam componentStyle rectangle [isle command line] as isleCommand () "daemon.RPC" as isleDaemonRPC [daemon.Client] as daemonClient frame "isle daemon process" { portin "RPC Socket" as rpcSocket [RPC Server] as rpcServer () "daemon.RPC" as daemonRPC [daemon.Daemon] as daemon [network.Network (A)] as networkA [network.Network (B)] as networkB rpcServer --> rpcSocket : handle rpcServer ..> daemonRPC : dispatch daemon - daemonRPC daemon --> networkA daemon --> networkB } isleCommand ..> isleDaemonRPC : issue commands daemonClient - isleDaemonRPC daemonClient --> rpcSocket package "network A child processes" { [nebula] as networkANebula [garage (alloc 1)] as networkAGarage1 [garage (alloc 2)] as networkAGarage2 [dnsmasq] as networkADNSMasq } networkA --> networkANebula networkA --> networkAGarage1 networkA --> networkAGarage2 networkA --> networkADNSMasq package "network B child processes" { [nebula] as networkBNebula [dnsmasq] as networkBDNSMasq } networkB --> networkBNebula networkB --> networkBDNSMasq @enduml