Repository navigation
The largest SIPp release in its history: about 500 commits since 3.7.9 and over 230 fixes. Every open issue and pull request has been closed, and CPU and memory per call are lower than in any earlier release. The full list is in CHANGES.md.
Performance
3.7 had raised memory and CPU per call far above 3.6. 3.8.0 brings them well below both:
- At 12000 calls/s, the built-in UAS peaks at 148 MB (1240 MB in 3.7.8, 242 MB in 3.6.1).
- The built-in UAC and UAS keep up with 18000 calls/s on 2 cores. 3.6.1 starts losing calls at 7000 calls/s, and 3.7.8 at 5000.
- 2000 calls playing media take 16 MB (54 MB in 3.7.8).
- SRTP takes a sixth less CPU and a third less memory.
- pcap play runs in the RTP playback threads instead of one thread per play, and audio and video play at the same time.
New
- Several dialogs in one call (
dialog="N") and server transactions (start_txn/response_txn) - SIP over WebSocket (RFC 7118):
-t w1/wn, andx1/xnover TLS - Lua scripting:
-lua_fileand<exec lua="..."> - DNS NAPTR/SRV lookup of the remote host (RFC 3263), and
-round_robinacross its addresses - Digest SHA-256, SHA-512-256 and the
-sessvariants (RFC 7616), and the AES_192_CM and AES_256_CM SRTP suites - Media:
rtp_streamover SRTP,<exec rtp_stream="wait"/>,play_pcap_text(RFC 4103), and<rtp_stats>and<rtp_dtmf>to check what a call received - Scenarios:
<xi:include href>,<exec verify>, keywords in<recv timeout>and inside other keywords' parameters, and[last_Header.value] - Failover: with
-max_reconnectand-reconnect_close false, a call goes on over the new connection, and a response goes where its request came from - Python tools in
tools/: a CI threshold report, Prometheus and OpenTelemetry exporters, an HTTP API for the control socket, an RTP impairment proxy, a QoS/MOS analyzer, and STUN/ICE/TURN and DTLS-SRTP probes
Breaking changes
- Numbers are decimal, or hex with
0x. A leading0no longer means octal. Empty, malformed or out-of-range values are errors instead of 0. <ereg search_in="hdr">matches a header name only at the start of a line:header="To"no longer findsX-Forward-To:.- A fatal error before the scenario loads, such as a bad option, exits with 255, as documented, not 1.
- AKAv1-MD5 checks the MAC over the AMF of the challenge.
aka_AMFis ignored. - The
-trace_statfile has periodic (P) and cumulative (C) columns for each repartition range. Parsers of this file need updating.-periodic_rtdis ignored. - The built-in scenarios put
[media_ip]in SDPo=, so it carries the-miaddress, not the-ione.
Fixes
Over 230 fixes. They cover crashes and memory errors, TCP, TLS, SCTP, UDP and 3PCC transport bugs, RTP echo, SRTP and pcap play, statistics, and option and scenario parsing. All Coverity findings are resolved.
Also in this release
- sipp-rs, a Rust port of SIPp in
rust/. It behaves like SIPp, passes its regress tests, and builds with cargo on Linux, macOS and Windows. - The docs build on Read the Docs again, and
docs/*.xmlare the built-in scenarios themselves.
Thanks
To @themadhatterz for a first contribution, to @darwvin-dev for the Python tools, and to @neutrino38, @dolk13, @smititelu, @alrod999, @Costallat and @nfranzmeier, whose earlier pull requests some of these changes are based on.
Full Changelog: v3.7.9...v3.8.0