How Run SIPp on AWS EC2

SIPp is a free, open-source tool for testing Session Initiation Protocol (SIP) communication systems. It was created to simulate thousands of simultaneous incoming and outgoing SIP calls, allowing users to stress test and measure the performance of their SIP infrastructure.

SIPp is a highly flexible tool, and its scripting language supports various SIP message types and parameters, allowing you to test the behavior of your SIP infrastructure in detail. It also supports SIP over Transport Layer Security (TLS) and Secure Real-time Transport Protocol (SRTP) for secure communication.

I have been using SIPp for a while and last week when I was testing a SIP trunk to operator NG911 SBC, I needed to install it on an AWS EC2 instance. Installation is easy, just need to compile and install cmake manually because cmake version on the online repo is old and SIPp doesn’t like that.

So you need to follow these steps:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
yum groupinstall "Development Tools" -y
yum install ncurses-compat-libs ncurses-devel wget openssl-devel pcap libpcap-devel libnet gsl -y
wget https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2.tar.gz
tar -xvzf cmake-3.25.2.tar.gz
cd cmake-3.25.2
./bootstrap
make
make install
wget https://github.com/SIPp/sipp/releases/download/v3.6.1/sipp-3.6.1.tar.gz
tar -xvzf sipp-3.6.1.tar.gz
cd sipp-3.6.1
/usr/local/bin/cmake . -DUSE_PCAP=1 -DUSE_GSL=1
make

Then you can run the ./sipp or link it to /usr/sbin

** You can compile sipp with ssl and sctp too:

1
 /usr/local/bin/cmake . -DUSE_SSL=1 -DUSE_SCTP=1 -DUSE_PCAP=1 -DUSE_GSL=1

The link that you need to check based on time:

Cmake download page: https://cmake.org/download/ Latest stable SIPp version: https://github.com/SIPp/sipp/releases/tag/v3.6.1

Now, you need to create your scenario. So, I created a ng911option.xml file with this xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8" ?>
<scenario name="Option scenario">
 <send>
  <![CDATA[  
	OPTIONS sip:op.ng911.xxx.ca:5060 SIP/2.0
	Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=z9hG4bKd3eee3f9487fc430b[call_number]
	From: <sip:ims-ng911@10.16.10.40>;tag=cb89092c-c504-45bd-b256-eb49e2bdfd1g[call_number]
	To: <sip:op.ng911.xxx.ca>
	Contact: <sip:ims-lrf@[local_ip]:[local_port]>
	Call-ID: [call_id]
	CSeq: 11667[call_number] OPTIONS
	Max-Forwards: 70
	User-Agent: IMS Core Test
	Allow: INVITE, ACK, OPTIONS, CANCEL, BYE, UPDATE, INFO, REFER, NOTIFY, MESSAGE, PRACK
	Content-Length: [len]
  ]]>
 </send>

And run this scenario with this command:

1
 ./sipp -sf ng911option.xml -i 10.16.10.40 -p 5060 100.125.250.232:5060 -l 1 -m 1000 -r 1 -rp 30000

Then SIPp starts to send SIP OPTIONS every 30 seconds to the target IP (100.125.250.232) from the EC2 interface (10.16.10.40).

Fortunately, I got the 200(OK) which means the connection and IP/port/protocol are set correctly and we have time enough to start the actual server later :)

updatedupdated2023-02-032023-02-03