{"id":9694,"date":"2026-05-16T22:21:32","date_gmt":"2026-05-16T14:21:32","guid":{"rendered":"https:\/\/www.freesip.org\/?p=9694"},"modified":"2026-05-16T22:23:42","modified_gmt":"2026-05-16T14:23:42","slug":"gossipper-a-go-rewrite-of-sipp-for-load-testing","status":"publish","type":"post","link":"https:\/\/www.freesip.org\/?p=9694","title":{"rendered":"Gossipper: A Go Rewrite of SIPp for Load Testing"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Gossipper<\/strong>&nbsp;is a modern software repository that provides a&nbsp;<strong>Go-based rewrite of the SIPp tool<\/strong>, specifically designed for generating high-performance&nbsp;<strong>SIP signaling loads<\/strong>. The project improves upon the original engine by offering a cleaner architecture and better support for&nbsp;<strong>XML scenario compatibility<\/strong>, including advanced actions like&nbsp;<strong>RTP streaming<\/strong>&nbsp;and&nbsp;<strong>PCAP audio replay<\/strong>. Users can interact with the system through a full-screen&nbsp;<strong>terminal user interface<\/strong>, a line-oriented command shell, or a&nbsp;<strong>web-based control panel<\/strong>&nbsp;powered by an integrated HTTP API. Its current scope includes robust support for&nbsp;<strong>UDP, TCP, and TLS transports<\/strong>, alongside detailed&nbsp;<strong>JSON and CSV statistics<\/strong>&nbsp;for tracking call success and latency. Additionally, the tool features&nbsp;<strong>structured event logging<\/strong>&nbsp;and integration with&nbsp;<strong>Homer over HEP3<\/strong>&nbsp;to facilitate deep monitoring of network traffic. The repository is licensed under&nbsp;<strong>AGPL-3.0<\/strong>&nbsp;and includes extensive documentation to help developers implement complex&nbsp;<strong>3PCC flows<\/strong>&nbsp;and load-testing profiles.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"572\" src=\"https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-1024x572.png\" alt=\"\" class=\"wp-image-9695\" srcset=\"https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-1024x572.png 1024w, https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-300x167.png 300w, https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-768x429.png 768w, https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-1536x857.png 1536w, https:\/\/www.freesip.org\/wp-content\/uploads\/2026\/05\/gossipper-sipper-sip-2048x1143.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gossipper is a <strong>behavior-oriented rewrite of SIPp in Go<\/strong>, rather than a literal source port, and it introduces several core architectural and functional differences designed for modern load-testing environments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The primary differences between Gossipper and the original SIPp include:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">1. Engine Architecture and Language<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Go-Based:<\/strong> Built in Go, it focuses on a <strong>cleaner engine architecture<\/strong> compared to the original C++ codebase.<\/li>\n\n\n\n<li><strong>Subcommands:<\/strong> Unlike SIPp&#8217;s single-mode execution, Gossipper uses subcommands like <code>sipp<\/code> (for SIPp-style flags), <code>server<\/code> (for management), and <code>tui<\/code> or <code>cli<\/code> for interactive modes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">2. User Interface and Management<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Interactive TUI\/CLI:<\/strong> Includes a full-screen <strong>TUI launcher<\/strong> and a line-oriented <strong>interactive shell<\/strong> (<code>gossipper cli<\/code>) for managing tests.<\/li>\n\n\n\n<li><strong>Web Control UI &amp; HTTP API:<\/strong> Features an <strong>embedded web-based Control UI<\/strong> and a JSON HTTP API (<code>\/api\/v1\/<\/code>) for remote management, health checks, and live WebSocket stats.<\/li>\n\n\n\n<li><strong>Server Mode:<\/strong> The <code>gossipper server<\/code> subcommand allows for long-running management of SIP UAS and clients via JSON configuration profiles.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">3. Observability and Logging<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OpenTelemetry (OTel) Support:<\/strong> Gossipper includes a non-blocking structured event logger that can export data to <strong>OpenTelemetry collectors<\/strong> via OTLP\/gRPC or OTLP\/HTTP.<\/li>\n\n\n\n<li><strong>Homer Integration:<\/strong> Built-in support for <strong>mirroring SIP signaling to Homer<\/strong> over HEP3.<\/li>\n\n\n\n<li><strong>Enhanced Statistics:<\/strong> JSON summary exports provide more granular data than SIPp, including <strong>latency repartition buckets<\/strong> and standard deviation for call lengths and RTD timers.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">4. Transports and 3PCC<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Multi-IP Transports:<\/strong> Introduces the <code>ui<\/code> transport, which allows <strong>source IP rotation per call<\/strong> selected from a CSV file.<\/li>\n\n\n\n<li><strong>Distributed 3PCC:<\/strong> Command exchange (<code>sendCmd<\/code>\/<code>recvCmd<\/code>) can occur <strong>across multiple Gossipper instances<\/strong> using a TCP peer map, in addition to internal process handoffs.<\/li>\n\n\n\n<li><strong>TLS Management:<\/strong> Provides specific server-side and client-side TLS aliases (e.g., <code>sl<\/code>, <code>cl<\/code>, <code>cln<\/code>) and allows for easier certificate management via CLI flags.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">5. Media Handling<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Modern Media Stack:<\/strong> Uses the <code>pion<\/code> library for RTP\/RTCP, supporting audio PCAP replay, <strong>RFC 2833 DTMF generation<\/strong>, and pragmatic video\/image PCAP replay.<\/li>\n\n\n\n<li><strong>SRTP Support:<\/strong> Includes native support for <strong>SRTP and DTLS-SRTP<\/strong> for scenario media.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">6. XML Compatibility<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Incremental Parity:<\/strong> Gossipper does not have 100% parity with SIPp&#8217;s XML scenarios; compatibility is being added <strong>incrementally<\/strong>.<\/li>\n\n\n\n<li><strong>Expanded Actions:<\/strong> It adds several new XML actions and keywords not found in standard SIPp, such as <code>urlencode<\/code>, <code>urldecode<\/code>, <code>verifyauth<\/code>, and specific OTLP logging attributes.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Source: <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/sipcapture\/gossipper\/tree\/main\">https:\/\/github.com\/sipcapture\/gossipper\/tree\/main<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gossipper&nbsp;is a modern software repository that provides a&nbsp;Go-based rewrite of the SIPp tool, specifically designed for generating high-performance&nbsp;SIP signaling loads. The project improves upon the original engine by offering a cleaner architecture and better support for&nbsp;XML scenario compatibility, including advanced actions like&nbsp;RTP streaming&nbsp;and&nbsp;PCAP audio replay. Users can interact with the system through a full-screen&nbsp;terminal user [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,1],"tags":[],"class_list":["post-9694","post","type-post","status-publish","format-standard","hentry","category-opensource","category-projects"],"_links":{"self":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9694","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9694"}],"version-history":[{"count":4,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9694\/revisions"}],"predecessor-version":[{"id":9700,"href":"https:\/\/www.freesip.org\/index.php?rest_route=\/wp\/v2\/posts\/9694\/revisions\/9700"}],"wp:attachment":[{"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9694"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9694"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freesip.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9694"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}