This document defines the currently supported SIPp subset in Gossipper.
Gossipper process CLI (subcommands, optional gossipper sipp prefix, management
server entry, run profiles) is documented in cli.md. This file
focuses on XML, keywords, transports, and scenario-time CLI flags
parsed after the main dispatcher.
Unsupported XML actions now fail during scenario parsing, and unsupported
scenario keywords fail during template rendering instead of silently degrading
into no-ops or empty strings.
Match by request or response; optional receives supported, with pragmatic short-circuit when first incoming SIP mismatches an optional recv
pause
supported
Uses milliseconds, falls back to CLI default
nop
supported
Structural no-op, still participates in branching
label
supported
Used as a target for next jumps
timewait
supported
Executed as a timed pause
sendCmd
supported
Supports local command bus and external peer delivery with dest, Call-ID correlation, and optional From sender identity
recvCmd
supported
Receives from the local bus or external peers, supports actions, timeout, optional src, and first-command correlation adoption for 3PCC-style flows so later [call_id] can reuse the adopted command context
init
supported
Supports initialization nop, pause, label, actions, and command exchange via sendCmd / recvCmd before traffic starts
_unexp.main fallback label
partial
Pragmatic M6 support: on unexpected SIP during recv, if _unexp.main exists, flow jumps there and sets $_unexp.retaddr to the next command index
Assigns a floating-point value from value or variable
assignstr
supported
Assigns rendered string values to variables
todouble
supported
Converts a string variable into a floating-point variable
add
supported
Floating-point arithmetic against assign_to using value or variable
subtract
supported
Floating-point arithmetic against assign_to using value or variable
multiply
supported
Floating-point arithmetic against assign_to using value or variable
divide
supported
Floating-point arithmetic against assign_to using value or variable; divide-by-zero fails the call
strcmp
supported
Lexicographic compare for variable against value or variable2; stores -1, 0, or 1
test
supported
Stores boolean result as 1 or 0; supports value or variable2 with equal, not_equal, greater_than, less_than, greater_than_equal, and less_than_equal
log
supported
Emits message when tracing is enabled
warning
supported
Emits message into the error trace when -trace_err / -error_file is enabled
lookup
partial
Looks up the first CSV column and stores a 1-based physical file line number; integrates with [fieldN ... line=$var]; optional -infindex accelerates key lookups with generated index files
jump
supported
Jumps to an absolute scenario command index via value or variable
gettimeofday
supported
Stores epoch seconds and microseconds in assign_to targets
urlencode
supported
URL-encodes the referenced variable in place
urldecode
supported
URL-decodes the referenced variable in place
verifyauth
supported
Validates incoming Digest Authorization / Proxy-Authorization headers for MD5 and SHA-256 with qop=auth
exec
partial
Supports command, int_cmd, rtp_streamstart / pause / resume / stop / echo, pragmatic rtpcheck (min_packets, timeout_ms, direction=any|send|recv|both, legacy bidirectional), play_pcap_audio, play_pcap_video, and play_pcap_image; PCAP replay preserves timing and uses SDP endpoint discovery for matching media lines (m=audio, m=video, m=image); rtp_stream / mic honor -media_srtp / -media_reject_srtp per srtp.md
sample
partial
Pragmatic deterministic subset: value="min=<int> max=<int> [step=<int>] [seed=<int>]" with assign_to target
insert
partial
Pragmatic CSV field mutation subset: file=... and value="line=<int> field=<int> text=<value> [position=prefix|suffix]"; affects in-memory [fieldN ...] reads for the current call
replace
partial
Pragmatic CSV field mutation subset: file=... and value="line=<int> field=<int> text=<value>"; affects in-memory [fieldN ...] reads for the current call
Renders UDP, TCP, or TLS depending on transport; ui explicitly renders as UDP
[call_id]
supported
Generated per call; in command-only/external 3PCC flows it is adopted from the first incoming recvCmd correlation message when needed; SIPp-style prefix///[call_id] form is recognized for dialog correlation (the prefix/// segment is stripped at matching/keying sites)
[cseq]
supported
Basic numeric rendering with offsets
[branch]
supported
Deterministic per message
[len]
supported
Two-pass body length calculation
[call_number]
supported
Monotonic call index
[msg_index]
supported
Scenario message index
[pid]
supported
Current process ID
[last_message]
supported
Last received SIP message
[last_*]
supported
Missing header drops the whole line, matching SIPp semantics
[last_Request_URI]
supported
Uses the last received request URI when available, otherwise falls back to the URI in the last To header
[last_cseq_number]
supported
Extracted from the last CSeq header
[server_ip]
supported
Resolves to the active local bind IP for the call/session; in -t ui server mode it matches the listener IP that accepted the first request for the session
Relates to issue #7: how SIPp-style TLS mono/multi socket behavior maps to Gossipper.
SIPp-style behavior
Gossipper
Notes
Mono socket: one TLS connection to the remote peer
-t l1 (UAC alias -t cl)
Single shared TLS client (runClientSharedTLS); signaling for all calls is demultiplexed by Call-ID.
Multi socket: one TLS connection per new call, with a cap
-t ln (UAC alias -t cln) and optional -max_socket
Per-call TLS (runClientPerCallTLS); -max_socket limits how many per-call sockets may be open at once (same family as un / tn / ln).
Close TLS when each call ends (multi)
Default for ln / cln UAC
Each call opens a transport.DialogTLS and closes it when that call’s scenario completes (defer dialog.Close() after executeCall). If sockets appear to outlive individual calls, open an issue with version, full CLI, and scenario.
TLS material: UAS needs -tls_cert and -tls_key; UAC often uses -tls_ca and -tls_skip_verify=false for strict verification (default skip is for lab use).
Reconnect: only shared client TCP/TLS (-t t1 / -t l1, or alias -t cl) uses -max_reconnect, -reconnect_sleep, and -reconnect_close on connection loss. Per-call ln / cln does not share that reconnect path.
Exits after N seconds of total runtime for deterministic CI/load runs
-rate_scale
supported
Sets interactive CPS step size used by runtime TUI controls (+/- for 1x step and *// for 10x step)
-rate_increase + -rate_interval + -rate_max
supported
Applies periodic CPS ramp-up/ramp-down during run; -rate_max caps upper bound when set
-inf + -ip_field
supported (for -t ui)
With -t ui, -inf is required; -ip_field is optional — when set, selects UI bind IPs from that CSV column (zero-based index). When -ip_field is omitted, bind addresses come from -i (single socket / single listener IP). Client mode preserves CSV row order (including duplicates) for per-call rotation when using a column; server mode binds one listener per unique IP from the column or one listener for -i
-t ui
partial
Pragmatic M3 parity: one UDP shared socket per source IP in client mode and one UDP listener socket per configured IP in server mode; bind failures include failing ip:port; TUI supports ui + inf and optional ip_field; transport token is normalized case-insensitively (for example UI); advanced SIPp parity remains deferred
-infindex
supported
Generates a CSV injection index (-infindex <file> <field>); lookup uses generated index files for faster first-column key resolution
-max_socket
partial
Caps per-call transport concurrency (un, tn, ln, UAC alias cln) by limiting simultaneously open call sockets; parser now rejects unsupported transports early
Shared client TCP/TLS (t1, l1, or UAC alias cl that normalizes to l1) support reconnect retries and close-on-reconnect; per-call ln/cln does not; see TLS socket modes