SIPp is a free Open Source test tool / traffic generator for the SIP protocol. It includes a few basic SipStone user agent scenarios (UAC and UAS) and establishes and releases multiple calls with the INVITE and BYE methods. It can also reads custom XML scenario files describing from very simple to complex call flows. It features the dynamic display of statistics about running tests (call rate, round trip delay, and message statistics), periodic CSV statistics dumps, TCP and UDP over multiple sockets or multiplexed with retransmission management and dynamically adjustable call rates.
SIPp can be used to test various real SIP equipment like SIP proxies, B2BUAs, SIP media servers, SIP/x gateways, SIP PBX, … It is also very useful to emulate thousands of user agents calling your SIP system.
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE scenario SYSTEM "sipp.dtd"><scenarioname="Basic Sipstone UAC"><!-- In client mode (sipp placing calls), the Call-ID MUST be --><!-- generated by sipp. To do so, use [call_id] keyword. --><sendretrans="500"><![CDATA[
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]></send><recvresponse="100"optional="true"></recv><recvresponse="180"optional="true"></recv><!-- By adding rrs="true" (Record Route Sets), the route sets --><!-- are saved and used for following messages sent. Useful to test --><!-- against stateful SIP proxies/B2BUAs. --><recvresponse="200"rtd="true"></recv><!-- Packet lost can be simulated in any send/recv message by --><!-- by adding the 'lost = "10"'. Value can be [1-100] percent. --><send><![CDATA[
ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]></send><!-- This delay can be customized by the -d command-line option --><!-- or by adding a 'milliseconds = "value"' option here. --><pause/><!-- The 'crlf' option inserts a blank line in the statistics report. --><sendretrans="500"><![CDATA[
BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 2 BYE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]></send><recvresponse="200"crlf="true"></recv><!-- definition of the response time repartition table (unit is ms) --><ResponseTimeRepartitionvalue="10, 20, 30, 40, 50, 100, 150, 200"/><!-- definition of the call length repartition table (unit is ms) --><CallLengthRepartitionvalue="10, 50, 100, 500, 1000, 5000, 10000"/></scenario>
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE scenario SYSTEM "sipp.dtd"><scenarioname="Basic Sipstone UAC"><!-- In client mode (sipp placing calls), the Call-ID MUST be --><!-- generated by sipp. To do so, use [call_id] keyword. --><sendretrans="500"><![CDATA[
INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: "[service]" <sip:[service]@[remote_ip]>;tag=[call_number]
To: "[field0]" <sip:[field0]@[remote_ip]>
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:[service]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=- 1 2 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 0 8 18 101
a=rtpmap:18 G729/8000
]]></send><recvresponse="100"optional="true"></recv><recvresponse="180"></recv><!-- Set Ring Time --><pausemilliseconds="8000"/><!-- Abort Call --><sendretrans="500"><![CDATA[
CANCEL sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: "[service]" <sip:[service]@[remote_ip]>;tag=[call_number]
To: "[field0]" <sip:[field0]@[remote_ip]>
Call-ID: [call_id]
CSeq: 1 CANCEL
]]></send><!-- By adding rrs="true" (Record Route Sets), the route sets --><!-- are saved and used for following messages sent. Useful to test --><!-- against stateful SIP proxies/B2BUAs. --><recvresponse="200"rtd="true"></recv><!-- Packet lost can be simulated in any send/recv message by --><!-- by adding the 'lost = "10"'. Value can be [1-100] percent. --><send><![CDATA[
ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]></send><!-- This delay can be customized by the -d command-line option --><!-- or by adding a 'milliseconds = "value"' option here. --><pausemilliseconds="8000"/><!-- The 'crlf' option inserts a blank line in the statistics report. --><sendretrans="500"><![CDATA[
BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 2 BYE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]></send><recvresponse="200"crlf="true"></recv><!-- definition of the response time repartition table (unit is ms) --><ResponseTimeRepartitionvalue="10, 20, 30, 40, 50, 100, 150, 200"/><!-- definition of the call length repartition table (unit is ms) --><CallLengthRepartitionvalue="10, 50, 100, 500, 1000, 5000, 10000"/></scenario>