# liulilittle/openppp2 architecture

> Architecture diagram of the GitHub repository liulilittle/openppp2, 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/liulilittle/openppp2
- Repository: https://github.com/liulilittle/openppp2

## Overview

OPENPPP2 is primarily a C++ network runtime, with separate companion applications for desktop and mobile platforms and a Go-based Guardian manager. The documented native workflow is process startup, argument/configuration preparation, mode selection, then client, server, or proxy runtime. The graph emphasizes that core and its network stages; source excerpts are partial, so uncertain wiring and companion-app interactions are omitted.

Main entry points: [`ppp/app/client/VEthernetNetworkSwitcher.cpp`](https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/VEthernetNetworkSwitcher.cpp) (Virtual network), [`ppp/app/PppApplication.cpp`](https://github.com/liulilittle/openppp2/blob/main/ppp/app/PppApplication.cpp) (Application lifecycle), [`ppp/app/ApplicationMode.cpp`](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationMode.cpp) (Mode selection), [`ppp/app/ApplicationClientBootstrap.cpp`](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationClientBootstrap.cpp) (Client runtime)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and configuration"]
  node_main["Native entry<br/>[main.cpp]"]
  node_application["Application lifecycle<br/>[PppApplication.cpp]"]
  node_config["Argument preparation"]
  node_mode["Mode selection"]
end

subgraph group_runtime["Native runtime"]
  node_client["Client runtime"]
  node_server["Server runtime"]
  node_network["Network setup"]
end

subgraph group_network["Network services"]
  node_switcher["Virtual network"]
  node_dns["DNS handling<br/>[DnsController.cpp]"]
  node_datagrams["Datagram routing"]
  node_tcpip["TCP/IP stack<br/>[netstack.cpp]"]
  node_p2p["Peer connectivity"]
end

subgraph group_platform["Platform integration"]
  node_assigned["Address management"]
end

node_user(("Operator"))
node_host(("Host networking"))
node_peers(("Remote peers"))

node_user -->|"invokes"| node_main
node_main -->|"starts"| node_application
node_application -->|"prepares arguments"| node_config
node_application -->|"runs prepared app"| node_mode
node_mode -->|"starts client"| node_client
node_mode -->|"starts server"| node_server
node_client -->|"starts networking"| node_network
node_server -->|"starts networking"| node_network
node_network -->|"configures"| node_switcher
node_switcher -->|"handles DNS"| node_dns
node_switcher -->|"routes datagrams"| node_datagrams
node_switcher -->|"uses stack"| node_tcpip
node_client -->|"manages offers"| node_p2p
node_switcher -->|"applies addresses"| node_assigned
node_assigned -->|"configures interfaces"| node_host
node_p2p -->|"authenticates control"| node_peers

click node_main "https://github.com/liulilittle/openppp2/blob/main/main.cpp"
click node_application "https://github.com/liulilittle/openppp2/blob/main/ppp/app/PppApplication.cpp"
click node_config "https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationConfig.cpp"
click node_mode "https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationMode.cpp"
click node_client "https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationClientBootstrap.cpp"
click node_server "https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationServerBootstrap.cpp"
click node_network "https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationNetwork.cpp"
click node_switcher "https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/VEthernetNetworkSwitcher.cpp"
click node_dns "https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/dns/DnsController.cpp"
click node_datagrams "https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/udp/ClientDatagramPortManager.cpp"
click node_tcpip "https://github.com/liulilittle/openppp2/blob/main/common/libtcpip/netstack.cpp"
click node_p2p "https://github.com/liulilittle/openppp2/blob/main/ppp/p2p/P2PClientOfferSession.cpp"
click node_assigned "https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/AssignedAddressManager.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_main,node_application,node_config,node_mode toneBlue
class node_client,node_server,node_network toneAmber
class node_switcher,node_dns,node_datagrams,node_tcpip,node_p2p toneMint
class node_assigned toneRose
class node_user,node_host,node_peers toneIndigo
```

## Components

### Startup and configuration

- [Native entry](https://github.com/liulilittle/openppp2/blob/main/main.cpp): `main.cpp`
- [Application lifecycle](https://github.com/liulilittle/openppp2/blob/main/ppp/app/PppApplication.cpp): `ppp/app/PppApplication.cpp`
- [Argument preparation](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationConfig.cpp): `ppp/app/ApplicationConfig.cpp`
- [Mode selection](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationMode.cpp): `ppp/app/ApplicationMode.cpp`

### Native runtime

- [Client runtime](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationClientBootstrap.cpp): `ppp/app/ApplicationClientBootstrap.cpp`
- [Server runtime](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationServerBootstrap.cpp): `ppp/app/ApplicationServerBootstrap.cpp`
- [Network setup](https://github.com/liulilittle/openppp2/blob/main/ppp/app/ApplicationNetwork.cpp): `ppp/app/ApplicationNetwork.cpp`

### Network services

- [Virtual network](https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/VEthernetNetworkSwitcher.cpp): `ppp/app/client/VEthernetNetworkSwitcher.cpp`
- [DNS handling](https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/dns/DnsController.cpp): `ppp/app/client/dns/DnsController.cpp`
- [Datagram routing](https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/udp/ClientDatagramPortManager.cpp): `ppp/app/client/udp/ClientDatagramPortManager.cpp`
- [TCP/IP stack](https://github.com/liulilittle/openppp2/blob/main/common/libtcpip/netstack.cpp): `common/libtcpip/netstack.cpp`
- [Peer connectivity](https://github.com/liulilittle/openppp2/blob/main/ppp/p2p/P2PClientOfferSession.cpp): `ppp/p2p/P2PClientOfferSession.cpp`

### Platform integration

- [Address management](https://github.com/liulilittle/openppp2/blob/main/ppp/app/client/AssignedAddressManager.cpp): `ppp/app/client/AssignedAddressManager.cpp`

### Other components

- **Operator**
- **Host networking**
- **Remote peers**

## Connections

- Operator → Native entry: invokes
- Native entry → Application lifecycle: starts
- Application lifecycle → Argument preparation: prepares arguments
- Application lifecycle → Mode selection: runs prepared app
- Mode selection → Client runtime: starts client
- Mode selection → Server runtime: starts server
- Client runtime → Network setup: starts networking
- Server runtime → Network setup: starts networking
- Network setup → Virtual network: configures
- Virtual network → DNS handling: handles DNS
- Virtual network → Datagram routing: routes datagrams
- Virtual network → TCP/IP stack: uses stack
- Client runtime → Peer connectivity: manages offers
- Virtual network → Address management: applies addresses
- Address management → Host networking: configures interfaces
- Peer connectivity → Remote peers: authenticates control
