Advertise VPN flow pressure capability

This commit is contained in:
2026-05-16 13:30:39 +03:00
parent 2bad0e2240
commit c1f8840235
3 changed files with 6 additions and 0 deletions
@@ -3273,6 +3273,7 @@ func heartbeatPayload(cfg config.Config, identity state.Identity, meshState *syn
payload.Capabilities["vpn_fabric_session_transport"] = true
payload.Capabilities["vpn_packet_batch_binary_frames"] = true
payload.Capabilities["vpn_fabric_session_stream_shards"] = true
payload.Capabilities["vpn_fabric_flow_pressure"] = true
if meshState != nil && meshState.VPNFabricEndpointObservations != nil {
payload.Metadata["vpn_fabric_endpoint_health_report"] = meshState.VPNFabricEndpointObservations.Report(observedAt, maxVPNFabricEndpointHealthReportEntries)
} else {
@@ -781,6 +781,9 @@ func TestHeartbeatPayloadIncludesMeshEndpointReport(t *testing.T) {
if payload.Capabilities["vpn_fabric_session_stream_shards"] != true {
t.Fatalf("vpn fabric stream shard capability missing: %+v", payload.Capabilities)
}
if payload.Capabilities["vpn_fabric_flow_pressure"] != true {
t.Fatalf("vpn fabric flow pressure capability missing: %+v", payload.Capabilities)
}
if payload.Capabilities["vpn_fabric_endpoint_health_feedback"] != true {
t.Fatalf("vpn fabric endpoint health capability missing: %+v", payload.Capabilities)
}
@@ -472,6 +472,8 @@ reasons.
Heartbeat VPN fabric transport reports now include a compact
`flow_pressure` summary with level, score, reasons, bulk pressure, route
recovery timing, reason counts, and recommended per-class windows.
Nodes advertise the `vpn_fabric_flow_pressure` capability when that heartbeat
summary is available.
Endpoint ranking treats `capacity_limited` observations as a soft pressure
penalty instead of a hard recent failure, enabling load spreading without
marking the carrier unhealthy.