docs(spec): define the gemodel acceptance target

The F section asked for "gemodel loss within +/-5% of target" without
saying what the target is, and the A.1 table gave ranges only. Spell out
the semantics the kernel implements (and that the veth calibration
confirmed): p is the good-to-bad transition, r the bad-to-good
transition, 1-h the loss chance inside the bad state (the good state
loses nothing), mean loss p/(p+r)*(1-h) per direction. The functional
bullet now names that target and how to measure it (per-direction
counters, round-trip reads 1-(1-L)^2, pre-warm ARP when 1-h=100).

No wire-format or grammar change.
This commit is contained in:
YueGuobin 2026-09-30 17:24:58 +08:00
parent 1db9f171ca
commit c1d0e6ee21
No known key found for this signature in database

View File

@ -115,6 +115,14 @@ tc netem set <if>
Max token count for the command table rises accordingly (recommend 32).
`loss gemodel` semantics (mirrors the kernel, verified against a veth link
with per-direction qdisc counters): `p` is the good→bad state transition
probability (PGAP), `r` the bad→good transition (PGBP), and `1-h` the loss
probability **inside the bad state** (the good state loses nothing). The
steady-state mean loss is `p/(p+r) * (1-h)` per direction — e.g.
`loss gemodel 10 30 100` drops 25 % of the offered packets in each
direction, `loss gemodel 5 45 100` drops 10 %.
### A.2 Netlink encoding notes
* Correlation: loss/dup/reorder use their existing nested structs with the
@ -317,7 +325,11 @@ treatment; an incompatible mode revision renames its token
* **Unit**: per keyword → expected netlink attrs (assert message bytes);
every 204 table row; `bpf_drop` compile-fail path; capabilities string.
* **Functional** (root, veth pair + netns + nsenter ping):
delay+reorder observable (mdev), gemodel loss within ±5% of target,
delay+reorder observable (mdev), gemodel loss within ±5% of
`p/(p+r) * (1-h)` measured **per direction** — a round-trip ping figure
reads `1-(1-L)²` instead, and with `1-h=100` the ARP cache must be
pre-warmed or the neighbour-resolution blackhole during a long burst
inflates the observed loss,
rate within ±10% (measured byte throughput), nth_drop **exact** pattern
(ICMP seq survives 1,2,…,N-1, Nth dropped), quota/window/flow with
crafted senders, `tc reset` idempotent on a clean interface, P5 surface