Gossipper build
Write or modify Gossipper XML scenarios for SIP load testing. Use whenever the user wants to create, edit, port, or convert SIP scenarios for the sipcapture/gossipper load generator — UAC/UAS flows, REGISTER with digest auth, 3PCC master/slave coordination, scenarios with RTP media, or porting SIPp XML to Gossipper. Also use for questions about Gossipper XML syntax, supported actions/keywords, or SIPp compatibility status of a feature.From its SKILL.md
npx -y skills add VoicenterTeam/gossipper-skills --skill gossipper-buildAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.1 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
gossipper-build — SIP Scenario Authoring
Author valid Gossipper XML scenarios. Pinned to Gossipper 0.1.60-rtcpmuxpatch2
(sipcapture/gossipper on main, audited 2026-05-18).
When to use this skill
- Write a new XML scenario for a specific SIP call flow.
- Modify an existing scenario.
- Port a SIPp scenario to Gossipper.
- Answer "is feature X supported / how do I express Y in Gossipper XML?"
When NOT to use this skill
| Task | Owner |
|---|---|
| Invoking gossipper, picking transport/rate, deployment | gossipper-run |
| Interpreting summary JSON / trace CSVs / call records | gossipper-analyze |
Authoring the 3PCC peer file (CSV name;host:port) | gossipper-run (deployment artifact) |
Running gossipper pcap2scenario to convert a PCAP | gossipper-run |
If the user hands you a PCAP and asks for an XML scenario, the right
move is: have gossipper-run invoke pcap2scenario first, then this
skill cleans up the produced XML.
Authoring workflow
- Clarify intent: UAC vs UAS (vs 3PCC). Sequence, expected response codes, auth requirements, media expectations, branching, retries.
- Check built-ins first. If a
-sn <name>covers the case, no XML is needed. See the built-ins table below. - Pick the closest file in
examples/as a starting point. - Declare any needed
<Global>and<User>variables up front. - Write SIP flows inside
<![CDATA[ ... ]]>. Use keywords liberally. - Add
rtd="name"/start_rtd="name"on the steps that matter for latency measurement. - Add
counter="name"on steps that should aggregate into summary JSON. - Add the top-of-file comment block (see "Output contract" below).
- Validate XML well-formedness (see "Validation").
- Hand off to gossipper-run with: scenario path, optional injection CSV path, intended role, required runtime vars.
Built-in scenarios (no XML needed)
-sn <name> | Role | Behavior |
|---|---|---|
uac (default) | client | INVITE → 200 → ACK → BYE |
uas | server | UAS answering INVITE → 180 → 200, BYE handler |
management | server | UAS with HTTP API + hot-reload |
invite_media | client | INVITE with RTP media |
invite_media_early | client | Early media via 183 + SDP |
invite_media_early_180 | client | Early media variant signaled with 180 |
Built-ins are hard-coded — they cannot be PUT via /api/v1/scenario.
To override the shape, write a custom XML.
File skeleton
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Scenario: <name>
Role: <UAC | UAS | 3PCC-master | 3PCC-slave>
Intent: <one-paragraph description of what this scenario tests>
Partial-support features used: <list, or "none">
Required runtime vars: <list, or "none">
-->
<scenario name="descriptive-name">
<Global variables="g1,g2"/>
<User variables="u1,u2"/>
<init>
<!-- pre-call setup if needed -->
</init>
<send retrans="500"><![CDATA[
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
...
Content-Length: [len]
]]></send>
<recv response="100" optional="true"/>
<recv response="180" optional="true"/>
<recv response="200" rtd="invite"/>
<!-- ... -->
<timewait milliseconds="4000"/>
</scenario>
Top-level commands
| Command | Purpose |
|---|---|
<send> | Emit a SIP message. UDP retrans via retrans="<ms>". |
<recv> | Expect a SIP message. request="METHOD" OR response="N". |
<pause> | Wait. milliseconds="N", optional distribution. |
<nop> | No-op container for actions / branching. |
<label> | Jump target. id="name". |
<timewait> | Post-call linger. |
<sendCmd> / <recvCmd> | 3PCC peer coordination. |
<init> | Pre-call setup block. |
Full attribute reference (timers, counters, branching, auth=true,
rrs=true, etc.) and the action catalog →
references/xml-reference.md.
Always-remember gotchas
These bite on first authoring. Burn them in.
- Every SIP body lives in
<![CDATA[ ... ]]>. Bare<,>,&in SDP otherwise break XML parsing. - Every message with a body needs
Content-Length: [len]. Missing it doesn't fail loudly — peers parse oddly. retrans="<ms>"is UDP-only. Silently ignored on TCP/TLS.- Line endings: author with
\n. Gossipper inserts\r\non the wire. [tdmmap]is a stub — always renders0.0.0/0. Don't use it.setdestworks only onu1/ui/ server-UDP. Don't author dynamic destination switching for TCP/TLS scenarios — split into multiple scenarios instead.-t s1/snare UDP aliases, not TLS despite the "s" prefix. TLS server modes arel1/sl. Affects what the scenario can rely on at runtime.
Full partial-support inventory (lookup, exec command, rtpcheck,
sample, insert, replace, video/image PCAP forwarding) →
references/xml-reference.md.
Going deeper
Read these on demand:
references/xml-reference.md— full commands and attributes, full action catalog with support status, full keyword/template vocabulary, variable scopes, transport mode authoring constraints, comprehensive gotchas.references/patterns.md— specialized authoring patterns:- Auth: UAC handling 401/407, UAS validating digest via
verifyauth, TLS mutual auth (runtime-controlled). - 3PCC: master entry, slave entry, init-block coordination, Call-ID adoption rules.
- Media/RTP: codec table, stream sources, DTMF, recording, SRTP/ICE caveats.
- Auth: UAC handling 401/407, UAS validating digest via
Canonical examples (start by copying one)
| Intent | Example file |
|---|---|
| Vanilla UAC: INVITE → 200 → ACK → BYE | examples/uac_basic.xml |
| REGISTER with digest 401/407 challenge | examples/uac_register_with_auth.xml |
| Simple UAS answering INVITE → BYE | examples/uas_basic.xml |
| UAC with RTP audio stream attached | examples/uac_invite_with_media.xml |
| 3PCC master entry pattern | examples/3pcc_master.xml |
3PCC slave entry (first step recvCmd) | examples/3pcc_slave.xml |
These are educational reference scenarios. The authoritative example
corpus lives in gossipper's testdata/scenarios/ directory at the
pinned version — point users there when they want every variant.
Validation
Required before handing off: XML must be well-formed.
python3 -c "import xml.etree.ElementTree as ET; ET.parse('scenario.xml'); print('OK')"
This catches CDATA misuse, attribute typos, unclosed tags. It does
NOT validate Gossipper-specific semantics (e.g., that setdest is
only used in compatible transport modes) — those failures surface at
runtime with classification scenario_error.
Optional (gossipper-run's job): loopback smoke run.
gossipper -sf scenario.xml -sn uas on the same host validates that
the scenario parses through gossipper's stricter XML loader.
Output contract
Every scenario produced by this skill includes:
- Top-of-file XML comment with: name, role, one-paragraph intent, list of partial-support features used (or "none"), required runtime vars (or "none").
- Explicit
Content-Length: [len]on every message with a body. - CDATA-wrapped SIP message bodies.
- No
[tdmmap]and nosetdestoutsideu1/ui/ server-UDP. - Well-formed XML — passes the validation command above.
Handoff to gossipper-run
When done, hand over:
| Item | Why run needs it |
|---|---|
| Scenario file path(s) | -sf flag |
| Companion injection CSV path(s), if any | -inf flag |
| Intended role (UAC / UAS / 3PCC-master / 3PCC-slave) | Picks transport mode, bind, peer file |
| Required template vars | Maps to -s / -au / -ap / -sip_from / etc. |
| Partial-support features used | Run-skill may warn or adjust flags |
What ships with it: 8 files
41.5 KB alongside SKILL.md
examples/
- 3pcc_master.xml2.6 KB
- 3pcc_slave.xml2.4 KB
- uac_basic.xml1.8 KB
- uac_invite_with_media.xml2.5 KB
- uac_register_with_auth.xml1.6 KB
- uas_basic.xml1.4 KB
references/
- patterns.md14.6 KB
- xml-reference.md14.6 KB