You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,9 +25,10 @@ The current MVP implements:
25
25
- TLS transports `l1` and `ln` (UAC or UAS; same codes as for TCP, plus TLS files as needed)
26
26
- Global and per-user variable scopes
27
27
- SIPp-style auth credentials via `-au` / `-ap` for challenged `401` / `407` request retries, inline `[authentication username=... password=...]`, and server-side `verifyauth`
28
+
- Optional SIP identity for built-in UAC / `invite_media`: `-sip_from` (From before `;tag=`), `-sip_pai`, `-sip_provider`, repeatable `-sip_extra_header` (see `docs/compatibility.md``[trunk_*]` keywords)
28
29
- Concurrent call generation with rate limiting
29
30
- Interactive terminal UI via `gossipper tui` / `gossipper -interactive` for launch presets and live runtime control
30
-
- Basic statistics and JSON summary export
31
+
- Basic statistics and JSON summary export (`-summary_json`), optional standalone **HTML** report (`-summary_html` or `gossipper report-html -in … -out …`; see `docs/summary-json.md`)
31
32
- Named per-step RTD timers via `start_rtd` / `rtd`, aggregated into summary JSON
32
33
- XML `counter` / `display` attributes aggregated into summary JSON as execution counts
33
34
- Exported stats now include failure-class counters such as `timeout`, `unexpected_sip`, `transport_error`, `parse_error`, `scenario_error`, and `cancelled`
Copy file name to clipboardExpand all lines: docs/compatibility.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -117,6 +117,10 @@ into no-ops or empty strings.
117
117
|`[$n]` / `[$name]`| supported | Action and string variables |
118
118
|`[dynamic_id]`| supported | Atomic per-message counter with `INT32` wraparound to mirror SIPp; supports `+/-offset`|
119
119
|`[routes]`| supported | When a `recv` command uses `rrs="true"`, captured `Record-Route` headers are replayed as `Route` headers (reverse order) in subsequent rendered messages |
120
+
|`[trunk_from]`| supported | Built-in UAC / `invite_media`: value before `;tag=` in `From`; default `gossip <sip:gossip@local_bind:port>`; CLI `-sip_from`|
121
+
|`[trunk_pai]`| supported | Optional full header line `P-Asserted-Identity: …` plus CRLF; empty when `-sip_pai` unset |
122
+
|`[trunk_provider]`| supported | Optional `X-provider: …` plus CRLF; empty when `-sip_provider` unset |
123
+
|`[trunk_extra]`| supported | Optional extra headers after `Via` (each line ends with CRLF); repeatable CLI `-sip_extra_header`|
120
124
|`[clock_tick]`| supported | Milliseconds elapsed since engine start; supports `+/-offset`|
121
125
|`[sipp_version]`| supported | Renders runtime version string (defaults to `Gossipper` when not explicitly provided) |
122
126
|`[tdmmap]`| partial | Stub: renders `0.0.0/0`; `-tdmmap` CLI flag is not parsed and per-call slot allocation is deferred |
The `schema_version` field is set to `gossipper_summary_v1` when writing the file via `-summary_json`. Consumers should treat unknown schema versions as incompatible.
6
+
7
+
## Tool version
8
+
9
+
`tool_version` is populated from the running binary (same string as `gossipper -version` short line).
10
+
11
+
## Media QoS (RTCP)
12
+
13
+
When RTCP Receiver Reports are received during RTP sessions, the summary may include:
14
+
15
+
-`media.rtcp_reception_reports` — count of RFC 3550 reception report blocks.
16
+
-`media.rtcp_max_fraction_lost` — maximum observed loss fraction in `0..1`.
17
+
-`media.rtcp_max_jitter_ts` / `media.rtcp_avg_jitter_ts` — jitter in RTP timestamp units (not milliseconds).
18
+
19
+
## Health checks (CI)
20
+
21
+
Optional flags (evaluated when **`-summary_json`**, **`-summary_html`**, or any health threshold is set — the run finalizes a summary in that case):
22
+
23
+
-`-health_min_success_ratio` — fail if `success_ratio` is below this value (e.g. `0.99`).
24
+
-`-health_max_failed_calls` — fail if `failed_calls` exceed this value; `0` means any failure fails the run. Default `-1` disables.
25
+
-`-health_max_timeouts` — fail if `timeouts` exceed this value. Default `-1` disables.
26
+
27
+
On failure the process exits with code **2** (other errors use **1**). The JSON file still contains `health` and `findings` with failure reasons.
28
+
29
+
## HTML report
30
+
31
+
-**`-summary_html PATH`**: after a SIP run, writes the same finalized summary as a **standalone** UTF-8 HTML file (no CDN, works offline). Can be used **without**`-summary_json`.
32
+
-**`gossipper report-html -in summary.json -out report.html`**: rebuild HTML from an existing summary JSON file.
fs.IntVar(&cfg.IPField, "ipfield", cfg.IPField, "alias for -ip_field (SIPp-compatible)")
208
222
fs.StringVar(&cfg.AuthUsername, "au", cfg.AuthUsername, "authorization username for authentication challenges")
209
223
fs.StringVar(&cfg.AuthPassword, "ap", cfg.AuthPassword, "authorization password for authentication challenges")
224
+
fs.StringVar(&cfg.SipFrom, "sip_from", cfg.SipFrom, "SIP From value before ;tag= in built-in UAC scenarios (name-addr or URI); empty = gossip <sip:gossip@local_ip:local_port>")
225
+
fs.StringVar(&cfg.SipPAI, "sip_pai", cfg.SipPAI, "P-Asserted-Identity value only (no header name); empty omits the header")
226
+
fs.StringVar(&cfg.SipProvider, "sip_provider", cfg.SipProvider, "sets X-provider to this token; empty omits")
227
+
fs.Func("sip_extra_header", "repeatable: one extra SIP header line \"Name: value\" after Via on first in-dialog requests in built-in UAC scenarios", func(sstring) error {
fs.IntVar(&cfg.TotalCalls, "m", cfg.TotalCalls, "total calls to place (0 = unlimited until SIGINT or -timeout_global; stress/long-run)")
223
244
fs.IntVar(&cfg.Users, "users", cfg.Users, "number of logical users for user-scoped variables")
224
245
fs.StringVar(&cfg.SummaryJSON, "summary_json", cfg.SummaryJSON, "write final stats to JSON file")
246
+
fs.StringVar(&cfg.SummaryHTML, "summary_html", cfg.SummaryHTML, "write final stats to a standalone HTML report (same data as -summary_json; can be used without JSON)")
247
+
fs.Float64Var(&cfg.HealthMinSuccessRatio, "health_min_success_ratio", 0, "when >0 with -summary_json or -summary_html, fail run if success_ratio is lower (e.g. 0.95); exit code 2")
248
+
fs.IntVar(&cfg.HealthMaxFailedCalls, "health_max_failed_calls", -1, "when >=0 with -summary_json or -summary_html, fail if failed_calls exceed this (0 means any failure fails); exit code 2")
249
+
fs.IntVar(&cfg.HealthMaxTimeouts, "health_max_timeouts", -1, "when >=0 with -summary_json or -summary_html, fail if timeouts exceed this; exit code 2")
225
250
fs.BoolVar(&cfg.TraceMessages, "trace_msg", cfg.TraceMessages, "trace sent and received SIP messages")
226
251
fs.BoolVar(&cfg.TraceShortMsg, "trace_shortmsg", false, "trace sent and received messages as compact CSV")
227
252
fs.BoolVar(&cfg.TraceCounts, "trace_counts", false, "write periodic SIP message counters as CSV")
0 commit comments