mirror of
https://github.com/YuanDevTeam/Vole.git
synced 2026-11-07 00:05:27 +00:00
Add provider generations, automatic proxy groups, richer routing rules and live Controller configuration. Extend encrypted DNS, persistent fake-IP mappings and GeoData support. Add HTTP CONNECT, WireGuard, TrustTunnel, Mieru and MASQUE outbounds; expand TLS/ECH and transport compatibility. Add separately configured H1/H2 MITM and URL, header and body rewriting. Improve UDP association reuse, TCP delivery and H2/H3 scheduling while keeping memory bounded. Add Linux TUN route and system DNS management, MPTCP and TCP Brutal. Replace vendored dependencies with upstream libraries, update and pin Boring 5.4.0, and fix cross-platform builds and CI feature checks.
987 lines
33 KiB
JSON
987 lines
33 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"kind": "runtime-limit-registry",
|
|
"scope": "FOUNDATIONS shared foundations through INTEGRATION integration; per-object bounds, not global admission caps",
|
|
"limits": [
|
|
{
|
|
"id": "tuic-fin-grace",
|
|
"value": 5,
|
|
"unit": "seconds",
|
|
"owner": "limits::TUIC_FIN_GRACE_SECONDS",
|
|
"saturation": "retain TCP send ownership until FIN acknowledgement or bounded grace before retiring the physical connection",
|
|
"cancellation": "node Stop cancels and joins the owned FIN waiter without waiting out the grace",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-quic-payload",
|
|
"value": 1400,
|
|
"unit": "bytes",
|
|
"owner": "limits::TUIC_QUIC_PAYLOAD",
|
|
"saturation": "cap endpoint payload at path budget; reject either direction below 1200",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-control-readers",
|
|
"value": 32,
|
|
"unit": "streams",
|
|
"owner": "limits::TUIC_CONTROL_READERS",
|
|
"saturation": "limit active control decoders independently of fixed incoming QUIC credit; expire admitted partial parsers after five seconds",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-send-window",
|
|
"value": 1048576,
|
|
"unit": "bytes",
|
|
"owner": "limits::TUIC_SEND_WINDOW",
|
|
"saturation": "bound retained unacknowledged send bytes per physical connection; receive credit follows configured initial/max",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-datagram-buffer",
|
|
"value": 262144,
|
|
"unit": "bytes-per-direction",
|
|
"owner": "limits::TUIC_DATAGRAM_BUFFER",
|
|
"saturation": "bounded Quinn DATAGRAM receive queue; send_datagram_wait applies backpressure",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-udp-queue",
|
|
"value": 32,
|
|
"unit": "packets",
|
|
"owner": "limits::TUIC_UDP_QUEUE",
|
|
"saturation": "drop complete overflow packets without blocking sibling traffic",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-pending-packets",
|
|
"value": 64,
|
|
"unit": "packets-per-association",
|
|
"owner": "limits::TUIC_PENDING_PACKETS",
|
|
"saturation": "drop new partial packets when all pending slots are occupied",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-pending-bytes",
|
|
"value": 262144,
|
|
"unit": "payload-bytes-per-association",
|
|
"owner": "limits::TUIC_PENDING_BYTES",
|
|
"saturation": "drop partial packet whose fragments exceed owner or caller budget",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tuic-fragment-ttl",
|
|
"value": 5,
|
|
"unit": "seconds",
|
|
"owner": "limits::TUIC_FRAGMENT_TTL_SECONDS",
|
|
"saturation": "discard expired incomplete packets without retaining completed packet IDs",
|
|
"cancellation": "node Stop cancels and joins all owned QUIC, parser, heartbeat and upstream tasks",
|
|
"boundary_cases": [
|
|
"TUIC-MEMORY"
|
|
]
|
|
},
|
|
{
|
|
"id": "shadowsocks-write-chunk",
|
|
"value": 16384,
|
|
"unit": "retained-plaintext-bytes-per-stream",
|
|
"owner": "limits::SHADOWSOCKS_WRITE_CHUNK",
|
|
"saturation": "partial write then backpressure while the bounded owned chunk drains",
|
|
"cancellation": "stream drop releases plaintext and codec; flush and shutdown drain the exact accepted chunk",
|
|
"boundary_cases": [
|
|
"INTEGRATION-DEBUG",
|
|
"INTEGRATION-RELEASE"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-custom-header-bytes",
|
|
"value": 8192,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_CUSTOM_HEADER_BYTES",
|
|
"saturation": "reject aggregate custom header overflow before IO",
|
|
"cancellation": "reject before creating runtime IO or tasks",
|
|
"boundary_cases": [
|
|
"XHTTP-CFG"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-custom-headers",
|
|
"value": 100,
|
|
"unit": "headers",
|
|
"owner": "limits::XHTTP_CUSTOM_HEADERS",
|
|
"saturation": "reject custom header count overflow before IO",
|
|
"cancellation": "reject before creating runtime IO or tasks",
|
|
"boundary_cases": [
|
|
"XHTTP-CFG"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-padding",
|
|
"value": 4096,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_PADDING_BYTES",
|
|
"saturation": "reject configured padding overflow before IO",
|
|
"cancellation": "reject before creating runtime IO or tasks",
|
|
"boundary_cases": [
|
|
"XHTTP-CFG"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-post",
|
|
"value": 16777216,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_POST_BYTES",
|
|
"saturation": "reject post size overflow before IO; bound retained upload",
|
|
"cancellation": "reject before creating runtime IO or tasks",
|
|
"boundary_cases": [
|
|
"XHTTP-CFG"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-packet-batch",
|
|
"value": 65536,
|
|
"unit": "bytes-per-batch",
|
|
"owner": "limits::XHTTP_PACKET_BATCH_BYTES",
|
|
"saturation": "H1/H2 backpressure one batch including the in-flight POST; never allocate the configured POST maximum",
|
|
"cancellation": "logical drop cancels the timer/upload; node Stop joins the owned driver",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-packet-batch",
|
|
"value": 131072,
|
|
"unit": "bytes-per-batch",
|
|
"owner": "limits::XHTTP_H3_PACKET_BATCH_BYTES",
|
|
"saturation": "H3 backpressure one batch including the in-flight POST; use the smaller sampled POST limit without a second batch",
|
|
"cancellation": "logical drop cancels the timer/upload; node Stop joins the owned driver",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-request-bytes",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_REQUEST_BYTES",
|
|
"saturation": "reject oversized constructed request including generated metadata",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-request-headers",
|
|
"value": 128,
|
|
"unit": "headers",
|
|
"owner": "limits::XHTTP_REQUEST_HEADERS",
|
|
"saturation": "reject excess constructed headers including payload chunks",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-idle-entries",
|
|
"value": 64,
|
|
"unit": "entries",
|
|
"owner": "limits::XHTTP_IDLE_ENTRIES",
|
|
"saturation": "retire excess idle transports without imposing active business quota",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-idle-h1",
|
|
"value": 4,
|
|
"unit": "connections-per-entry",
|
|
"owner": "limits::XHTTP_IDLE_H1_CONNECTIONS",
|
|
"saturation": "retire excess idle H1 connections; active requests keep ownership",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-body-queue",
|
|
"value": 2,
|
|
"unit": "chunks",
|
|
"owner": "limits::XHTTP_BODY_QUEUE",
|
|
"saturation": "backpressure owned H1 commands and body chunks",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-body-chunk",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_BODY_CHUNK",
|
|
"saturation": "split streaming writes; a packet-up body uses xhttp-packet-batch for H1/H2 or xhttp-h3-packet-batch for H3",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-uni-streams",
|
|
"value": 8,
|
|
"unit": "streams-per-connection",
|
|
"owner": "limits::XHTTP_H3_UNI_STREAMS",
|
|
"saturation": "QUIC flow control bounds remote control streams",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-stream-window",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_H3_STREAM_WINDOW",
|
|
"saturation": "QUIC receive flow control backpressures peer per stream",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-connection-window",
|
|
"value": 131072,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_H3_CONNECTION_WINDOW",
|
|
"saturation": "QUIC aggregate receive flow control",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-send-window",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_H3_SEND_WINDOW",
|
|
"saturation": "QUIC send window backpressures pending writes",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-h3-udp-send-window",
|
|
"value": 196608,
|
|
"unit": "bytes",
|
|
"owner": "limits::XHTTP_H3_UDP_SEND_WINDOW",
|
|
"saturation": "qualified physical starts64KiB; successful local mux UDP metadata flush raises shared retained-write admission192KiB once",
|
|
"cancellation": "failed/cancelled metadata does not raise; Weak does not own native lifecycle; original Stop joins drivers",
|
|
"boundary_cases": ["XHTTP-UNIT"]
|
|
},
|
|
{
|
|
"id": "sing-mux-idle",
|
|
"value": 16,
|
|
"unit": "connections",
|
|
"owner": "limits::SING_MUX_IDLE_CONNECTIONS",
|
|
"saturation": "retire excess idle connections; no active business quota",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "sing-mux-command-queue",
|
|
"value": 16,
|
|
"unit": "commands",
|
|
"owner": "limits::SING_MUX_COMMAND_QUEUE",
|
|
"saturation": "backpressure smux frames and yamux opens",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "sing-mux-chunk",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "limits::SING_MUX_CHUNK",
|
|
"saturation": "split frame writes at retained chunk boundary",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "smux-receive-queue",
|
|
"value": 4,
|
|
"unit": "frames-per-stream",
|
|
"owner": "limits::SMUX_RECEIVE_QUEUE",
|
|
"saturation": "backpressure reader; each wire frame is bounded by its u16 length",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "yamux-admissions",
|
|
"value": 64,
|
|
"unit": "lifetime-streams-per-physical-connection",
|
|
"owner": "limits::YAMUX_CONNECTION_ADMISSIONS",
|
|
"saturation": "retire before library stream saturation; new transport serves new streams while old streams remain live",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "yamux-window",
|
|
"value": 16777216,
|
|
"unit": "bytes",
|
|
"owner": "limits::YAMUX_CONNECTION_WINDOW",
|
|
"saturation": "library receive credit window bounds physical connection retention",
|
|
"cancellation": "runtime Stop cancels and joins node-owned drivers; drops queues and retained IO",
|
|
"boundary_cases": [
|
|
"XHTTP-UNIT"
|
|
]
|
|
},
|
|
{
|
|
"id": "trojan-udp-payload",
|
|
"value": 8192,
|
|
"unit": "bytes",
|
|
"owner": "outbound::trojan::MAX_DATAGRAM_PAYLOAD",
|
|
"saturation": "reject oversize send before write; invalid receive closes the stream; bounded caller-budget drops never truncate",
|
|
"cancellation": "drop partial receive buffer and poison any partially written frame on cancelled send",
|
|
"boundary_cases": [
|
|
"TROJAN-CODEC",
|
|
"TROJAN-M-TCP-UDP-ISOLATION",
|
|
"TROJAN-M-WS-UDP-ISOLATION",
|
|
"TROJAN-M-GRPC-UDP-ISOLATION"
|
|
]
|
|
},
|
|
{
|
|
"id": "config-bytes",
|
|
"value": 8388608,
|
|
"unit": "bytes",
|
|
"owner": "config::MAX_CONFIG_BYTES",
|
|
"saturation": "reject oversized YAML",
|
|
"cancellation": "parse owns no background work",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-SCHEMA"
|
|
]
|
|
},
|
|
{
|
|
"id": "establish-timeout",
|
|
"value": 10000,
|
|
"unit": "milliseconds",
|
|
"owner": "outbound::DEFAULT_ESTABLISH_TIMEOUT",
|
|
"saturation": "fail entire setup at absolute deadline",
|
|
"cancellation": "drop pending setup at cancellation",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-RESOLUTION",
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "tls-buffer",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::tls_buffer_limit",
|
|
"saturation": "backpressure TLS records",
|
|
"cancellation": "drop owned IO on Stop",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-SECURITY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tls-close",
|
|
"value": 5000,
|
|
"unit": "milliseconds",
|
|
"owner": "security::CLOSE_NOTIFY_TIMEOUT",
|
|
"saturation": "fail bounded close_notify flush",
|
|
"cancellation": "cancel flush and release IO",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-SECURITY"
|
|
]
|
|
},
|
|
{
|
|
"id": "tls-resumption",
|
|
"value": 4,
|
|
"unit": "sessions",
|
|
"owner": "security::TLS_RESUMPTION_SESSION_BUDGET",
|
|
"saturation": "evict retained sessions within isolated identity cache",
|
|
"cancellation": "drop cache owner",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-SECURITY"
|
|
]
|
|
},
|
|
{
|
|
"id": "stream-chunk",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "transport::STREAM_CHUNK_BYTES",
|
|
"saturation": "split writes at chunk boundary",
|
|
"cancellation": "drop queued chunk on cancellation",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "stream-buffer",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "transport::STREAM_BUFFER_BYTES",
|
|
"saturation": "backpressure writes; reject oversized WS/gRPC message",
|
|
"cancellation": "Stop owns driver join",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "http-head",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "transport::HTTP_HEAD_BYTES",
|
|
"saturation": "reject oversized HTTP header",
|
|
"cancellation": "drop parser and supplied IO",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "http-headers",
|
|
"value": 100,
|
|
"unit": "headers",
|
|
"owner": "transport::HTTP_HEADER_COUNT",
|
|
"saturation": "reject excess fields",
|
|
"cancellation": "drop parser and supplied IO",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "ws-early-data",
|
|
"value": 11904,
|
|
"unit": "bytes",
|
|
"owner": "transport::MAX_EARLY_DATA_BYTES",
|
|
"saturation": "cap initial bytes by the actual HTTP head budget and this maximum; put excess bytes in data frames",
|
|
"cancellation": "no separate task",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "xudp-metadata",
|
|
"value": 512,
|
|
"unit": "bytes",
|
|
"owner": "xudp::MAX_METADATA_LENGTH",
|
|
"saturation": "reject oversized metadata before body allocation",
|
|
"cancellation": "drop persistent partial frame on association close",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-XUDP"
|
|
]
|
|
},
|
|
{
|
|
"id": "io-poll",
|
|
"value": 32,
|
|
"unit": "iterations",
|
|
"owner": "limits::IO_POLL_BUDGET",
|
|
"saturation": "yield before processing another control/discard burst",
|
|
"cancellation": "cooperative cancellation between polls",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-STREAM",
|
|
"FOUNDATIONS-DATAGRAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "quic-queue",
|
|
"value": 32,
|
|
"unit": "datagrams-per-direction",
|
|
"owner": "transport::quic::QUEUE_LIMIT",
|
|
"saturation": "WouldBlock TX; pause RX, plus one in-flight send",
|
|
"cancellation": "cancel and join owner; clear queues",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-QUIC"
|
|
]
|
|
},
|
|
{
|
|
"id": "quic-close",
|
|
"value": 1000,
|
|
"unit": "milliseconds",
|
|
"owner": "transport::quic::CLOSE_TIMEOUT",
|
|
"saturation": "time out upstream close",
|
|
"cancellation": "drop transport after bounded close and join task",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-QUIC"
|
|
]
|
|
},
|
|
{
|
|
"id": "quic-minimum",
|
|
"value": 1200,
|
|
"unit": "bytes",
|
|
"owner": "dispatch::QUIC_MIN_PAYLOAD_BYTES",
|
|
"saturation": "reject insufficient directional path budget before QUIC",
|
|
"cancellation": "no QUIC task created on rejection",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-QUIC",
|
|
"FOUNDATIONS-DATAGRAM"
|
|
]
|
|
},
|
|
{
|
|
"id": "resolution-depth",
|
|
"value": 32,
|
|
"unit": "nested-lookups",
|
|
"owner": "dns::resolution::MAX_RESOLUTION_DEPTH",
|
|
"saturation": "reject dependency recursion/depth, no system fallback",
|
|
"cancellation": "shared deadline and runtime cancellation",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-RESOLUTION"
|
|
]
|
|
},
|
|
{
|
|
"id": "packet-queue",
|
|
"value": 256,
|
|
"unit": "items",
|
|
"owner": "ResourceLimits::packet_queue_capacity",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "event-queue",
|
|
"value": 128,
|
|
"unit": "items",
|
|
"owner": "ResourceLimits::event_queue_capacity",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "udp-payload",
|
|
"value": 65535,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::max_datagram_size",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "tun-packet",
|
|
"value": 1500,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::tun_max_datagram_size",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "tcp-buffer",
|
|
"value": 32768,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::tcp_buffer_per_direction",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "dns-cache",
|
|
"value": 256,
|
|
"unit": "entries",
|
|
"owner": "ResourceLimits::dns_address_cache_entries",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "dns-hints",
|
|
"value": 256,
|
|
"unit": "entries",
|
|
"owner": "ResourceLimits::dns_redir_host_entries",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "tun-udp-association",
|
|
"value": 64,
|
|
"unit": "items-per-association",
|
|
"owner": "ResourceLimits::tun_udp_association_queue_capacity",
|
|
"saturation": "drop only the current request without blocking other sources or refreshing activity",
|
|
"cancellation": "association child cancellation and runtime Stop join all owned tasks",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "tun-udp-response",
|
|
"value": 256,
|
|
"unit": "items",
|
|
"owner": "ResourceLimits::tun_udp_response_queue_capacity",
|
|
"saturation": "one pending response per source pauses that association until writeback capacity; cancellation discards pending data",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "tun-dns-response",
|
|
"value": 128,
|
|
"unit": "items",
|
|
"owner": "ResourceLimits::tun_dns_response_queue_capacity",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-send",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::xhttp_send_buffer_size",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "xhttp-upload",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "ResourceLimits::xhttp_upload_chunk_size",
|
|
"saturation": "retain existing per-object queue/cache/buffer policy in docs/runtime-resource-policy.md",
|
|
"cancellation": "existing runtime-owned cancellation and Stop barrier",
|
|
"boundary_cases": [
|
|
"FOUNDATIONS-REGRESSION"
|
|
]
|
|
},
|
|
{
|
|
"id": "vmess-body-wire",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "outbound::vmess::MAX_BODY_WIRE",
|
|
"saturation": "reject malformed or oversized chunk before payload allocation",
|
|
"cancellation": "drop owned stream; never reuse nonce after a partial send",
|
|
"boundary_cases": [
|
|
"VMESS-CODEC",
|
|
"VMESS-RELEASE"
|
|
]
|
|
},
|
|
{
|
|
"id": "vmess-write-chunk",
|
|
"value": 4096,
|
|
"unit": "bytes",
|
|
"owner": "outbound::vmess::WRITE_CHUNK",
|
|
"saturation": "bounded TCP segmentation with backpressure",
|
|
"cancellation": "cancel owned stream and join driver",
|
|
"boundary_cases": [
|
|
"VMESS-CODEC",
|
|
"VMESS-PUBLIC-TCP-PLAIN-BASE"
|
|
]
|
|
},
|
|
{
|
|
"id": "vmess-datagram",
|
|
"value": 15000,
|
|
"unit": "bytes",
|
|
"owner": "outbound::vmess::MAX_PACKET_BYTES",
|
|
"saturation": "reject max+1 without partial delivery; intersect the caller budget",
|
|
"cancellation": "close association and release upstream IO",
|
|
"boundary_cases": [
|
|
"VMESS-CODEC",
|
|
"VMESS-PUBLIC-TCP-UDP-ISOLATION"
|
|
]
|
|
},
|
|
{
|
|
"id": "vless-udp-frame",
|
|
"value": 65537,
|
|
"unit": "bytes",
|
|
"owner": "limits::VLESS_UDP_FRAME_BYTES",
|
|
"saturation": "reject length beyond u16 payload and prefix",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-CODEC"
|
|
]
|
|
},
|
|
{
|
|
"id": "vision-content",
|
|
"value": 8171,
|
|
"unit": "bytes",
|
|
"owner": "limits::VISION_CONTENT_BYTES",
|
|
"saturation": "split writes; retain one bounded frame",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-VISION"
|
|
]
|
|
},
|
|
{
|
|
"id": "vision-tls-record",
|
|
"value": 18432,
|
|
"unit": "bytes",
|
|
"owner": "limits::VISION_TLS_RECORD_BYTES",
|
|
"saturation": "fail malformed outer TLS; stop inner classification",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-VISION"
|
|
]
|
|
},
|
|
{
|
|
"id": "vision-hello",
|
|
"value": 65536,
|
|
"unit": "bytes",
|
|
"owner": "limits::VISION_HELLO_BYTES",
|
|
"saturation": "disable inner hello classification at cap",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-VISION"
|
|
]
|
|
},
|
|
{
|
|
"id": "grpc-idle",
|
|
"value": 4,
|
|
"unit": "connections",
|
|
"owner": "limits::GRPC_IDLE_CONNECTIONS",
|
|
"saturation": "retire excess idle; no active business cap",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-TRANSPORT"
|
|
]
|
|
},
|
|
{
|
|
"id": "grpc-ping-timeout",
|
|
"value": 15,
|
|
"unit": "seconds",
|
|
"owner": "limits::GRPC_PING_TIMEOUT_SECONDS",
|
|
"saturation": "close a physical transport if its PING is unanswered",
|
|
"cancellation": "drop owned buffers and join cancelled node drivers",
|
|
"boundary_cases": [
|
|
"VLESS-TRANSPORT"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-udp-payload",
|
|
"value": 4096,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_UDP_PAYLOAD",
|
|
"saturation": "reject max+1 before sending a business fragment",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-udp-queue",
|
|
"value": 32,
|
|
"unit": "packets-per-association",
|
|
"owner": "limits::HY2_UDP_QUEUE",
|
|
"saturation": "drop full inbound queue without blocking sibling associations",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-submission-queue",
|
|
"value": 32,
|
|
"unit": "messages-per-connection",
|
|
"owner": "limits::HY2_SUBMISSION_QUEUE",
|
|
"saturation": "wait before reserving a Packet ID or encoding fragments",
|
|
"cancellation": "cancel pending admission; connection Stop drops queued messages and joins its existing owner",
|
|
"boundary_cases": [
|
|
"INTEGRATION-ADAPTER"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-auth-sessions",
|
|
"value": 2,
|
|
"unit": "current-connections-per-node",
|
|
"owner": "limits::HY2_AUTH_SESSIONS",
|
|
"saturation": "reuse the source-selected slot; replace only a closed session",
|
|
"cancellation": "close admission and cancel/join every authenticated session",
|
|
"boundary_cases": [
|
|
"INTEGRATION-ADAPTER"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-pending-packets",
|
|
"value": 64,
|
|
"unit": "partial-packets-per-connection",
|
|
"owner": "limits::HY2_PENDING_PACKETS",
|
|
"saturation": "evict oldest incomplete packet to admit new fragments; completed IDs are immediately released",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-pending-bytes",
|
|
"value": 262144,
|
|
"unit": "bytes-per-connection",
|
|
"owner": "limits::HY2_PENDING_BYTES",
|
|
"saturation": "reject fragment retaining overflow",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-fragment-ttl",
|
|
"value": 5,
|
|
"unit": "seconds",
|
|
"owner": "limits::HY2_FRAGMENT_TTL_SECONDS",
|
|
"saturation": "expire missing fragments on the owned cleanup timer",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-path-retire",
|
|
"value": 1,
|
|
"unit": "seconds",
|
|
"owner": "limits::HY2_PATH_RETIRE_SECONDS",
|
|
"saturation": "cancel and join the old path before another hop",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-quic-payload",
|
|
"value": 1400,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_QUIC_PAYLOAD",
|
|
"saturation": "intersect controlled path payload budget including obfs overhead",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-uni-streams",
|
|
"value": 8,
|
|
"unit": "streams-per-connection",
|
|
"owner": "limits::HY2_UNI_STREAMS",
|
|
"saturation": "QUIC flow control bounds remote control streams",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-send-window",
|
|
"value": 1048576,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_SEND_WINDOW",
|
|
"saturation": "bound retained unacknowledged send bytes per physical connection; receive credit follows configured initial/max",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-datagram-send-buffer",
|
|
"value": 4194304,
|
|
"unit": "bytes-per-node",
|
|
"owner": "limits::HY2_DATAGRAM_SEND_BUFFER",
|
|
"saturation": "bound retained outgoing QUIC datagrams; sends wait for capacity",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-datagram-receive-buffer",
|
|
"value": 2097152,
|
|
"unit": "bytes-per-node",
|
|
"owner": "limits::HY2_DATAGRAM_RECEIVE_BUFFER",
|
|
"saturation": "bound retained incoming QUIC datagrams; Quinn drops old frames when full",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-auth-headers",
|
|
"value": 16384,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_AUTH_HEADERS",
|
|
"saturation": "reject excess HTTP3 response headers",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-response-message",
|
|
"value": 2048,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_RESPONSE_MESSAGE",
|
|
"saturation": "reject oversized TCP response message before allocation",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
},
|
|
{
|
|
"id": "hy2-response-padding",
|
|
"value": 4096,
|
|
"unit": "bytes",
|
|
"owner": "limits::HY2_RESPONSE_PADDING",
|
|
"saturation": "reject oversized TCP response padding before allocation",
|
|
"cancellation": "owned logical close or physical session Stop releases retained state and joins drivers",
|
|
"boundary_cases": [
|
|
"HYSTERIA2-UNIT",
|
|
"HYSTERIA2-OWNED"
|
|
]
|
|
}
|
|
]
|
|
}
|