Files
ziti/router
Paul Lorenz de2ba06f98 Lift link fault handling off the control channel receive goroutine
A fault was handled by spawning a goroutine per message, so a burst of faults
spawned without limit. Handling them inline instead would put the burst on the
receive goroutine, which carries every other default priority message on that
underlay.

- adds a pool for work lifted off a control channel's receive goroutine, kept separate from the rate limiter pool, whose workers park waiting for controller send capacity; sharing it would make receiving depend on the very back-pressure that lifting work off the receive goroutine exists to survive
- hands fault handling to that pool, and falls back to spawning when the pool is full rather than dropping, since a dropped fault leaves a dead link marked up with no repair loop behind it
- counts the fallbacks, so the pool being too small is visible rather than silent
- sizes the queue generously and the worker count modestly: the work arrives in bursts, one per controller reconnect, but is per control channel and there are only ever a handful of those
2026-10-17 22:07:44 -04:00
..
2026-01-28 15:01:35 -05:00
2026-01-28 12:34:10 -05:00
2026-01-28 15:01:35 -05:00
2026-01-28 12:34:10 -05:00
2022-06-29 16:59:46 -04:00

Ziti Router Components

This document describes the key components of the Ziti router architecture.

Core Components

NetworkControllers

Manages connections to Ziti controllers. Handles controller discovery, connection establishment, failover, and maintains heartbeats. Routes control plane messages between the router and controllers.

Maintains the registry of active links to other routers in the mesh. Tracks link states, manages link lifecycle, and provides link lookup capabilities for routing decisions.

Forwarder

The packet forwarding engine that routes data between xgress instances. Delivers payloads to links, xgress instances or edge forwarders.

Faulter

Monitors link health and detects failures. Automatically reports link faults to controllers and triggers link recovery processes when connectivity issues are detected.

Scanner

Continuously scans the forwarder's state to detect and clean up stale forwarding entries. Removes inactive circuits and performs periodic maintenance of the forwarding tables.

Data Plane Components

Xgress Components

Handle ingress and egress traffic for the router:

  • Xgress Listeners: Accept incoming connections from clients and services
  • Xgress Dialers: Establish outbound connections to services
  • Xgress Factories: Create protocol-specific xgress instances (edge, transport, proxy, tunnel)
  • Xgress Registry: Global registry managing all xgress factory types

Xgress Types

  • edge: Handles Ziti SDK connections
  • transport: Router-to-router communication
  • proxy: TCP/UDP proxy connections
  • tunnel: Intercepted traffic from tunneling clients

Metrics

Comprehensive metrics collection covering:

  • Link latency and throughput
  • Xgress connection statistics
  • Pool utilization (link dialer, egress dialer, rate limiter)

All metrics are reported to controllers and available via health check APIs.