Lab scenarios (kefir ports)¶
Embedded SIPp XML with the same ids as kefir’s bundled gateway catalog
(internal/siprtp/bundled/*.toml). They are listed on Control UI Scenarios
under Lab scenarios (kefir ports) and in job/profile dropdowns as
Lab (kefir ports).
XML lives in internal/scenario/lab/ and is compiled
into the binary (go:embed). GET /api/v2/builtin-scenarios returns them with
"source": "lab".
How to run¶
CLI (UAC toward a PBX, unless noted):
gossipper -sn one_way -i 127.0.0.1 -p 5060 -s 100
UAS labs (early_183, late_180, and {id}_uas twins) need a listener:
gossipper -sn one_way_uas -t uas
In the Control UI: pick the id on a client/server profile, or Clone to editor
on Scenarios so the XML lands in scenarios/<id>_copy.xml and opens on the Graph
canvas. Nested <nop><action><exec rtp_stream=…> nodes stay raw so they are
not dropped.
To run a UAC lab through a PBX AOR (REGISTER + originate) or arm inbound
UAS labs (one_way_uas, early_183, late_180, …) on the registered Contact, see
SIP REGISTER gateway.
Mapping vs kefir¶
Gossipper is not kefir. There is no drop_rx, no second hairpin socket, no
bundled kws.ulaw, and a UAC cannot emit an illegal 180 after CONNECT.
| Approximation | Gossipper behaviour |
|---|---|
| RTP speech / cadence | <exec rtp_stream="synthetic,0,0,PCMU/8000,20"/> plus pause / stop |
| Comfort Noise | PT 13 CN/8000 (rtp_stream="synthetic,0,13,CN/8000,20") |
| No RTP / mute / recvonly | SDP direction only; omit rtp_stream |
| Hold / resume | re-INVITE a=inactive then a=sendrecv |
| T.38 | m=image [media_port] udptl t38 |
| Port move | re-INVITE m= [media_port+2] |
| Media redirect | re-INVITE c=IN IP4 127.0.0.2 |
early_183 / late_180 |
UAS only (the only way those SIP sequences work here) |
{id}_uas |
Inbound twin of the UAC lab: recv INVITE, answer with the same SDP/RTP, then wait for BYE (short_call_uas sends BYE at 1500 ms). Hold/gap/redirect re-INVITE toward the caller. |
kws / hairpin |
bidirectional synthetic PCMU (not a keyword clip / not a second socket) |
Engine-baked invite_media_early is a separate UAC early-media load scenario.
Lab early_183 is the kefir inbound 183+SDP port.
Catalog¶
| Id | Role | Intent |
|---|---|---|
one_way |
uac | N1: a=sendonly + TX RTP |
no_rtp |
uac | N4: a=inactive, no stream |
cn_only |
uac | N5: RTP PT 13 only |
audio_gap |
uac | N6: 2s RTP then re-INVITE inactive |
codec_chg |
uac | N8: PCMU then PCMA on the same 5-tuple |
fas_cadence |
uac | N13: 1s on / 2s off ×3 after 1.5s |
fas_speech |
uac | N14: continuous synthetic G.711 |
fas_early |
uac | N16: cadence in the first 1.5s |
fas_late |
uac | N16: cadence starts 10s after CONNECT |
fake_ringing |
uac | Same cadence as N13 |
kws |
uac | Synthetic PCMU stand-in for kws.ulaw |
late_180 |
uas | 200 then illegal 180 |
hairpin |
uac | Bidirectional synthetic RTP (no second socket) |
media_redirect |
uac | re-INVITE c=127.0.0.2 |
short_call |
uac | BYE 1500 ms after CONNECT |
fax_t38 |
uac | INVITE m=image |
recvonly |
uac | N2: a=recvonly, no TX |
hold_moh |
uac | re-INVITE a=sendonly, keep TX |
hold_resume |
uac | inactive then sendrecv |
port_move |
uac | re-INVITE m= [media_port+2] |
codec_chg_alaw |
uac | PCMA then PCMU |
rtp_mute |
uac | sendrecv SDP, no stream |
g711_silence |
uac | Synthetic PCMU μ-law 0xFF |
cn_then_speech |
uac | PT 13 then PCMU |
early_183 |
uas | 183+SDP and RTP before CONNECT |
fax_switch |
uac | G.711 then re-INVITE T.38 |
one_way_uas … fax_switch_uas |
uas | Inbound twin of each UAC lab (same SDP/RTP; arm on gateway Contact) |