You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(2) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(12) |
Feb
(9) |
Mar
(8) |
Apr
(5) |
May
(10) |
Jun
(13) |
Jul
(7) |
Aug
(15) |
Sep
(17) |
Oct
(23) |
Nov
(51) |
Dec
(9) |
2007 |
Jan
(27) |
Feb
(11) |
Mar
(14) |
Apr
(21) |
May
(55) |
Jun
(15) |
Jul
(16) |
Aug
(8) |
Sep
(15) |
Oct
(24) |
Nov
(19) |
Dec
(47) |
2008 |
Jan
(33) |
Feb
(1) |
Mar
(14) |
Apr
(10) |
May
(8) |
Jun
(33) |
Jul
(33) |
Aug
(10) |
Sep
(13) |
Oct
(10) |
Nov
(1) |
Dec
(11) |
2009 |
Jan
(3) |
Feb
|
Mar
(8) |
Apr
(5) |
May
(1) |
Jun
|
Jul
(3) |
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(20) |
2013 |
Jan
(3) |
Feb
(20) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <saj...@us...> - 2010-11-08 13:02:34
|
Revision: 594 http://sipp.svn.sourceforge.net/sipp/?rev=594&view=rev Author: sajeeshs Date: 2010-11-08 13:02:28 +0000 (Mon, 08 Nov 2010) Log Message: ----------- ENH: Added option to configure global T2 Timer (Patch contributed by si...@hi...) Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/sipp.cpp sipp/trunk/sipp.hpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2010-10-26 06:49:11 UTC (rev 593) +++ sipp/trunk/call.cpp 2010-11-08 13:02:28 UTC (rev 594) @@ -1702,11 +1702,11 @@ } } else { nb_last_delay *= 2; - if (DEFAULT_T2_TIMER_VALUE < nb_last_delay) + if (global_t2 < nb_last_delay) { if (!bInviteTransaction) { - nb_last_delay = DEFAULT_T2_TIMER_VALUE; + nb_last_delay = global_t2; } } if(send_raw(last_send_msg, last_send_index, last_send_len) < -1) { @@ -3235,8 +3235,8 @@ /* * We are here due to a provisional response for non INVITE. Update our next retransmit. */ - next_retrans = clock_tick + DEFAULT_T2_TIMER_VALUE; - nb_last_delay = DEFAULT_T2_TIMER_VALUE; + next_retrans = clock_tick + global_t2; + nb_last_delay = global_t2; } } Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2010-10-26 06:49:11 UTC (rev 593) +++ sipp/trunk/sipp.cpp 2010-11-08 13:02:28 UTC (rev 594) @@ -302,6 +302,8 @@ "Small values allow more precise scheduling but impacts CPU usage." "If the compression is on, the value is set to 50ms. The default value is 10ms.", SIPP_OPTION_TIME_MS, &timer_resolution, 1}, + {"T2", "Global T2-timer in milli seconds", SIPP_OPTION_TIME_MS, &global_t2, 1}, + {"sendbuffer_warn", "Produce warnings instead of errors on SendBuffer failures.", SIPP_OPTION_BOOL, &sendbuffer_warn, 1}, {"trace_msg", "Displays sent and received SIP messages in <scenario file name>_<pid>_messages.log", SIPP_OPTION_SETFLAG, &useMessagef, 1}, Modified: sipp/trunk/sipp.hpp =================================================================== --- sipp/trunk/sipp.hpp 2010-10-26 06:49:11 UTC (rev 593) +++ sipp/trunk/sipp.hpp 2010-11-08 13:02:28 UTC (rev 594) @@ -230,6 +230,8 @@ extern int max_recv_loops _DEFVAL(MAX_RECV_LOOPS_PER_CYCLE); extern int max_sched_loops _DEFVAL(MAX_SCHED_LOOPS_PER_CYCLE); +extern unsigned int global_t2 _DEFVAL(DEFAULT_T2_TIMER_VALUE); + extern char local_ip[40]; extern char local_ip_escaped[42]; extern bool local_ip_is_ipv6; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <saj...@us...> - 2010-10-26 06:49:17
|
Revision: 593 http://sipp.svn.sourceforge.net/sipp/?rev=593&view=rev Author: sajeeshs Date: 2010-10-26 06:49:11 +0000 (Tue, 26 Oct 2010) Log Message: ----------- FIX: Fix for Segmentation Fault - ID: 2896585: -aa option causes segfault from Endre Szalai Modified Paths: -------------- sipp/trunk/stat.cpp Modified: sipp/trunk/stat.cpp =================================================================== --- sipp/trunk/stat.cpp 2010-10-15 11:15:53 UTC (rev 592) +++ sipp/trunk/stat.cpp 2010-10-26 06:49:11 UTC (rev 593) @@ -779,9 +779,9 @@ case E_AUTO_ANSWERED : // Let's count the automatic answered calls - M_G_counters [CPT_G_C_AutoAnswered - 1]++; - M_G_counters [CPT_G_PD_AutoAnswered - 1]++; - M_G_counters [CPT_G_PL_AutoAnswered - 1]++; + M_G_counters [CPT_G_C_AutoAnswered - E_NB_COUNTER - 1]++; + M_G_counters [CPT_G_PD_AutoAnswered - E_NB_COUNTER - 1]++; + M_G_counters [CPT_G_PL_AutoAnswered - E_NB_COUNTER - 1]++; break; default : ERROR("CStat::ComputeStat() - Unrecognized Action %d\n", P_action); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <xsi...@us...> - 2010-10-15 11:15:59
|
Revision: 592 http://sipp.svn.sourceforge.net/sipp/?rev=592&view=rev Author: xsimonar Date: 2010-10-15 11:15:53 +0000 (Fri, 15 Oct 2010) Log Message: ----------- Doc: Update ims_bench doc to reflect support of Call Forwarding scenarios and other new features Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml 2010-10-15 11:04:09 UTC (rev 591) +++ doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml 2010-10-15 11:15:53 UTC (rev 592) @@ -26,6 +26,28 @@ <p>To learn how to use IMS Bench SIPp and how to create scenarios that take advantage of the features it brings, please refer to the <link href="reference.html">Reference documentation</link>.</p> + <p><b>New features and Fixes in SVN revision 591 (15-Oct-2010):</b></p> + <ul> + <li>Support for automatic re-registration of the users. The users can now be re-registerd for instance after 1/2 hour, using new <start_scen> action in registration scenarios .</li> + <li>Support for Call Forwarding and VoiceMail scenarios. See new scenarios sut_fwd_A.xml, sut_fwd_B.xml and sut_fwd_C.xml</li> + <li>Support for UDP Keep-Alive. See <a href="reference.html#KeepAlive">Keep Alive</a></li> + <li>Support for generating load to multiple SUT by setting <multiple_sut> parameter to 1 within the configuration section of manager.xml;</li> + <li>Support gcc-4.4 C++ stdlib changes, which changes the prototypes for many of the str*() family of functions.</li> + + <li>(Fix) Changed the way sipp react to 4xx messages in reply to INVITES. Content of ACK message is now based on the INVITE content, not hard-coded anymore. +</li> + <li>(Fix) Fixed a race condition in CManager:CheckTimeEvents which could in rare cases cause some statistics to be be incorrectly set to 0.</li> + <li>(Fix) Fixed a segmentation fault when the last run of a bench is a run with a max_calls condition, and the manager is not run in full automated mode (-e switch)</li> + <li>(Fix) Increased maximum number of RTD from 5 to 20 </li> + <li>(Fix) The test was stopped when no scenario was <i>completed</i> in the step, with a message "no scenario <i>attempted</i> in this step". The test is now stopped only if the number of attempted scenario in the step is zero. A test with attempted scenario but no successfull ones in a step would not stop for this reason (if there are failed ones, it would stop because of over-ihs). This helps with tests with small steps and very long scenarios (long call duractions for instance). +</li> </ul> + + <p><b>New features and Fixes in SVN revision 589 (4-Aug-2009):</b></p> + <ul> + <li>Increased system limits (e.g. number of SIPP test systems)</li> + <li>Cleaned up lots of warning related to const char*. Also made parts of manager code more readable.</li> + <li>(Fix) Fixed max_calls condition when used in other run than first one or in multiple runs</li> + </ul> <p><b>New features in SVN revision 587 (28-Jul-2009):</b></p> <ul> <li>Support for SIP traffic over TCP. SIP traffic between each SIPp Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml 2010-10-15 11:04:09 UTC (rev 591) +++ doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml 2010-10-15 11:15:53 UTC (rev 592) @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd"> <document> <header> @@ -301,6 +301,16 @@ <tr><td><b>max_time_offset</b></td> <td>Maximum offest (in microseconds) allowed between each TS and the manager (0 = not checked)</td></tr> + <tr><td><b>multiple_sut</b></td> + <td>Support for generating load from one manager to multiple SUT. + For instance, to have a manager supporting 8 sipp connected to 2 SUT + you need to have 4 SIPP connected to the first SUT and 4 to the other SUT. + By default (multiple_sut = 0), a sipp user is calling a user from a sipp with + a groupid different from its groupid (the groupid is specified using -groupid sipp + command line). So, it might call one of the 4 SIPP connected to the other SUT. + If multiple_sut parameter is set then a sipp user will be calling a user from + a sipp with the the SAME groupid. So, if all SIPP connected to the same SUT share + the same groupid, then they will only call SIPP connected to the same SUT.</td></tr> </table><br/> </li> <li><anchor id="scen_params" /><strong>Scenario Parameters</strong> @@ -1291,14 +1301,14 @@ <tr> <td></td> <td>rrs</td> - <td><strong>R</strong>ecord <strong>R</strong>oute <strong>S</strong>et. if this attribute is set to "true", + <td><strong>R</strong>ecord <strong>R</strong>oute <strong>S</strong>et. If this attribute is set to "true", then the "Record-Route:" header of the message received is stored and can be recalled using the <strong>[routes]</strong> keyword.</td> <td><code><recv response="100" rrs="true"></code>.</td> </tr> <tr> <td></td> <td>auth</td> - <td><a href="#authentication">Authentication</a>. if this attribute is set to "true", + <td><a href="#authentication">Authentication</a>. If this attribute is set to "true", then the "Proxy-Authenticate:" header of the message received is stored and is used to build the <strong>[authentication]</strong> keyword.</td> <td><code><recv response="407" auth="true"></code>.</td> @@ -1565,7 +1575,11 @@ <td>type</td> <td> The command sends a (non-SIP) message to the partner SIPp instance. In case no partner has been assigned yet to the scenario, - a partner SIPp instance is selected at random (uniform) before sending the message. + a partner SIPp instance is selected at random (uniform) before sending the message (except if partner_id parameter is specified, + in which case the sipp instance specified by the partner_id parameter is choosen - this partner_id parameter is usefull when sending + call to a voicemail or a C party in a call forwarding scenario for instance). + Username and domain parameters can be specified in the req_user command to select a well-defined user (typically used together + with the partner_id parameter in a voicemail or a call-forwarding scenario). </td> <td> <source> @@ -1574,7 +1588,17 @@ <param name="from_uri" value="[field0]@[field1]"/> <param name="call_id" value="[call_id]"/> </sendRmt> +</source> or (in case of Voicemail or call forwarding) +<source> +<sendRmt type="req_user"> + <param name="scenario" value="ims_uas"/> + <param name="from_uri" value="[field0]@[field1]"/> + <param name="user_name" value="[field5]"/> + <param name="user_domain" value="[field6]"/> + <param name="partner_id" value="[field7]"/> +</sendRmt> </source><br/> + </td> </tr> <tr> @@ -2116,11 +2140,32 @@ file where the actual SIP scenario really starts.</td> <td><source><exec int_cmd="set_start_time"/></source></td></tr> <tr><td><code>set_target_ip</code></td> - <td>Forces the target IP to the one of the partner SIPp (To be used in - "loop-back" configuration, SIPp against SIPp without any SUT in - between).</td> + <td>If used w/o parameter, forces the target IP to the one of the partner SIPp + (To be used in "loop-back" configuration, SIPp against SIPp without any SUT in + between). + If used with a parameter, forces the target IP to the parametrer specified + (Parameter can be obtained through a regexp parsing the Via header for instance) + </td> <td> - <source><exec int_cmd="set_target_ip"/></source></td></tr> + <source><exec int_cmd="set_target_ip"/></source> + or + <source><ereg regexp="[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[:][0-9]*" + search_in="hdr" occurence="1" header="Via:" assign_to="3" /></source> + <source><exec int_cmd="set_target_ip" parm=="[$3]" /></source> + </td></tr> + <tr><td><code>start_scen</code></td> + <td>Launches a new scenario from a scenario file.This is useful to perform + for instance automatic re-registration: the registration scenario can end + launching a "pause" scenario doing a pause followed by lauching the + re-registration scenario. The re-registration scenario would do the re-registration and + end lauching the "pause" scenario.</td> + <td> + <source><exec int_cmd="start_scen" parm="sut_rereg"/></source></td></tr> + <tr><td><code>keep_alive_on</code><br/><code>keep_alive_off</code></td> + <td>Send UDP Keep-Alive to the remote SIPP if keep_alive_period command line has been set + when starting SIPP. See <a href="#KeepAlive">Keep Alive</a></td> + <td> + <source><exec int_cmd="keep_alive_on"/></source></td></tr> </table> <p>Example that stops the execution of the script on receiving a 603 response:</p> <source><![CDATA[ <recv response="603" optional="true"> @@ -2302,7 +2347,9 @@ user will initially be placed in.</li> <li>Subsequent columns hold the static user data fields that scenarios can refer to using the [field<i>n</i>] keyword.</li> - </ul> + <li>The port used by a user is usually sequentially choosen. It can also be specified + using PORT=xxxx in the inf file e.g. PORT=5060.This is mainly used when simulating + Voicemail which must run on a port configured by the SUT</li> </ul> <p>Example:</p> <source> @@ -2311,6 +2358,7 @@ 0;subs000002;ims.test;usim000002;sp1.ims.test;pass000002;data2_1 0;subs000003;ims.test;usim000003;sp1.ims.test;pass000003;data3_1 0;subs000004;ims.test;usim000004;sp1.ims.test;pass000004;data4_1 +0;subs000005;ims.test;usim000005;sp1.ims.test;pass000004;data5_1;PORT=5060 ... </source> <p>In this example, all users are initially in pool 0 (for example, the pool @@ -2529,6 +2577,28 @@ this exit code by using "<code>echo ?</code>" command.</p> </section> + <anchor id="KeepAlive" /><section><title>UDP Keep-Alive support for NAT pinhole tunneling</title> + <p>SIP users may be configured to periodically send small 4-byte UDP packets + to their remote (typically a proxy). This serves to keep any NAT pinholes + open, so that the SIP server can contact the client later thru the NAT box. + To enable: </p> + <ul> + <li><code>-keep_alive_period <secs></code> command line option + where <secs> is the period between keep alive messages. Typically ~20sec.</li> + <li>Add scenario action <source><exec int_cmd="keep_alive_on"/></source>. + Typically this would occur at the end of the registration scenario.</li> + <li>Add scenario action <source><exec int_cmd="keep_alive_off"/></source> + Typically at end of de-registration scenario (At point where it is ok for pinhole to close</li> + </ul> + <p>Keep alives are implemented on a per-user basis: the int_cmd changes the state for each user. + (e.g., the keep alive state is remembered into the next call for that user. + The keep_alive_period defaults to zero, which disable sending and keep alives.</p> + <p>As currently implemented, enabling keep alives, esp. For many users, may have a negative effect + on latency measurements. Sending keep alives requires walking thru the entire user list. + This occurs every 2 secs. Note that this overhead is entirely avoided when the keep alive period + is set to zero. Thus there is no performance impact when this feature is not enabled.</p> + </section> + <section><title>Statistics</title> <section><title>Response times</title> @@ -2768,6 +2838,7 @@ <tr><td>-ip_field nr</td><td>Set which field from the injection file contains the IP address from which the client will send its messages.<br/> If this option is omitted and the '-t ui' option is present, then field 0 is assumed.<br/> Use this option together with '-t ui'</td></tr> +<tr><td>-keep_alive <secs></td><td>Send small 4-byte UDP packets to their remote where <secs> is the period between keep alive messages. Typically ~20sec.See <a href="#KeepAlive">Keep Alive</a> </td></tr> <tr><td>-key keyword value</td><td>Set the generic parameter named "keyword" to "value".</td></tr> <tr><td>-l calls_limit</td><td>Set the maximum number of simultaneous calls. Once this limit is reached, traffic is decreased until the number of open calls goes down. <br/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: Zili P. <zl...@gm...> - 2010-06-20 04:29:26
|
I built ims bench sipp. Then I tried to run sipp with embedded uas and uac scenario. It failed with following errors. Why it fails? Any suggestions? I don't have the problem with a regular sipp. Thanks, -zili 2010-06-19 22:37:33.644: Too many exceptions - Leaving!. sipp: There were more errors, see '7092_errors.log' file sipp: The following events occured: 2010-06-19 22:37:33.546: Created CConsole 0x83d8918. 2010-06-19 22:37:33.644: call_socket=0 sock=6. 2010-06-19 22:37:33.644: Exception at sipp.cpp:2109. 2010-06-19 22:37:33.644: Using old method !!!, errno = 98 (Address already in use). 2010-06-19 22:37:33.644: Too many exceptions - Leaving!. 2010-06-19 22:37:33.729: final cleanup. |
From: <dve...@us...> - 2009-10-23 16:17:57
|
Revision: 590 http://sipp.svn.sourceforge.net/sipp/?rev=590&view=rev Author: dverbeir Date: 2009-10-23 16:17:50 +0000 (Fri, 23 Oct 2009) Log Message: ----------- Doc: Updated ims_bench doc to reflect support for TCP mode and a few minor other doc changes. Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/ims_bench/images/ims_bench_sys_overview.jpg doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml doc/trunk/src/documentation/content/xdocs/ims_bench/intro.xml doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/images/ims_bench_sys_overview.jpg =================================================================== (Binary files differ) Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml 2009-08-04 14:23:48 UTC (rev 589) +++ doc/trunk/src/documentation/content/xdocs/ims_bench/index.xml 2009-10-23 16:17:50 UTC (rev 590) @@ -26,6 +26,15 @@ <p>To learn how to use IMS Bench SIPp and how to create scenarios that take advantage of the features it brings, please refer to the <link href="reference.html">Reference documentation</link>.</p> + <p><b>New features in SVN revision 587 (28-Jul-2009):</b></p> + <ul> + <li>Support for SIP traffic over TCP. SIP traffic between each SIPp + instance and the System Under Test goes over a pair of TCP sockets.</li> + <li>Support in the <i>ims_bench</i> Perl script, for scenarios without + pre-registration. The script can now generate user data files suitable + for tests without a pre-registration phase (e.g. for Application Server + testing).</li> + </ul> </body> </document> Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/intro.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/ims_bench/intro.xml 2009-08-04 14:23:48 UTC (rev 589) +++ doc/trunk/src/documentation/content/xdocs/ims_bench/intro.xml 2009-10-23 16:17:50 UTC (rev 590) @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.2//EN" "http://apache.org/forrest/dtd/document-v12.dtd"> <document> <header> @@ -165,7 +165,7 @@ <p>The current implementation does not support IPSec. This means that the connection between the Test Systems and the P-CSCF component of the SUT is using unencrypted - SIP messages over UDP. + SIP messages over UDP or TCP. One should be aware that IPSec processing is likely to have a high performance impact on the P-CSCF component. The current implementation is therefore not suitable for evaluating the performance of a P-CSCF as it would normally be @@ -183,7 +183,7 @@ <p>The following are the known areas that have been intentionally left out:</p> <ul> - <li> Other transports than UDP (TCP, TLS) (known to be broken)</li> + <li> Other transports than UDP and TCP (TLS)</li> <li> IPv6 support (known to be broken)</li> <li> 3PCC operation (presumably broken)</li> <li> PCAP Play (not tested)</li> @@ -205,11 +205,15 @@ is loaded with the full set of scenarios. Originating scenario attempts are started according to a statistical distribution, and the scenario to execute is itself selected at random, as well as the users involved in the scenario. Each SIPp instance has its static - set of users that it emulates. Each user is assigned a unique IP address + UDP port + set of users that it emulates.</p> + <p>In UDP mode, each user is assigned a unique IP address + UDP port combination. By default, each SIPp instance has a single IP address and assigns different UDP ports to the users, but a compile time option and corresponding configuration allow supporting many IP addresses in a single SIPp instance in order to make the setup more realistic and avoid that traffic be blocked by overflow attack protections at the SUT.</p> + <p>In TCP mode, each SIPp instance has a single IP address and creates one pair of TCP sockets to + the SUT. The first socket is used for server side scenarios, and the second one is used for client + side scenarios. All users emulated by the SIPp instance share this single pair of TCP sockets.</p> <p>The manager is responsible for <ol> @@ -304,18 +308,29 @@ scenarios to remain very simple as they don't have to accommodate multiple possible paths and outcomes.</td></tr> - <tr><td>One UDP port per User</td> + <tr><td>One UDP port per User (in UDP mode)</td> <td>In order to be as realistic as possible, each user is associated with its own IP address + UDP port combination. Default operation uses a single IP address. One can then run multiple SIPp instances on the same system, each running on a different (real or virtual) IP address.</td></tr> - <tr><td>Multiple IP addresses</td> + <tr><td>Multiple IP addresses (in UDP mode)</td> <td>Optionally, to make it even more realistic or to optimize performance of the test system (Linux IP stack may scale better with the number of IP addresses than with the number of ports), it is also possible to distribute the users onto many IP addresses within the same SIPp instance.</td></tr> + <tr><td>One pair of TCP sockets per SIPp instance (in TCP mode)</td> + <td>Since each SIPp instance can simultaneously execute multiple scenarios, possibly + with both the client side user and the server side user represented by the same SIPp + instance, the incoming SIP traffic must be properly routed to the relevant emulated + user. In TCP mode, this is efficiently achieved by means of a single pair of TCP + sockets per SIPp instance. The first socket carries SIP traffic for server side + scenarios, and the second one is used for client side scenarios. All users + represented by the SIPp instance share this single pair of TCP sockets. + As in UDP mode, multiple SIPp instances can run on the same system, each one + assigned to a different (real or virtual) IP address.</td></tr> + <tr><td>Poisson distribution for scenario attempts</td> <td>New scenario attempts can be initiated following a statistical Poisson distribution; the user reservation procedure is scheduled so that the actual SIP Modified: doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml 2009-08-04 14:23:48 UTC (rev 589) +++ doc/trunk/src/documentation/content/xdocs/ims_bench/reference.xml 2009-10-23 16:17:50 UTC (rev 590) @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd"> <document> <header> @@ -74,11 +74,32 @@ Timer frequency (1000 HZ) ---> General setup ---> () Local version - append to kernel release <- set your own kernel prefix +</source> + <p>Then, rebuild your kernel and point your /etc/grub.conf to it. + <b>Wait! ...</b> Before you rebuild your kernel, you may want to include the + change for the next item below and only rebuild once!</p> + +<source> make dep bzImage modules modules_install install - - (modify /etc/grub.conf to point to this new kernel)</source></li> +</source></li> <li> + <p>When a SIPp load-generator instance must represent a large number of users + (beyond a few 10K users), and when it is configured to use a different IP + UDP + port combination for each user, the system may exhibit poor performance + (very long delay at startup, high CPU utilisation) making it unsuitable as a + Test System. This may be due to the default size of internal hash tables within + the IP stack of the Linux kernel.</p> + <p>In order to avoid this problem, you can change the UDP_HTABLE_SIZE constant and + rebuild your kernel (see above). + At time of writing, this setting was not an exposed kernel parameter and must + be changed directly in the source code, at + /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686/include/net/udp.h + (assuming sources as in above example). The constant can be set to 32768.</p> + <p>This only applies to UDP mode. This parameter has no (positive) impact on + TCP mode performance.</p> + </li> + <li> <p>In order for the timing precision to remain when measuring a time difference between two different physical systems, all systems that constitute the Test System should be synchronized with a better precision than what the standard NTP @@ -439,7 +460,7 @@ <p>Here is an example of the command to issue on one of the test systems to start one of the SIPp instances, assuming that the manager is at 192.168.1.1, that the instance will use 192.168.1.20 and that the SUT is at 192.168.1.100 and listens for SIP traffic - on port 5060: + on UDP port 5060: <source>./sipp -id 1 -i 192.168.1.20 -user_inf ./ims_users_1.inf -rmctrl 192.168.1.1:5000 192.168.1.100:5060 -trace_err -trace_cpumem -trace_scen -trace_retrans</source></p> @@ -587,7 +608,7 @@ Client: <source> Call-rate(length) Port Total-time Total-calls Remote-host - <i>[Desactivated]</i>(0 ms)/1.000s 5060 10.00 s 0 <i><b><sut_address></b></i>(UDP) + <i>[Desactivated]</i>(0 ms)/1.000s 5060 10.00 s 0 <i><b><sut_address></b></i>(<i><b><UDP or TCP></b></i>) 0 new calls during 1.000 s period 1 ms scheduler resolution 0 calls (limit 0) Peak was 0 calls, after 0 s 0 Running, 0 Paused, 0 Woken up, 0 Sync @@ -597,7 +618,7 @@ Server: <source> Port Total-time Total-calls Transport - 5060 695.00 s 0 UDP + 5060 695.00 s 0 <i><b><UDP or TCP></b></i> 0 new calls during 1.000 s period 1 ms scheduler resolution 0 calls Peak was 0 calls, after 0 s @@ -889,7 +910,7 @@ <!-- ********************************************* --> <!-- ********************************************* --> <anchor id="multi_scenario" /><section><title>Multi-scenario mode</title> - <p><comment>NEW!</comment>A key feature in IMS Bench SIPp is its support for + <p>A key feature in IMS Bench SIPp is its support for multiple scenarios within a single SIPp instance. Multiple scenarios are uploaded by the manager to the SIPp instance(s) and each call is executing one of the scenarios.</p> @@ -1015,12 +1036,17 @@ scenario creates.</li> </ol> - <p>In addition, IMS Bench SIPp will assign a different combination + <p>In UDP mode, IMS Bench SIPp will assign a different combination of IP address and UDP port number to each user that it represents. - This makes the traffic more realistic. Depending on the transport - mode used, it will distribute the users on the configured IP addresses + This makes the traffic more realistic. It will distribute the users + on one IP address or optionally, on several configured IP addresses, and then on the available ports on that address (see also <link href="#transports">SIPp Transport Modes</link>).</p> + <p>In TCP mode, each IMS Bench SIPp instance has a single IP address + and creates one pair of TCP sockets to the SUT. The first socket is + used for server side scenarios, and the second one is used for client + side scenarios. All users represented by the SIPp instance share this + single pair of TCP sockets.</p> </section> <!-- ********************************************* --> @@ -1048,7 +1074,7 @@ option) and that can be checked against a specified maximum value are called "metrics".</p> - <p>These metrics are defined within the scenario file in a <comment>new</comment> + <p>These metrics are defined within the scenario file in a new <info> section, as in the following example:</p> <source><![CDATA[ <info> @@ -1107,7 +1133,7 @@ of the manager or when the manager exits.</p> <p>The 'q' key is however still handled in the SIPp instance as well. If you press it, SIPp will stop placing new calls and will wait until all current calls go to their end. - During this phase, <comment>(NEW!)</comment> SIPp will regularly look at all calls that are + During this phase, SIPp will regularly look at all calls that are executing a pause command and will shorten the duration of this pause so as to speed up the exit while still trying to complete all calls in their normal flow. SIPp will then exit.</p> @@ -1817,7 +1843,7 @@ <tr> <td><strong>[%<<i>param</i>>]</strong></td> <td>-</td> - <td><comment>NEW!</comment>Use to inject a global generic parameters + <td>Use to inject a global generic parameters (see <code>-key</code> command line option and manager <a href="#scen_params">scenario parameters</a>).<br/> Example: <code><pause poisson="true" mean="%RingTime"/></code></td> @@ -1998,7 +2024,7 @@ by using the content of the variables for <a href="#branching">conditional branching</a>. - <p><comment>NEW!</comment>With the introduction by IMS + <p>With the introduction by IMS Bench SIPp of the concept of users, it is now also possible to store results of regular expression matching into user variables. These variables can then be used just @@ -2250,7 +2276,7 @@ <!-- ********************************************* --> <anchor id="inffile" /><section><title>Injecting values from an external CSV during calls</title> - <p><comment>NEW!</comment>In addition to the standard value injection mechanism provided by SIPp, + <p>In addition to the standard value injection mechanism provided by SIPp, IMS Bench SIPp supports a new, more user-centric mode of operation. This is triggered by the use of the <code>-user_inf</code> command line parameter. For the standard SIPp mode of operation, please refer to the @@ -2258,7 +2284,7 @@ <p>When the <code>-user_inf</code> command line parameter is used to specify a user data file, corresponding user entities are created - within SIPp and are each assigned a different IP and port combination. + within SIPp and, in UDP mode, are each assigned a different IP and port combination. Data from the specified file is also loaded into user specific data fields which can then be used within the scenarios.</p> @@ -2289,15 +2315,18 @@ </source> <p>In this example, all users are initially in pool 0 (for example, the pool of not registered users). The meaning of the remaining fields - depends of what the scenario files do with them but in case of + depends on what the scenario files do with them but in case of the provided IMS Benchmark scenarios, the user data fields have - the following meaning:</p> + the following meaning, and can be specified in the associated entries in + the <i>Users provisioning</i> menu of the <i>ims_bench</i> tool:</p> <ul> - <li>username part of the public identity of the user</li> - <li>domain part of the public identity of the user</li> - <li>authentication username</li> - <li>authentication realm</li> - <li>authentication password (AKA Key value)</li> + <li>username part of the public identity of the user: <i>PublicIdentityFormat</i></li> + <li>domain part of the public identity of the user: <i>UserDomain</i> + <br/>or IP address of the IMS Bench SIPp instance: <i>when DontPreRegisterButUseSippIP = 1</i> + (in order to execute scenarios without the need for a pre-registration phase)</li> + <li>authentication username: <i>PrivateIdentityFormat</i></li> + <li>authentication realm: <i>UserRealm</i></li> + <li>authentication password (AKA Key value): <i>UserPasswordFormat</i></li> <li>example extra data - not used</li> </ul> @@ -2322,7 +2351,7 @@ it goes to the label only if variable [$m] is set. This allows you to look for some string in a received packet and alter the flow either on that or a later part of the script.</p> - <warning>If you add special cases at the end, don’t forget to put + <warning>If you add special cases at the end, don't forget to put a label at the real end and jump to it at the end of the normal flow.</warning> <p><strong>Example:</strong></p> <p>The following example corresponds to the embedded '<a href="#scenario_branch">branchc</a>' (client side) scenario. @@ -2359,7 +2388,7 @@ take the challenge into account in order to compute a response in a next message.</p> - <p><comment>NEW!</comment> In addition, the <code>auth_assign_to</code> argument + <p>In addition, the <code>auth_assign_to</code> argument can specify, in the same <recv> command as the one where auth="true" is specified, a user or call variable into which to store the challenge for later usage (in a subsequent call and possibly for a different scenario @@ -2437,9 +2466,13 @@ <section><title>Various Topics</title> <anchor id="transports" /><section><title>SIPp Transport Modes</title> - <p>From the transport modes supported by the standard SIPp, only UDP transport is - currently supported by IMS Bench SIPp. It however adds a few options in the way UDP - is used, making it more closely resemble a set of separate client devices.</p> + <p>From the transport modes supported by the standard SIPp, IMS Bench SIPp currently + supports:</p> + <ul> + <li>UDP transport, on top of which it adds a few options (see below) making + it more closely resemble a set of separate client devices</li> + <li>TCP transport</li> + </ul> <section><title>UDP one socket per user</title> <p>In UDP "one socket per user" mode, each user that a SIPp instance represents corresponds to a separate UDP port that SIPp uses @@ -2447,12 +2480,18 @@ <p>All users however share a single IP address.</p> </section> <section><title>UDP multiple IP addresses</title> - <p>In UDP multiple IP addresses mode, SIPp distributes the users it + <p>In UDP "multiple IP addresses" mode, SIPp distributes the users it represents among a set of configured IP addresses. In case there are more users than IP addresses, different UDP ports are used for users that share the same IP address, thereby giving a unique IP adddress / UDP port combination to each user.</p> </section> + <section><title>TCP one pair of sockets per SIPp instance</title> + <p>In TCP mode, each SIPp instance has a single IP address and creates one pair + of TCP sockets to the SUT. The first socket carries SIP traffic for server side + scenarios, and the second one is used for client side scenarios.</p> + <p>All users represented by the SIPp instance share this single pair of TCP sockets.</p> + </section> </section> <!-- Tansport Modes --> <section><title>Running SIPp in background</title> @@ -2504,8 +2543,7 @@ by pressing 3, 6, 7, 8 or 9. You can also save the values in a CSV file using the -trace_stat option (see below).</p> - <p><comment>NEW!</comment>IMS Bench SIPp extends this mechanism - in several ways:</p> + <p>IMS Bench SIPp extends this mechanism in several ways:</p> <p>As most IMS Bench scenarios require measuring several delays, the start_rtd and rtd attributes have been extended to @@ -2610,9 +2648,9 @@ Number of unexpected specific messages received for new Call-ID. The message has been automatically answered by a 200 OK Currently, implemented for 'PING' message only.</li> - <li>Retransmissions:<comment> not documented </comment>Number of UDP retransmission.</li> - <li>Retransmissions2:<comment> NEW </comment>Stat collected at the server side are added to the client side.</li> - <li>FailedTimeoutInRtdOp:<comment> NEW </comment>Number of calls that exceed the defined <a href="#Time+Metrics">metrics</a> or for which the timeout specified in an rtd evaluation action was exceeded.</li> + <li>Retransmissions: Number of UDP retransmission.</li> + <li>Retransmissions2: Stat collected at the server side are added to the client side.</li> + <li>FailedTimeoutInRtdOp: Number of calls that exceed the defined <a href="#Time+Metrics">metrics</a> or for which the timeout specified in an rtd evaluation action was exceeded.</li> </ul> <p>In addition, two other statistics are gathered:</p> <ul><li>ResponseTime (see previous section)</li> @@ -2622,6 +2660,7 @@ and <a href="#calllengthrep">CallLengthRepartition</a> commands in the scenario.</p> </section> <!-- Counters --> </section> <!-- Statistics --> + <section><title>Error handling</title> <p>SIPp has advanced features to handle errors and unexpected events. They are detailed in the following sections.</p> @@ -2649,6 +2688,7 @@ be simply dropped.</li> </ul> </section> + <section><title>Retransmissions (UDP only)</title> <p>A retransmission mechanism exists in UDP transport mode. To activate the retransmission mechanism, the "send" command must include @@ -2665,6 +2705,7 @@ using the <code>-nr</code> command line option to globally disable the retransmission mechanism.</p> </section> + <section><title>Log files (error + log + screen)</title> <p>There are several ways to trace what is going on during your SIPp runs.</p> <ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-07-29 09:50:08
|
Revision: 588 http://sipp.svn.sourceforge.net/sipp/?rev=588&view=rev Author: srivanuj Date: 2009-07-29 09:49:53 +0000 (Wed, 29 Jul 2009) Log Message: ----------- Doc modification for check_it_inverse Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/doc/reference.xml Modified: doc/trunk/src/documentation/content/xdocs/doc/reference.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2009-07-28 13:50:38 UTC (rev 587) +++ doc/trunk/src/documentation/content/xdocs/doc/reference.xml 2009-07-29 09:49:53 UTC (rev 588) @@ -1458,7 +1458,13 @@ <td>check_it</td> <td>false</td> <td>if set to true, the call is marked as failed if - the regexp doesn't match.</td> + the regexp doesn't match. Can not be combined with check_it_inverse.</td> + </tr> + <tr> + <td>check_it_inverse</td> + <td>false</td> + <td>Inverse of check_it. iff set to true, the call is marked as failed if + the regexp does match. Can not be combined with check_it.</td> </tr> <tr> <td>assign_to</td> @@ -2434,6 +2440,11 @@ match (there might be several regexp that don't match during the call but the counter is increased only by one).</li> + <li>FailedRegexpShouldntMatch: + Number of failed calls because of regexp that shouldn't + match (there might be several regexp that shouldn't match + during the call but the counter is increased only by + one).</li> <li>FailedRegexpHdrNotFound: Number of failed calls because of regexp with hdr option but no matching header found.</li> @@ -2531,7 +2542,7 @@ <li>You can log sent and received SIP messages in <name_of_the_scenario>_<pid>_messages.log by using the command line parameter <code>-trace_msg</code>. The messages are time-stamped so that you can track them back.</li> - <li>You also can trace it using the <code>-trace_shortmsg</code> parameter. This logs the most important + <li>You also can trace it using the <code>-trace_shortmsg</code> parameter. This logs the most important values of a message as CSV into one line of the <scenario file name>_<pid>_shortmessages.log </li> <li>You can trace all unexpected messages or events in <name_of_the_scenario>_<pid>_errors.log by using the command line parameter <code>-trace_err</code>.</li> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dve...@us...> - 2009-07-28 13:50:48
|
Revision: 587 http://sipp.svn.sourceforge.net/sipp/?rev=587&view=rev Author: dverbeir Date: 2009-07-28 13:50:38 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Enh: (ims_bench branch) Clean manager exit when SIPp clients processed no single call during a step Enh: (ims_bench branch) Added SailFin benchmark configuration (includes configuration for SUT w/o registration and SailFin specific scenario tweaks) Modified Paths: -------------- sipp/branches/ims_bench/manager.cpp sipp/branches/ims_bench/scen/ims_uac.xml sipp/branches/ims_bench/scripts/doReport.pl sipp/branches/ims_bench/scripts/ims_bench.pl sipp/branches/ims_bench/scripts/ims_bench.xmt Added Paths: ----------- sipp/branches/ims_bench/scen/sailfin_uac.xml sipp/branches/ims_bench/scen/sailfin_uas.xml sipp/branches/ims_bench/scripts/sailfin.xmt Modified: sipp/branches/ims_bench/manager.cpp =================================================================== --- sipp/branches/ims_bench/manager.cpp 2009-07-28 10:16:12 UTC (rev 586) +++ sipp/branches/ims_bench/manager.cpp 2009-07-28 13:50:38 UTC (rev 587) @@ -16,6 +16,7 @@ * Author : David Verbeiren from Intel Corporation - July 2007 * Xavier Simonart from Intel Corporation - July 2007 * Philippe Lecluse from Intel Corporation - July 2007 + * Patrice Buriez from Intel Corporation - May 2009 */ #include <stdio.h> @@ -628,6 +629,11 @@ m_CurrentRun = m_NumRuns; UpdateRate(0); } + else if (t_Total == 0) { + xprintf(MGR_NORMAL, "No scenario attempted in this step ** STOP NOW **"); + m_CurrentRun = m_NumRuns; + UpdateRate(0); + } m_TimeEvent.erase(it); } else if (t_Run->config.max_calls) { Modified: sipp/branches/ims_bench/scen/ims_uac.xml =================================================================== --- sipp/branches/ims_bench/scen/ims_uac.xml 2009-07-28 10:16:12 UTC (rev 586) +++ sipp/branches/ims_bench/scen/ims_uac.xml 2009-07-28 13:50:38 UTC (rev 587) @@ -185,7 +185,7 @@ <!-- This will look in the message recieved from partner for an IE --> <!-- [rtd_info:[rtd_id:2][rtd_start_time:xyz]] and use that to compute --> <!-- the rtd (difference with the timestamp_rtd="2", so this measures --> - <!-- measure the time the INVITE took to reach the remote side). --> + <!-- the time the INVITE took to reach the remote side). --> <rtd_eval rtd="1" start="1" stop="r1"/> <!-- rtd[1] is between sending INVITE at UAC and receiving ACK at UAS. --> <!-- But we must substract ringing time from that: --> Added: sipp/branches/ims_bench/scen/sailfin_uac.xml =================================================================== --- sipp/branches/ims_bench/scen/sailfin_uac.xml (rev 0) +++ sipp/branches/ims_bench/scen/sailfin_uac.xml 2009-07-28 13:50:38 UTC (rev 587) @@ -0,0 +1,210 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<!-- This program is free software; you can redistribute it and/or --> +<!-- modify it under the terms of the GNU General Public License as --> +<!-- published by the Free Software Foundation; either version 2 of the --> +<!-- License, or (at your option) any later version. --> +<!-- --> +<!-- This program is distributed in the hope that it will be useful, --> +<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --> +<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> +<!-- GNU General Public License for more details. --> +<!-- --> +<!-- You should have received a copy of the GNU General Public License --> +<!-- along with this program; if not, write to the --> +<!-- Free Software Foundation, Inc., --> +<!-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> +<!-- --> +<!-- SailFin Calling scenario - UAC side --> +<!-- Scenario modified for a System Under Test based on --> +<!-- SailFin (see https://sailfin.dev.java.net) --> +<!-- --> +<!-- Author : David Verbeiren from Intel Corporation - July 2007 --> +<!-- Xavier Simonart from Intel Corporation - July 2007 --> +<!-- Philippe Lecluse from Intel Corporation - July 2007 --> +<!-- Patrice Buriez from Intel Corporation - November 2008 --> +<!-- --> + +<scenario name="sailfin_uac"> + <info> + <!-- The RTD metrics listed here are checked at the end of the call --> + <!-- In case one or more is exceeded, the call is marked as failed. --> + <metric ref="PX_TRT-SES1" rtd="1" max="8000"/> + <metric ref="PX_TRT-SES2" rtd="2" max="2000"/> + <metric ref="PX_TRT-REL1" rtd="3" max="2000"/> + <metric ref="CALL_DURATION" rtd="4"/> + </info> + +<!-- *** STEP 1 *** --> + <!-- This is a scenario preparation step and is executed before the time the --> + <!-- scenario is scheduled to really start, so everything is ready (including --> + <!-- at the partner SIPp - UAS - side) by then. --> + <!-- This prepation involves: --> + <!-- * Selecting a local user from a suitable pool --> + <!-- * Requesting a suitable user from a partner SIPp and instructing it to --> + <!-- run the appropriate UAS side scenario to run against this one. --> + + <nop> + <action> + <assign_user pool="0" scheme="rand_uni"/> <!-- Select user --> + <move_user pool="2"/> <!-- Reserve user until agreement --> + </action> <!-- with partner SIPp --> + </nop> + + <sendRmt type="req_user"> + <!-- The first 'sendRmt' command of a scenario, unless preceded by a 'recvRmt', --> + <!-- automatically selects a partner SIPp at random and remembers it for the duration of --> + <!-- the scenario. --> + <!-- The below parameters are to be encoded as IE (the mapping of param names to IEs is --> + <!-- done at scenario parsing time) --> + <param name="scenario" value="sailfin_uas"/> + <!-- The scenario that the partner must run. The scenario name given in 'value' will be --> + <!-- looked up in the locally loaded scenarios and converted to a scenario id (int) --> + <!-- before sending the message to the partner. Hence it is required that all partners --> + <!-- have the exact same set of scenarios in the same order. --> + <param name="from_uri" value="[field0]@[field1]"/> + <!-- We must give the From URI (local user we selected) so that the partner SIPp can --> + <!-- detect when it later gets the SIP call that is prepared in this step. --> + <!-- Note: We can't use the call_id for this because the SUT could potentially change --> + <!-- the call_id between both call legs (SIPp-1 -> SUT -> SIPp-2) --> + <param name="call_id" value="[call_id]"/> + <!-- We include our local call_id so the partner SIPp will include it in any message it --> + <!-- later sends to us (e.g. 'res_user' response below or 'res_call_info' later) --> + <!-- thereby allowing us to efficiently find back the call to which the message relates.--> + </sendRmt> + + <recvRmt type="res_user" timeout="8000"> + <!-- When we get the response from the partner SIPp, we store the remote user URI in call --> + <!-- variables for later usage in the scenario (as 'To' user). --> + <action> + <store_param param="user_name" assign_to="1" /> + <store_param param="user_domain" assign_to="2" /> + <store_param param="call_id" assign_to="3" /> <!-- TRICK: This is in fact the port --> + </action> + </recvRmt> + +<!-- *** STEP 2 *** --> + <!-- Now that our preparation steps are done, we wait for the time when the call must --> + <!-- actually start, according to the random scenario arrival distribution. --> + <sync crlf="true"> + <action> + <exec int_cmd="set_start_time"/> + </action> + </sync> + +<!-- *** STEP 3 *** --> + <!-- Now the SIP scenario really starts --> + + <send retrans="500" start_rtd="1,2,4"> <!-- We start timers 1, 2 and 4 --> + <![CDATA[ + + INVITE sip:[$1]@[$2]:[$3];transport=[transport] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + Max-Forwards: 70 + From: "[field0]" <sip:[field0]@[field1]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: "[$1]" <sip:[$1]@[$2]:[$3]> + Call-ID: [call_id] + CSeq: 1 INVITE + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport]> + 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> + + <recv response="100" optional="true"> + </recv> + + <recv response="180" optional="true"> + </recv> + + <recv response="183" optional="true"> + </recv> + + <!-- By adding rrs="true" (Record Route Sets), the route sets are --> + <!-- saved and used for following messages sent. --> + <recv response="200" rrs="true"> + <action> + <!-- SailFin requires that its 'fid' parameter be preserved --> + <ereg regexp="fid=[-a-zA-Z0-9_]*" search_in="hdr" header="Contact:" check_it="true" assign_to="6" /> + </action> + </recv> + + <send> + <![CDATA[ + + ACK sip:[$1]@[$2]:[$3];transport=[transport];[$6] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + Max-Forwards: 70 + [routes] + From: "[field0]" <sip:[field0]@[field1]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: "[$1]" <sip:[$1]@[$2]:[$3]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 1 ACK + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <!-- pause poisson="true" mean="%HoldTime"/ --> + <pause exponential="true" mean="%HoldTime"/> + + <send retrans="500" start_rtd="3"> + <![CDATA[ + + BYE sip:[$1]@[$2]:[$3];transport=[transport];[$6] SIP/2.0 + Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch] + Max-Forwards: 70 + [routes] + From: "[field0]" <sip:[field0]@[field1]:[local_port]>;tag=[pid]SIPpTag00[call_number] + To: "[$1]" <sip:[$1]@[$2]:[$3]>[peer_tag_param] + Call-ID: [call_id] + CSeq: 2 BYE + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport]> + Content-Length: 0 + + ]]> + </send> + + <recv response="200" crlf="true" rtd="3,4"> + <action> + <move_user pool="0"/> <!-- It is now safe to reuse the same user for another call --> + </action> + </recv> + +<!-- *** STEP 4 *** --> + <!-- After the scenario completes, we wait for timing measurements from the partner SIPp --> + <recvRmt type="res_call_info" timeout="8000"> + <action> + <rtd_eval rtd="2" start="2" stop="r2"/> + <!-- This will look in the message recieved from partner for an IE --> + <!-- [rtd_info:[rtd_id:2][rtd_start_time:xyz]] and use that to compute --> + <!-- the rtd (difference with the timestamp_rtd="2", so this measures --> + <!-- the time the INVITE took to reach the remote side). --> + <rtd_eval rtd="1" start="1" stop="r1"/> + <!-- rtd[1] is between sending INVITE at UAC and receiving ACK at UAS. --> + <!-- But we must substract ringing time from that: --> + <rtd_store rtd="5" rmt_rtd="5"/> + <!-- Store remote rtd[5] into local rtd[5] --> + <rtd_op op="sub" rtd="1" rtd1="1" rtd2="5"/> + <!-- Substract rtd[5] from rtd[1] and store the result into rtd[1]. --> + </action> + </recvRmt> + + <!-- definition of the response time repartition table (unit is ms) --> + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <!-- definition of the call length repartition table (unit is ms) --> + <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> + +</scenario> Added: sipp/branches/ims_bench/scen/sailfin_uas.xml =================================================================== --- sipp/branches/ims_bench/scen/sailfin_uas.xml (rev 0) +++ sipp/branches/ims_bench/scen/sailfin_uas.xml 2009-07-28 13:50:38 UTC (rev 587) @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!DOCTYPE scenario SYSTEM "sipp.dtd"> + +<!-- This program is free software; you can redistribute it and/or --> +<!-- modify it under the terms of the GNU General Public License as --> +<!-- published by the Free Software Foundation; either version 2 of the --> +<!-- License, or (at your option) any later version. --> +<!-- --> +<!-- This program is distributed in the hope that it will be useful, --> +<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --> +<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> +<!-- GNU General Public License for more details. --> +<!-- --> +<!-- You should have received a copy of the GNU General Public License --> +<!-- along with this program; if not, write to the --> +<!-- Free Software Foundation, Inc., --> +<!-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> +<!-- --> +<!-- SailFin Calling scenario - UAS side --> +<!-- Scenario modified for a System Under Test based on --> +<!-- SailFin (see https://sailfin.dev.java.net) --> +<!-- --> +<!-- Author : David Verbeiren from Intel Corporation - July 2007 --> +<!-- Xavier Simonart from Intel Corporation - July 2007 --> +<!-- Philippe Lecluse from Intel Corporation - July 2007 --> +<!-- Patrice Buriez from Intel Corporation - November 2008 --> +<!-- --> + +<scenario name="sailfin_uas"> + +<!-- *** STEP 1 *** --> + <!-- Wait for scenario to be initiated by a REQ_USER remote request which will specify --> + <!-- the ScenId -> UAS can then create a call with corresp scen and already feed it with --> + <!-- the received REQ_USER message. --> + + <recvRmt type="req_user"> + <action> + <assign_user pool="0" scheme="rand_uni"/> + <move_user pool="2"/> <!-- So we don't take it again --> + </action> + </recvRmt> + + <sendRmt type="res_user" crlf="true"> + <param name="user_name" value="[field0]"/> + <param name="user_domain" value="[field1]"/> + <param name="call_id" value="[local_port]"/> <!-- TRICK: This is in fact the port --> + </sendRmt> + +<!-- *** STEP 2 *** --> + <!-- This is now the actual scenario. Since we are the controlled partner in this --> + <!-- scenario (we got the 'req_user' request), our SIP scenario should start by a --> + <!-- expecting an incoming SIP message --> + + <recv request="INVITE" start_rtd="5,2" rrs="true"> + <!-- The timestamp, stored in rtd[2], will be reported to UAC side at end of --> + <!-- scenario so it can compute the time the INVITE took from UAC to UAS. --> + <!-- rtd[5] measures the ringing time (between receiving INVITE and sending --> + <!-- 200 OK). --> + <action> + <!-- SailFin requires that its 'fid' parameter be preserved --> + <ereg regexp="fid=[-a-zA-Z0-9_]*" search_in="hdr" header="Record-Route:" check_it="true" assign_to="6" /> + <exec int_cmd="set_start_time"/> + </action> + </recv> + + <send> + <![CDATA[ + + SIP/2.0 180 Ringing + [last_Via:] + [last_Record-Route:] + [last_From:] + [last_To:];tag=[pid]SIPpTag01[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport]> + [routes] + Content-Length: 0 + + ]]> + </send> + + <!-- Ringing Time --> + <!-- pause poisson="true" mean="%RingTime"/ --> + <pause exponential="true" mean="%RingTime"/> + + <send retrans="500" rtd="5"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_Record-Route:] + [last_From:] + [last_To:];tag=[pid]SIPpTag01[call_number] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport];[$6]> + [routes] + 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> + + <recv request="ACK" start_rtd="1"> + <!-- Timestamp of ACK received is stored in rtd[1] and we send it to UAC at the --> + <!-- end of the scenario so UAC can compute the full call establishment time --> + <!-- (from UAC sending INVITE to UAS receiving ACK, minus the ringing time) --> + </recv> + + <!-- Hold Time (call connected) - Controlled by UAC side in this scenario --> + + <recv request="BYE" rrs="true"> + </recv> + + <send crlf="true"> + <![CDATA[ + + SIP/2.0 200 OK + [last_Via:] + [last_Record-Route:] + [last_From:] + [last_To:] + [last_Call-ID:] + [last_CSeq:] + Contact: <sip:[field0]@[field1]:[local_port];transport=[transport];[$6]> + [routes] + Content-Length: 0 + + ]]> + </send> + + <pause milliseconds="4000"/> + <!-- Keep the call open for a while in case the 200 is lost to be --> + <!-- able to retransmit it if we receive the BYE again. --> + +<!-- *** STEP 3 *** --> + <!-- Move the user back to a pool from which it will be picked for new scenarios --> + <!-- and send to partner controlling the scenario the timing measurement we took --> + <!-- so it can compute all timings and check IHS criterions. --> + + <nop> + <action> + <move_user pool="0"/> <!-- Done with scen --> + </action> + </nop> + + <sendRmt type="res_call_info"> + <param name="rtd_info" rtd="1" info="timestamp"/> + <!-- This sends the timestamp stored in start_time of rtd[1] --> + <param name="rtd_info" rtd="2" info="timestamp"/> + <param name="rtd_info" rtd="5" info="value"/> + <!-- This sends the value (elapse time) that was measured by rtd[5] --> + </sendRmt> + + <!-- definition of the response time repartition table (unit is ms) --> + <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/> + + <!-- definition of the call length repartition table (unit is ms) --> + <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/> + +</scenario> Modified: sipp/branches/ims_bench/scripts/doReport.pl =================================================================== --- sipp/branches/ims_bench/scripts/doReport.pl 2009-07-28 10:16:12 UTC (rev 586) +++ sipp/branches/ims_bench/scripts/doReport.pl 2009-07-28 13:50:38 UTC (rev 587) @@ -2138,7 +2138,9 @@ $report_test_info .= "<tr class=\"table_title\"><th>Parameter Name</th><th>Parameter Value</th><th>Parameter Info</th></tr>\n"; $report_test_info .= "<tr><td>RingTime<td>$config->{scen_param}->{RingTime}->{value}<td>Ringing Time (ms)</tr>\n"; $report_test_info .= "<tr><td>HoldTime</td><td>$config->{scen_param}->{HoldTime}->{value}<td>Conversation Time (ms)</tr>\n"; - $report_test_info .= "<tr><td>RegistrationExpire<td>$config->{scen_param}->{RegistrationExpire}->{value}<td>Registration Timeout (ms)</tr>\n"; + if (defined($config->{scen_param}->{RegistrationExpire})) { + $report_test_info .= "<tr><td>RegistrationExpire<td>$config->{scen_param}->{RegistrationExpire}->{value}<td>Registration Timeout (ms)</tr>\n"; + } $report_test_info .= "<tr><td>TransientTime<td>".(($config->{param}->{transient_time}->{value})/1000)."<td>Time after the start of a step for which data is ignored (in seconds)</tr>\n"; $report_test_info .= "</table></td></tr></table>\n"; $report_test_info .= "</p>"; Modified: sipp/branches/ims_bench/scripts/ims_bench.pl =================================================================== --- sipp/branches/ims_bench/scripts/ims_bench.pl 2009-07-28 10:16:12 UTC (rev 586) +++ sipp/branches/ims_bench/scripts/ims_bench.pl 2009-07-28 13:50:38 UTC (rev 587) @@ -111,7 +111,7 @@ $total += $scenarios->{$name}->{ratio}; } if ($total != 100) { - print "\nPlease make sure the sum of all scenario ratios is 100 % (currentlty $total %)!\n"; + print "\nPlease make sure the sum of all scenario ratios is 100 % (currently $total %)!\n"; $$showMenuRef = 0; } else { @@ -524,12 +524,19 @@ } $cfg .= " <!-- Scenario -->\n"; + my $peer_compat = 1; foreach my $scen_name (keys(%{$traffic_set->{scenario}})) { my $s = \${traffic_set}->{scenario}->{$scen_name}; $cfg .= " <scenario name=\"" . $scen_name . "\" max_ihs=\"" . $$s->{max_ihs} . "\"/>\n"; + if (defined($$s->{peer})) { + $peer_compat = 0; + $cfg .= " <scenario name=\"" . $$s->{peer} . "\"/>\n"; + } } - $cfg .= " <scenario name=\"ims_uas\"/>\n"; - $cfg .= " <scenario name=\"ims_msgs\"/>\n"; + if ($peer_compat) { + $cfg .= " <scenario name=\"ims_uas\"/>\n"; + $cfg .= " <scenario name=\"ims_msgs\"/>\n"; + } $cfg .= "</configuration>\n"; @@ -541,20 +548,22 @@ print MGR "<exec cmd=\"./run_sipp.sh\"/>\n\n"; } - my $prereg = "<!-- Pre-Registration Phase -->\n"; - my $prereg_rate = $profile->{param}->{PreRegistrationRate}->{value}; - my $prereg_calls = $provisioning->{param}->{PercentRegisteredSubscribers}->{value} - * $provisioning->{param}->{TotalProvisionedSubscribers}->{value} / 100 / $num_ts; - $prereg .= "<run cps=\"" . $prereg_rate ."\""; - $prereg .= " max_calls=\"" . $prereg_calls . "\""; - $prereg .= " distribution=\"constant\" sync_mode=\"off\" use_scen_max_ihs=\"no\""; - $prereg .= " max_global_ihs=\"" . $profile->{param}->{PreRegistrationMaxIHS}->{value} . "\""; - $prereg .= " stats=\"1000\">\n"; - $prereg .= " <scenario name=\"ims_reg\" ratio=\"100\"/>\n"; - $prereg .= "</run>\n"; + unless (defined($provisioning->{param}->{DontPreRegisterButUseSippIP}) && ($provisioning->{param}->{DontPreRegisterButUseSippIP}->{value} ne 0)) { + my $prereg = "<!-- Pre-Registration Phase -->\n"; + my $prereg_rate = $profile->{param}->{PreRegistrationRate}->{value}; + my $prereg_calls = $provisioning->{param}->{PercentRegisteredSubscribers}->{value} + * $provisioning->{param}->{TotalProvisionedSubscribers}->{value} / 100 / $num_ts; + $prereg .= "<run cps=\"" . $prereg_rate ."\""; + $prereg .= " max_calls=\"" . $prereg_calls . "\""; + $prereg .= " distribution=\"constant\" sync_mode=\"off\" use_scen_max_ihs=\"no\""; + $prereg .= " max_global_ihs=\"" . $profile->{param}->{PreRegistrationMaxIHS}->{value} . "\""; + $prereg .= " stats=\"1000\">\n"; + $prereg .= " <scenario name=\"ims_reg\" ratio=\"100\"/>\n"; + $prereg .= "</run>\n"; - print MGR $prereg; - print MGR "\n"; + print MGR $prereg; + print MGR "\n"; + } my $stir = "<!-- Stir Phase -->\n"; my $stir_time = convert_value($profile->{param}, "StirTime"); @@ -639,8 +648,19 @@ $base_path = "." if (!defined($base_path)); my $scen_path = "scen"; my @scen_files = keys(%{$xmlData->{traffic_set}->{scenario}}); - push(@scen_files, "ims_uas", "ims_msgs"); + my @peer_files = (); foreach my $scen_name (@scen_files) { + my $s = \$xmlData->{traffic_set}->{scenario}->{$scen_name}; + if (defined($$s->{peer})) { + push(@peer_files, $$s->{peer}); + } + } + if (@peer_files) { + push(@scen_files, @peer_files); + } else { + push(@scen_files, "ims_uas", "ims_msgs"); + } + foreach my $scen_name (@scen_files) { my $scen_file = $scen_name.".xml"; my $fn = $scen_path.$PathSep.$scen_file; print " Copying $fn\n"; @@ -660,10 +680,14 @@ my $subs_start = 0; for(my $ts=0; $ts < $num_ts; $ts++) { my $tsid = $ts + 1; + my $ts_ip = $setup->{test_system}[$ts]->{IP}->{value}; # Generate users file and run script for each TS my $users = $prov->{param}->{TotalProvisionedSubscribers}->{value}; my $users_per_ts = $users / $num_ts; my $domain = $prov->{param}->{UserDomain}->{value}; + if (defined($prov->{param}->{DontPreRegisterButUseSippIP}) && ($prov->{param}->{DontPreRegisterButUseSippIP}->{value} ne 0)) { + $domain = $ts_ip; + } my $realm = $prov->{param}->{UserRealm}->{value}; my $users_fn = $path2."ims_users_$tsid.inf"; print " Generating user data files for $users_per_ts users for TS$tsid."; @@ -682,11 +706,14 @@ $subs_start = $i; close(USERS); - my $ts_ip = $setup->{test_system}[$ts]->{IP}->{value}; # Generate run script for each TS print " Generating run script for TS$tsid....\n"; + my $trsp = ""; + if (defined($setup->{param}->{TransportTCP}) && ($setup->{param}->{TransportTCP}->{value} ne 0)) { + $trsp = " -t t1"; + } my $cmd = "$env_cmd\n" . - "./sipp -id $tsid -i $ts_ip" . + "./sipp -id $tsid" . $trsp . " -i $ts_ip" . " -user_inf ./ims_users_$tsid.inf" . " -rmctrl $master_ip:5000" . " $sut_ip:$sut_port" . Modified: sipp/branches/ims_bench/scripts/ims_bench.xmt =================================================================== --- sipp/branches/ims_bench/scripts/ims_bench.xmt 2009-07-28 10:16:12 UTC (rev 586) +++ sipp/branches/ims_bench/scripts/ims_bench.xmt 2009-07-28 13:50:38 UTC (rev 587) @@ -18,8 +18,12 @@ <!-- Author : David Verbeiren from Intel Corporation - July 2007 --> <!-- Xavier Simonart from Intel Corporation - July 2007 --> <!-- Philippe Lecluse from Intel Corporation - July 2007 --> +<!-- Patrice Buriez from Intel Corporation - July 2009 --> <!-- --> +<!-- This is a template configuration file to be used by ims_bench.pl. --> + + <config> <traffic_time_profile> @@ -53,6 +57,8 @@ <param> <TotalProvisionedSubscribers value="24000" info="Total number of provisionned subscribers"/> + <DontPreRegisterButUseSippIP value="0" + info="Do not include a pre-registration phase. Use the SIPp Test System IP Address as user domain instead."/> <PercentRegisteredSubscribers value="80" info="Percentage of subscribers who will be pre-registered during the preamble phase (in percent)"/> <UserDomain value="open-ims.test" @@ -72,9 +78,9 @@ <traffic_set> <scenario> <ims_reg ratio="2.5" max_ihs="0.1"/> - <ims_uac ratio="50" max_ihs="0.1"/> + <ims_uac ratio="50" max_ihs="0.1" peer="ims_uas"/> <ims_dereg ratio="2.5" max_ihs="0.1"/> - <ims_msgc ratio="30" max_ihs="0.1"/> + <ims_msgc ratio="30" max_ihs="0.1" peer="ims_msgs"/> <ims_rereg ratio="15" max_ihs="0.1"/> </scenario> @@ -99,8 +105,9 @@ <setup> <param> <ManagerIP value="192.168.0.1" info="IP Address of the Manager"/> - <ExecuteSIPp value="0" info="Whether or not (0/1) the SIPp instances should be started by the manager. If enabled, the SIPp instances run in the background and their output cannot be viewed. If disabled, the SIPp instances must be started manually."/> - <MaxTimeOffset value="250" info="Maximum time offset (in microseconds) allowed between any Test System and the manager. This is checked at the begining of the benchmark in order to avoid doing a run with invalid time measurements. 0 means no check (not recommended)."/> + <ExecuteSIPp value="0" info="Whether or not (0/1) the SIPp instances should be started by the manager. If enabled, the SIPp instances run in the background and their output cannot be viewed. If disabled, the SIPp instances must be started manually."/> + <MaxTimeOffset value="250" info="Maximum time offset (in microseconds) allowed between any Test System and the manager. This is checked at the begining of the benchmark in order to avoid doing a run with invalid time measurements. 0 means no check (not recommended)."/> + <TransportTCP value="0" info="Use TCP-mode IMS Benchmark SIPp"/> </param> <system_under_test> Added: sipp/branches/ims_bench/scripts/sailfin.xmt =================================================================== --- sipp/branches/ims_bench/scripts/sailfin.xmt (rev 0) +++ sipp/branches/ims_bench/scripts/sailfin.xmt 2009-07-28 13:50:38 UTC (rev 587) @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> + +<!-- This program is free software; you can redistribute it and/or --> +<!-- modify it under the terms of the GNU General Public License as --> +<!-- published by the Free Software Foundation; either version 2 of the --> +<!-- License, or (at your option) any later version. --> +<!-- --> +<!-- This program is distributed in the hope that it will be useful, --> +<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of --> +<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> +<!-- GNU General Public License for more details. --> +<!-- --> +<!-- You should have received a copy of the GNU General Public License --> +<!-- along with this program; if not, write to the --> +<!-- Free Software Foundation, Inc., --> +<!-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA --> +<!-- --> +<!-- Author : David Verbeiren from Intel Corporation - July 2007 --> +<!-- Xavier Simonart from Intel Corporation - July 2007 --> +<!-- Philippe Lecluse from Intel Corporation - July 2007 --> +<!-- Patrice Buriez from Intel Corporation - July 2009 --> +<!-- --> + +<!-- Template configuration file to be used by ims_bench.pl. --> +<!-- This template is customized to configure tests runs for a System --> +<!-- Under Test based on SailFin (see https://sailfin.dev.java.net). --> + +<config> + + <traffic_time_profile> + <param> + <StepNumber value="999" + info="Number of steps in the actual benchmark phase of the run"/> + <StepTime value="10" + info="Duration of each step of the run (in minutes)"/> + <InitialSAPS value="200" + info="Load applied to the SUT at the first step (in SAPS)"/> + <SAPSIncreaseAmount value="100" + info="System load increase at each step (in SAPS)"/> + <StepTransientTime value="60" + info="Time after the start of a step for which data is ignored (in seconds)"/> + + <StirTime value="10" + info="Duration of stir phase where the SUT is gradually brought up to a load of 'InitialSAPS' (in minutes)"/> + <StirSteps value="1" + info="Number of steps in the stir phase"/> + <StirMaxIHS value="1" + info="Accepted percentage of inadequately handled scenarios during the stir phase (in percent)"/> + </param> + </traffic_time_profile> + + <provisioning> + <param> + <TotalProvisionedSubscribers value="800000" + info="Total number of provisionned subscribers"/> + <DontPreRegisterButUseSippIP value="1" + info="Do not include a pre-registration phase. Use the SIPp Test System IP Address as user domain instead."/> + <UserDomain value="sippIP" + info="Primary domain to which provisionned users belong"/> + <PublicIdentityFormat value="subs%06d" + info="Format used to generate public identity of users. The %d parameter gets replaced by the index of the subscriber."/> + <UserRealm value="open-ims.test" + info="Primary domain to which provisionned users belong (for authentication purpose)"/> + <PrivateIdentityFormat value="usim%06d" + info="Format used to generate private identity of users. The %d parameter gets replaced by the index of the subscriber."/> + <UserPasswordFormat value="abcdefgh" + info="Format used to generate passwords identity of users. If present, a %d parameter gets replaced by the index of the subscriber."/> + </param> + </provisioning> + + <traffic_set> + <scenario> + <sailfin_uac ratio="100" max_ihs="1" peer="sailfin_uas"/> + </scenario> + + <param> + <HoldTime value="60" + info="Average call hold time (in seconds)"/> + <HoldTimeDistr value="exponential" + info="Random distribution of the call hold time (poisson/exponential)"/> + <RingTime value="3" + info="Average ringing time (in seconds)"/> + <RingTimeDistr value="exponential" + info="Random distribution of the ringing time (poisson/exponential)"/> + </param> + </traffic_set> + + <setup> + <param> + <ManagerIP value="192.168.0.1" info="IP Address of the Manager"/> + <ExecuteSIPp value="0" info="Whether or not (0/1) the SIPp instances should be started by the manager. If enabled, the SIPp instances run in the background and their output cannot be viewed. If disabled, the SIPp instances must be started manually."/> + <MaxTimeOffset value="250" info="Maximum time offset (in microseconds) allowed between any Test System and the manager. This is checked at the begining of the benchmark in order to avoid doing a run with invalid time measurements. 0 means no check (not recommended)."/> + <TransportTCP value="1" info="Use TCP-mode IMS Benchmark SIPp"/> + </param> + + <system_under_test> + <IP value="192.168.0.100" info="IP Address of the SUT"/> + <Port value="5060" info="Port on which the SUT is listening for SIP traffic"/> + </system_under_test> + + <test_system> + <IP value="192.168.0.1" info="IP Address of the Test System"/> + <ExecPath value="/usr/local/sipp" info="Path on the Test System where the IMS Benchmark SIPp instance will be executed. This path must exist prior to running the benchmark."/> + </test_system> + + </setup> + + <options> + <BasePath value=".." info="Path, relative to the target path (one directory level below OutputPath), to the IMS Bench SIPp installation. Execution scripts expect to find the SIPp binary at this location."/> + <OutputPath value="." info="Path where a directory containing all files necessary for benchmark execution will be created."/> + </options> + +</config> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-07-28 10:16:21
|
Revision: 586 http://sipp.svn.sourceforge.net/sipp/?rev=586&view=rev Author: srivanuj Date: 2009-07-28 10:16:12 +0000 (Tue, 28 Jul 2009) Log Message: ----------- Fix:For IPV6, command line param was ignored, and corrrections for PCAP play - Provider , Mitko-mitev. Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/sipp.cpp Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2009-06-30 12:02:56 UTC (rev 585) +++ sipp/trunk/call.cpp 2009-07-28 10:16:12 UTC (rev 586) @@ -151,13 +151,13 @@ * Look for "c=IN IP6 " pattern in the message and extract the following value * which should be IPv6 address */ -uint8_t get_remote_ipv6_media(char *msg, struct in6_addr addr) +uint8_t get_remote_ipv6_media(char *msg, struct in6_addr *addr) { char pattern[] = "c=IN IP6 "; char *begin, *end; char ip[128]; - memset(&addr, 0, sizeof(addr)); + memset(addr, 0, sizeof(*addr)); memset(ip, 0, 128); begin = strstr(msg, pattern); @@ -170,7 +170,7 @@ if (!end) return 0; strncpy(ip, begin, end - begin); - if (!inet_pton(AF_INET6, ip, &addr)) { + if (!inet_pton(AF_INET6, ip, addr)) { return 0; } return 1; @@ -217,7 +217,7 @@ uint16_t video_port, audio_port; if (media_ip_is_ipv6) { struct in6_addr ip_media; - if (get_remote_ipv6_media(msg, ip_media)) { + if (get_remote_ipv6_media(msg, &ip_media)) { audio_port = get_remote_port_media(msg, PAT_AUDIO); if (audio_port) { /* We have audio in the SDP: set the to_audio addr */ Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-06-30 12:02:56 UTC (rev 585) +++ sipp/trunk/sipp.cpp 2009-07-28 10:16:12 UTC (rev 586) @@ -4937,7 +4937,10 @@ ERROR("Unknown RTP address '%s'.\n" "Use 'sipp -h' for details", media_ip); } - + + memset(&media_sockaddr,0,sizeof(struct sockaddr_storage)); + media_sockaddr.ss_family = local_addr->ai_addr->sa_family; + memcpy(&media_sockaddr, local_addr->ai_addr, SOCK_ADDR_SIZE( @@ -5203,12 +5206,10 @@ get_inet_address( _RCAST(struct sockaddr_storage *, local_addr->ai_addr))); } else { - if (!(local_sockaddr.ss_family == AF_INET6)) { - memcpy(&local_sockaddr, - local_addr->ai_addr, - SOCK_ADDR_SIZE( - _RCAST(struct sockaddr_storage *,local_addr->ai_addr))); - } + memcpy(&local_sockaddr, + local_addr->ai_addr, + SOCK_ADDR_SIZE( + _RCAST(struct sockaddr_storage *,local_addr->ai_addr))); } freeaddrinfo(local_addr); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-05-28 11:01:27
|
Revision: 584 http://sipp.svn.sourceforge.net/sipp/?rev=584&view=rev Author: srivanuj Date: 2009-05-28 11:01:17 +0000 (Thu, 28 May 2009) Log Message: ----------- Fix: Media thread was left running after call ends.- Provided by Nic Bellamy. Modified Paths: -------------- sipp/trunk/call.cpp sipp/trunk/send_packets.c Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2009-04-30 07:44:03 UTC (rev 583) +++ sipp/trunk/call.cpp 2009-05-28 11:01:17 UTC (rev 584) @@ -624,6 +624,14 @@ tdm_map[tdm_map_number] = false; } +# ifdef PCAPPLAY + if (media_thread != 0) { + pthread_cancel(media_thread); + pthread_join(media_thread, NULL); + } +#endif + + free(start_time_rtd); free(rtd_done); free(debugBuffer); @@ -3803,8 +3811,12 @@ #define PTHREAD_STACK_MIN 16384 #endif //pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN); - pthread_attr_setdetachstate(&attr, - PTHREAD_CREATE_DETACHED); + if (media_thread != 0) { + // If a media_thread is already active, kill it before starting a new one + pthread_cancel(media_thread); + pthread_join(media_thread, NULL); + media_thread = 0; + } int ret = pthread_create(&media_thread, &attr, send_wrapper, (void *) play_args); if(ret) Modified: sipp/trunk/send_packets.c =================================================================== --- sipp/trunk/send_packets.c 2009-04-30 07:44:03 UTC (rev 583) +++ sipp/trunk/send_packets.c 2009-05-28 11:01:17 UTC (rev 584) @@ -54,6 +54,7 @@ #include <errno.h> #include <string.h> #include <fcntl.h> +#include <pthread.h> #include "send_packets.h" #include "prepare_pcap.h" @@ -112,7 +113,15 @@ /*Safe threaded version*/ void do_sleep (struct timeval *, struct timeval *, struct timeval *, struct timeval *); +void send_packets_cleanup(void *arg) +{ + int sock = (int) arg; + // Close send socket + close(sock); +} + + int send_packets (play_args_t * play_args) { @@ -171,6 +180,13 @@ memcpy(&(from6.sin6_addr.s6_addr), &(((struct sockaddr_in6 *)(void *) from)->sin6_addr.s6_addr), sizeof(from6.sin6_addr.s6_addr)); } + + /* Ensure the sender socket is closed when the thread exits - this + * allows the thread to be cancelled cleanly. + */ + pthread_cleanup_push(send_packets_cleanup, ((void *) sock)); + + while (pkt_index < pkt_max) { memcpy(udp, pkt_index->data, pkt_index->pktlen); port_diff = ntohs (udp->uh_dport) - pkts->base; @@ -228,7 +244,8 @@ pkt_index++; } - close(sock); + /* Closing the socket is handled by pthread_cleanup_push()/pthread_cleanup_pop() */ + pthread_cleanup_pop(1); return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-04-30 07:44:07
|
Revision: 583 http://sipp.svn.sourceforge.net/sipp/?rev=583&view=rev Author: srivanuj Date: 2009-04-30 07:44:03 +0000 (Thu, 30 Apr 2009) Log Message: ----------- Enh:Created sipp-gui repo. Added Paths: ----------- sipp-gui/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-04-16 04:34:54
|
Revision: 582 http://sipp.svn.sourceforge.net/sipp/?rev=582&view=rev Author: srivanuj Date: 2009-04-16 04:34:52 +0000 (Thu, 16 Apr 2009) Log Message: ----------- Enh: Providing a different exit code (-2) for sipp bind error, provided by Mikael Rudholm Modified Paths: -------------- sipp/trunk/screen.cpp sipp/trunk/screen.hpp sipp/trunk/sipp.cpp Modified: sipp/trunk/screen.cpp =================================================================== --- sipp/trunk/screen.cpp 2009-04-16 04:25:38 UTC (rev 581) +++ sipp/trunk/screen.cpp 2009-04-16 04:34:52 UTC (rev 582) @@ -267,11 +267,19 @@ if(fatal) { if(!screen_inited) { + if(error == EADDRINUSE) { + exit(EXIT_BIND_ERROR); + } else { exit(EXIT_FATAL_ERROR); + } } else { + if(error == EADDRINUSE) { + screen_exit(EXIT_BIND_ERROR); + } else { screen_exit(EXIT_FATAL_ERROR); } } + } } extern "C" { Modified: sipp/trunk/screen.hpp =================================================================== --- sipp/trunk/screen.hpp 2009-04-16 04:25:38 UTC (rev 581) +++ sipp/trunk/screen.hpp 2009-04-16 04:34:52 UTC (rev 582) @@ -45,6 +45,7 @@ #define EXIT_TEST_RES_UNKNOWN 98 #define EXIT_OTHER 99 #define EXIT_FATAL_ERROR -1 +#define EXIT_BIND_ERROR -2 void screen_set_exename(char * exe_name); void screen_init(void (*exit_handler)()); Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-04-16 04:25:38 UTC (rev 581) +++ sipp/trunk/sipp.cpp 2009-04-16 04:34:52 UTC (rev 582) @@ -1902,8 +1902,8 @@ if (try_counter == 0) { if (control_port) { - ERROR("Unable to bind remote control socket to UDP port %d: %s", - control_port, strerror(errno)); + ERROR_NO("Unable to bind remote control socket to UDP port %d", + control_port); } else { WARNING("Unable to bind remote control socket (tried UDP ports %d-%d): %s", firstport, port - 1, strerror(errno)); @@ -3622,6 +3622,7 @@ " 97: exit on internal command. Calls may have been processed\n" " 99: Normal exit without calls processed\n" " -1: Fatal error\n" + " -2: Fatal error binding a socket\n" "\n" "\n" "Example:\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-04-16 04:25:45
|
Revision: 581 http://sipp.svn.sourceforge.net/sipp/?rev=581&view=rev Author: srivanuj Date: 2009-04-16 04:25:38 +0000 (Thu, 16 Apr 2009) Log Message: ----------- Fix: Removing .xml from logs and stats files, provided by Mikael Rudholm Modified Paths: -------------- sipp/trunk/sipp.cpp Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-04-16 04:07:17 UTC (rev 580) +++ sipp/trunk/sipp.cpp 2009-04-16 04:25:38 UTC (rev 581) @@ -4468,11 +4468,12 @@ if (!strcmp(argv[argi - 1], "-sf")) { scenario_file = new char [strlen(argv[argi])+1] ; sprintf(scenario_file,"%s", argv[argi]); + scenario_file = remove_pattern (scenario_file, (char*)".xml"); if (useLogf == 1) { rotate_logfile(); } main_scenario = new scenario(argv[argi], 0); - main_scenario->stats->setFileName(argv[argi], (char*)".csv"); + main_scenario->stats->setFileName(scenario_file, (char*)".csv"); } else if (!strcmp(argv[argi - 1], "-sn")) { int i = find_scenario(argv[argi]); @@ -4720,8 +4721,6 @@ if (scenario_file == NULL) { scenario_file = new char [ 5 ] ; sprintf(scenario_file, "%s", "sipp"); - } else { - scenario_file = remove_pattern (scenario_file, (char*)".xml"); } screen_init(print_last_stats); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-04-16 04:07:19
|
Revision: 580 http://sipp.svn.sourceforge.net/sipp/?rev=580&view=rev Author: srivanuj Date: 2009-04-16 04:07:17 +0000 (Thu, 16 Apr 2009) Log Message: ----------- Fix: The current wrap function is not able to handle words longer than the, provided by Mikael Rudholm Modified Paths: -------------- sipp/trunk/sipp.cpp Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-04-15 12:10:03 UTC (rev 579) +++ sipp/trunk/sipp.cpp 2009-04-16 04:07:17 UTC (rev 580) @@ -3536,14 +3536,19 @@ } } else { int m; + int move_back = 0; - out[j] = '\0'; //printf("Before wrapping (pos = %d, k = %d, j = %d):\n%-*s%s\n", pos, k, j, offset, "", out); out[k] = '\n'; pos = j - k; + // move_back is used to step back in the in and out buffers when a + // word is longer than useoffset. + if (i > (k + useoffset)) { + move_back = i - (k + useoffset); + i -= move_back; + } k++; - out[j] = '\0'; out = (char *)realloc(out, alloced += useoffset); if (!out) { ERROR_NO("realloc"); @@ -3554,8 +3559,7 @@ } out[k + m] = ' '; } - j += useoffset; - out[j] = '\0'; + j += useoffset - move_back; //printf("After wrapping (pos = %d, k = %d):\n%-*s%s\n", pos, k, offset, "", out); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-04-15 12:10:13
|
Revision: 579 http://sipp.svn.sourceforge.net/sipp/?rev=579&view=rev Author: srivanuj Date: 2009-04-15 12:10:03 +0000 (Wed, 15 Apr 2009) Log Message: ----------- add the attribute check_it_inverse to the ereg action, provided by Mikael Rudholm Modified Paths: -------------- sipp/trunk/actions.cpp sipp/trunk/actions.hpp sipp/trunk/call.cpp sipp/trunk/call.hpp sipp/trunk/scenario.cpp sipp/trunk/sipp.cpp sipp/trunk/stat.cpp sipp/trunk/stat.hpp Modified: sipp/trunk/actions.cpp =================================================================== --- sipp/trunk/actions.cpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/actions.cpp 2009-04-15 12:10:03 UTC (rev 579) @@ -91,19 +91,21 @@ { if (M_action == E_AT_ASSIGN_FROM_REGEXP) { if(M_lookingPlace == E_LP_MSG) { - printf("Type[%d] - regexp[%s] where[%s] - checkIt[%d] - $%s", + printf("Type[%d] - regexp[%s] where[%s] - checkIt[%d] - checkItInverse[%d] - $%s", M_action, M_regularExpression, "Full Msg", M_checkIt, + M_checkItInverse, display_scenario->allocVars->getName(M_varId)); } else { - printf("Type[%d] - regexp[%s] where[%s-%s] - checkIt[%d] - $%s", + printf("Type[%d] - regexp[%s] where[%s-%s] - checkIt[%d] - checkItInverse[%d] - $%s", M_action, M_regularExpression, "Header", M_lookingChar, - M_checkIt, display_scenario->allocVars->getName(M_varId)); + M_checkIt, + M_checkItInverse, display_scenario->allocVars->getName(M_varId)); } } else if (M_action == E_AT_EXECUTE_CMD) { printf("Type[%d] - command[%-32.32s]", M_action, M_message_str[0]); @@ -159,6 +161,7 @@ CAction::T_Comparator CAction::getComparator () { return(M_comp); } bool CAction::getCheckIt() { return(M_checkIt); } +bool CAction::getCheckItInverse() { return(M_checkItInverse); } bool CAction::getCaseIndep() { return(M_caseIndep); } bool CAction::getHeadersOnly() { return(M_headersOnly); } int CAction::getOccurence() { return(M_occurence); } @@ -180,6 +183,8 @@ { M_lookingPlace = P_value; } void CAction::setCheckIt (bool P_value) { M_checkIt = P_value; } +void CAction::setCheckItInverse (bool P_value) +{ M_checkItInverse = P_value; } void CAction::setVarId (int P_value) { M_varId = P_value; } void CAction::setVarInId (int P_value) @@ -409,6 +414,7 @@ setLookingChar ( P_action.getLookingChar() ); setCheckIt ( P_action.getCheckIt() ); + setCheckItInverse ( P_action.getCheckItInverse() ); setCaseIndep ( P_action.getCaseIndep() ); setOccurence ( P_action.getOccurence() ); setHeadersOnly ( P_action.getHeadersOnly() ); @@ -434,6 +440,7 @@ M_subVarId = NULL; M_checkIt = false; + M_checkItInverse = false; M_lookingPlace = E_LP_MSG; M_lookingChar = NULL; M_caseIndep = false; Modified: sipp/trunk/actions.hpp =================================================================== --- sipp/trunk/actions.hpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/actions.hpp 2009-04-15 12:10:03 UTC (rev 579) @@ -115,6 +115,7 @@ T_LookingPlace getLookingPlace(); T_Comparator getComparator(); bool getCheckIt(); + bool getCheckItInverse(); bool getCaseIndep(); bool getHeadersOnly(); int getVarId(); @@ -133,6 +134,7 @@ void setLookingPlace (T_LookingPlace P_value); void setComparator (T_Comparator P_value); void setCheckIt (bool P_value); + void setCheckItInverse (bool P_value); void setVarId (int P_value); void setVarInId (int P_value); void setVarIn2Id (int P_value); @@ -171,6 +173,7 @@ T_LookingPlace M_lookingPlace; T_Comparator M_comp; bool M_checkIt; + bool M_checkItInverse; bool M_caseIndep; bool M_headersOnly; int M_varId; Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/call.cpp 2009-04-15 12:10:03 UTC (rev 579) @@ -1296,6 +1296,14 @@ new deadcall(id, reason_str); } break; + case call::E_AR_REGEXP_SHOULDNT_MATCH: + computeStat(CStat::E_CALL_FAILED); + computeStat(CStat::E_FAILED_REGEXP_SHOULDNT_MATCH); + if (deadcall_wait && !initCall) { + sprintf(reason_str, "regexp matched, but shouldn't at index %d", msg_index); + new deadcall(id, reason_str); + } + break; case call::E_AR_HDR_NOT_FOUND: computeStat(CStat::E_CALL_FAILED); computeStat(CStat::E_FAILED_REGEXP_HDR_NOT_FOUND); @@ -3423,6 +3431,13 @@ WARNING("Failed regexp match: looking in '%s', with regexp '%s'", haystack, currentAction->getRegularExpression()); return(call::E_AR_REGEXP_DOESNT_MATCH); + } else if ( ((M_callVariableTable->getVar(currentAction->getVarId())->isSet())) && + (currentAction->getCheckItInverse() == true) ) + { + // The inverse of the above + WARNING("Regexp matched but should not: looking in '%s', with regexp '%s'", + haystack, currentAction->getRegularExpression()); + return(call::E_AR_REGEXP_SHOULDNT_MATCH); } } else if (currentAction->getActionType() == CAction::E_AT_ASSIGN_FROM_VALUE) { double operand = get_rhs(currentAction); Modified: sipp/trunk/call.hpp =================================================================== --- sipp/trunk/call.hpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/call.hpp 2009-04-15 12:10:03 UTC (rev 579) @@ -216,6 +216,7 @@ { E_AR_NO_ERROR = 0, E_AR_REGEXP_DOESNT_MATCH, + E_AR_REGEXP_SHOULDNT_MATCH, E_AR_STOP_CALL, E_AR_CONNECT_FAILED, E_AR_HDR_NOT_FOUND Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/scenario.cpp 2009-04-15 12:10:03 UTC (rev 579) @@ -1391,7 +1391,14 @@ tmpAction->setLookingChar(NULL); } // end if-else search_in + if (xp_get_value("check_it")) { tmpAction->setCheckIt(xp_get_bool("check_it", "ereg", false)); + if (xp_get_value("check_it_inverse")) { + ERROR("Can not have both check_it and check_it_inverse for ereg!"); + } + } else { + tmpAction->setCheckItInverse(xp_get_bool("check_it_inverse", "ereg", false)); + } if (!(ptr = xp_get_value((char *) "assign_to"))) { ERROR("assign_to value is missing"); Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/sipp.cpp 2009-04-15 12:10:03 UTC (rev 579) @@ -3708,6 +3708,12 @@ " during the call but the counter is increased only by\n" " one).\n" "\n" +" - FailedRegexpShouldntMatch:\n" +" Number of failed calls because of regexp that shouldn't\n" +" match (there might be several regexp that shouldn't match\n" +" during the call but the counter is increased only by\n" +" one).\n" +"\n" " - FailedRegexpHdrNotFound:\n" " Number of failed calls because of regexp with hdr \n" " option but no matching header found.\n" Modified: sipp/trunk/stat.cpp =================================================================== --- sipp/trunk/stat.cpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/stat.cpp 2009-04-15 12:10:03 UTC (rev 579) @@ -670,6 +670,12 @@ M_counters [CPT_PL_FailedCallRegexpDoesntMatch]++; break; + case E_FAILED_REGEXP_SHOULDNT_MATCH : + M_counters [CPT_C_FailedCallRegexpShouldntMatch]++; + M_counters [CPT_PD_FailedCallRegexpShouldntMatch]++; + M_counters [CPT_PL_FailedCallRegexpShouldntMatch]++; + break; + case E_FAILED_REGEXP_HDR_NOT_FOUND : M_counters [CPT_C_FailedCallRegexpHdrNotFound]++; M_counters [CPT_PD_FailedCallRegexpHdrNotFound]++; @@ -1497,6 +1503,8 @@ << "FailedCmdNotSent(C)" << stat_delimiter << "FailedRegexpDoesntMatch(P)" << stat_delimiter << "FailedRegexpDoesntMatch(C)" << stat_delimiter + << "FailedRegexpShouldntMatch(P)" << stat_delimiter + << "FailedRegexpShouldntMatch(C)" << stat_delimiter << "FailedRegexpHdrNotFound(P)" << stat_delimiter << "FailedRegexpHdrNotFound(C)" << stat_delimiter << "FailedOutboundCongestion(P)" << stat_delimiter @@ -1600,6 +1608,8 @@ << M_counters[CPT_C_FailedCallCmdNotSent] << stat_delimiter << M_counters[CPT_PL_FailedCallRegexpDoesntMatch] << stat_delimiter << M_counters[CPT_C_FailedCallRegexpDoesntMatch] << stat_delimiter + << M_counters[CPT_PL_FailedCallRegexpShouldntMatch] << stat_delimiter + << M_counters[CPT_C_FailedCallRegexpShouldntMatch] << stat_delimiter << M_counters[CPT_PL_FailedCallRegexpHdrNotFound] << stat_delimiter << M_counters[CPT_C_FailedCallRegexpHdrNotFound] << stat_delimiter << M_counters[CPT_PL_FailedOutboundCongestion] << stat_delimiter Modified: sipp/trunk/stat.hpp =================================================================== --- sipp/trunk/stat.hpp 2009-03-30 08:51:27 UTC (rev 578) +++ sipp/trunk/stat.hpp 2009-04-15 12:10:03 UTC (rev 579) @@ -104,6 +104,7 @@ E_FAILED_CALL_REJECTED, E_FAILED_CMD_NOT_SENT, E_FAILED_REGEXP_DOESNT_MATCH, + E_FAILED_REGEXP_SHOULDNT_MATCH, E_FAILED_REGEXP_HDR_NOT_FOUND, E_FAILED_OUTBOUND_CONGESTION, E_FAILED_TIMEOUT_ON_RECV, @@ -143,6 +144,7 @@ CPT_C_FailedCallCallRejected, CPT_C_FailedCallCmdNotSent, CPT_C_FailedCallRegexpDoesntMatch, + CPT_C_FailedCallRegexpShouldntMatch, CPT_C_FailedCallRegexpHdrNotFound, CPT_C_FailedOutboundCongestion, CPT_C_FailedTimeoutOnRecv, @@ -182,6 +184,7 @@ CPT_PD_FailedCallCallRejected, CPT_PD_FailedCallCmdNotSent, CPT_PD_FailedCallRegexpDoesntMatch, + CPT_PD_FailedCallRegexpShouldntMatch, CPT_PD_FailedCallRegexpHdrNotFound, CPT_PD_FailedOutboundCongestion, CPT_PD_FailedTimeoutOnRecv, @@ -222,6 +225,7 @@ CPT_PL_FailedCallCallRejected, CPT_PL_FailedCallCmdNotSent, CPT_PL_FailedCallRegexpDoesntMatch, + CPT_PL_FailedCallRegexpShouldntMatch, CPT_PL_FailedCallRegexpHdrNotFound, CPT_PL_FailedOutboundCongestion, CPT_PL_FailedTimeoutOnRecv, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-30 08:51:30
|
Revision: 578 http://sipp.svn.sourceforge.net/sipp/?rev=578&view=rev Author: srivanuj Date: 2009-03-30 08:51:27 +0000 (Mon, 30 Mar 2009) Log Message: ----------- doc for sipp gui Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/site.xml Modified: doc/trunk/src/documentation/content/xdocs/site.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-17 14:43:54 UTC (rev 577) +++ doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-30 08:51:27 UTC (rev 578) @@ -60,6 +60,9 @@ <WebFrontEnd label="WebFrontEnd" href="web_frontend/"> <refdoc label='Ref doc [html]' href='index.html' /> </WebFrontEnd> + <SIPpGUI label="SIPpGUI" href="SIPP_GUI/"> + <refdoc label='Ref doc [pdf]' href='reference.pdf' /> + </SIPpGUI> <external-refs> <download_unstable href="http://sipp.sourceforge.net/snapshots/"> </download_unstable> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cha...@us...> - 2009-03-17 14:44:09
|
Revision: 577 http://sipp.svn.sourceforge.net/sipp/?rev=577&view=rev Author: charlespwright Date: 2009-03-17 14:43:54 +0000 (Tue, 17 Mar 2009) Log Message: ----------- Fix: Correct lost 3PCC message. From le...@hu.... Modified Paths: -------------- sipp/trunk/sipp.cpp Modified: sipp/trunk/sipp.cpp =================================================================== --- sipp/trunk/sipp.cpp 2009-03-17 10:38:00 UTC (rev 576) +++ sipp/trunk/sipp.cpp 2009-03-17 14:43:54 UTC (rev 577) @@ -2600,7 +2600,6 @@ void buffer_write(struct sipp_socket *socket, char *buffer, size_t len, struct sockaddr_storage *dest) { struct socketbuf *buf = socket->ss_out; - struct socketbuf *prev = buf; if (!buf) { socket->ss_out = alloc_socketbuf(buffer, len, DO_COPY, dest); @@ -2609,11 +2608,10 @@ } while(buf->next) { - prev = buf; buf = buf->next; } - prev->next = alloc_socketbuf(buffer, len, DO_COPY, dest); + buf->next = alloc_socketbuf(buffer, len, DO_COPY, dest); TRACE_MSG("Appended buffered message to socket %d\n", socket->ss_fd); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-17 10:38:07
|
Revision: 576 http://sipp.svn.sourceforge.net/sipp/?rev=576&view=rev Author: srivanuj Date: 2009-03-17 10:38:00 +0000 (Tue, 17 Mar 2009) Log Message: ----------- doc Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/site.xml Modified: doc/trunk/src/documentation/content/xdocs/site.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-17 06:28:15 UTC (rev 575) +++ doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-17 10:38:00 UTC (rev 576) @@ -57,8 +57,8 @@ <scen label="Scenarios" href="ext:wikiscen" description="Scenario wiki"/> <tips label="Tips and tricks" href="ext:wikitips" description="Tips wiki"/> </wiki> - <WebFrontEnd label="WebFrontEnd" href="web_frontend"> - <refdoc label='Ref doc [html]' href='reference.html' /> + <WebFrontEnd label="WebFrontEnd" href="web_frontend/"> + <refdoc label='Ref doc [html]' href='index.html' /> </WebFrontEnd> <external-refs> <download_unstable href="http://sipp.sourceforge.net/snapshots/"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-17 06:28:21
|
Revision: 575 http://sipp.svn.sourceforge.net/sipp/?rev=575&view=rev Author: srivanuj Date: 2009-03-17 06:28:15 +0000 (Tue, 17 Mar 2009) Log Message: ----------- doc modification for webfrontend Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/site.xml Modified: doc/trunk/src/documentation/content/xdocs/site.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-17 06:12:18 UTC (rev 574) +++ doc/trunk/src/documentation/content/xdocs/site.xml 2009-03-17 06:28:15 UTC (rev 575) @@ -57,7 +57,9 @@ <scen label="Scenarios" href="ext:wikiscen" description="Scenario wiki"/> <tips label="Tips and tricks" href="ext:wikitips" description="Tips wiki"/> </wiki> - + <WebFrontEnd label="WebFrontEnd" href="web_frontend"> + <refdoc label='Ref doc [html]' href='reference.html' /> + </WebFrontEnd> <external-refs> <download_unstable href="http://sipp.sourceforge.net/snapshots/"> </download_unstable> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-17 06:12:33
|
Revision: 574 http://sipp.svn.sourceforge.net/sipp/?rev=574&view=rev Author: srivanuj Date: 2009-03-17 06:12:18 +0000 (Tue, 17 Mar 2009) Log Message: ----------- added documentation for sipp gui, provided by stephan yann Added Paths: ----------- doc/trunk/src/documentation/content/xdocs/sipp_gui/ doc/trunk/src/documentation/content/xdocs/sipp_gui/STSLabs User Manual.pdf Added: doc/trunk/src/documentation/content/xdocs/sipp_gui/STSLabs User Manual.pdf =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/content/xdocs/sipp_gui/STSLabs User Manual.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-03 08:38:46
|
Revision: 573 http://sipp.svn.sourceforge.net/sipp/?rev=573&view=rev Author: srivanuj Date: 2009-03-03 08:38:40 +0000 (Tue, 03 Mar 2009) Log Message: ----------- doc update Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml Modified: doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml 2009-03-03 08:27:25 UTC (rev 572) +++ doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml 2009-03-03 08:38:40 UTC (rev 573) @@ -37,7 +37,7 @@ <section> <title>Installation instructions</title> <p>For detailed installation instructions refer to the file <code>INSTALL.TXT</code> shipped with the SIPp webfrontend package.</p> - <p><a href="http://sourceforge.net/project/showfiles.php?group_id=104305&package_id=119322&release_id=593806">webfrontend download page </a></p> + <p><link href="http://sourceforge.net/project/showfiles.php?group_id=104305&package_id=119322&release_id=593806">webfrontend download page </link></p> </section> <section> <title>Login</title> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-03 08:27:28
|
Revision: 572 http://sipp.svn.sourceforge.net/sipp/?rev=572&view=rev Author: srivanuj Date: 2009-03-03 08:27:25 +0000 (Tue, 03 Mar 2009) Log Message: ----------- updated webfront doc to add download link Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml Modified: doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml 2009-03-03 04:50:32 UTC (rev 571) +++ doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml 2009-03-03 08:27:25 UTC (rev 572) @@ -37,6 +37,7 @@ <section> <title>Installation instructions</title> <p>For detailed installation instructions refer to the file <code>INSTALL.TXT</code> shipped with the SIPp webfrontend package.</p> + <p><a href="http://sourceforge.net/project/showfiles.php?group_id=104305&package_id=119322&release_id=593806">webfrontend download page </a></p> </section> <section> <title>Login</title> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sri...@us...> - 2009-03-03 04:50:42
|
Revision: 571 http://sipp.svn.sourceforge.net/sipp/?rev=571&view=rev Author: srivanuj Date: 2009-03-03 04:50:32 +0000 (Tue, 03 Mar 2009) Log Message: ----------- Addition of SippWebfrontend, submitted by Michael Hirschbichler Modified Paths: -------------- doc/trunk/src/documentation/content/xdocs/tabs.xml Added Paths: ----------- doc/trunk/src/documentation/content/xdocs/web_frontend/ doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml doc/trunk/src/documentation/resources/images/Thumbs.db doc/trunk/src/documentation/resources/images/webfrontend_addcall.gif doc/trunk/src/documentation/resources/images/webfrontend_addcalls.gif doc/trunk/src/documentation/resources/images/webfrontend_commandflow.gif doc/trunk/src/documentation/resources/images/webfrontend_createscenario.gif doc/trunk/src/documentation/resources/images/webfrontend_createtest.gif doc/trunk/src/documentation/resources/images/webfrontend_er.gif doc/trunk/src/documentation/resources/images/webfrontend_exec.gif doc/trunk/src/documentation/resources/images/webfrontend_managescenarios.gif doc/trunk/src/documentation/resources/images/webfrontend_managetests.gif doc/trunk/src/documentation/resources/images/webfrontend_runs.gif doc/trunk/src/documentation/resources/images/webfrontend_states.gif doc/trunk/src/documentation/resources/images/webfrontend_sysinfo.gif doc/trunk/src/documentation/resources/images/webfrontend_version.gif Modified: doc/trunk/src/documentation/content/xdocs/tabs.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/tabs.xml 2009-01-27 03:04:52 UTC (rev 570) +++ doc/trunk/src/documentation/content/xdocs/tabs.xml 2009-03-03 04:50:32 UTC (rev 571) @@ -18,6 +18,7 @@ <tab id="doc3.0" label="Documentation (3.0)" dir="doc3.0" indexfile="reference.html"/> <tab id="doc" label="Documentation (current)" dir="doc" indexfile="reference.html"/> <tab id="ims_bench" label="IMS Bench SIPp" dir="ims_bench" indexfile="index.html"/> + <tab id="web_frontend" label="Web frontend" dir="web_frontend" indexfile="index.html"/> <!-- Add new tabs here, eg: <tab label="How-Tos" dir="community/howto/"/> <tab label="XML Site" dir="xml-site/"/> Added: doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml =================================================================== --- doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml (rev 0) +++ doc/trunk/src/documentation/content/xdocs/web_frontend/index.xml 2009-03-03 04:50:32 UTC (rev 571) @@ -0,0 +1,233 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd"> +<document> + <header> + <title>SIPp web frontend</title> + <subtitle>SIPp web frontend 1.2 reference documentation</subtitle> + <authors> + <person name="Mario SMERITSCHNIG [code/documentation]" email="ma...@po..."/> + </authors> + </header> + <body> + <section> + <title>Description</title> + <p>With SIPp web frontend you can</p> + <ul> + <li>upload XML templates (SIPp scenarios) and CSV injection files</li> + <li>create and modify test processes using these files</li> + <li>manage test versions</li> + <li>run created test processes</li> + <li>display realtime feedback during test runs</li> + <li>store created test information in a database</li> + </ul> + </section> + <section> + <title>Terms and definitions</title> + <ul> + <li>Scenario<br/>A user can upload XML files containing SIP call flows, named scenario files. Optionally, one can upload a CSV field injection file. These files are stored along with a scenario name and a description. There are also some standard scenarios, that cannot be modified (from the command line parameter <code>-sn</code>, e.g., <code>uac</code>, <code>uas</code>, <code>regexp</code>, ...)</li> + <li>Call<br />A call consists of all information necessary to run one instance of SIPp. Thus a SIPp executable, a scenario, and a collection of parameters (e.g., destination ip-address).</li> + <li>Call sequence<br />In some test scenarios it is not enough to run only one call. For example in a first call SIP user agents get registered at a SIP proxy, in a second call those user agents communicate with a server, and in a last call the registrations are removed again. Thus a call sequence is an ordered list of calls, that can be executed automatically one by one.</li> + <li>Call sequence pair / call parties<br />SIPp webfrontend has the capability to execute two calls in a test simultaneously. This is useful for example if you want to simulate a server and a client communicating with each other. In this case two call sequences can be defined each in a separate party (<i>A party</i> and <i>B party</i>).</li> + <li>Test<br />A test can be a call, a call sequence or a call sequence pair. There also may be several versions of a test that can be executed.</li> + <li>Run<br />After a test has been executed, collected information (e.g., about the progress, test parameters, date and time, log files...) is stored as a run for further processing.</li> + </ul> + </section> + <section> + <title>Admin guide</title> + <section> + <title>Installation instructions</title> + <p>For detailed installation instructions refer to the file <code>INSTALL.TXT</code> shipped with the SIPp webfrontend package.</p> + </section> + <section> + <title>Login</title> + <p>In order to act as an admin, you first need to login to the admin section by entering the correct password, defined in the config file <code>config.ini.php</code> with the parameter <code>admin_pwd</code>. If you want everybody to be admin, assign <code>admin_pwd</code> an empty password (<code>admin_pwd=""</code>).</p> + </section> + <section> + <anchor id="managescenarios" /> + <title>Manage scenarios</title> + <p>There is a list of scenarios available for creating tests in the <i>manage scenarios</i> tab. Scenarios tagged with the word <i>default</i> are SIPp default scenarios, and cannot be modified or removed. Change the order of the scenarios by using the arrow up and the arrow down buttons, or remove a scenario by pressing the red <i>X</i> button. To modify a scenario, just click the row of the scenario, and to create a new scenario use the <i>create new scenario</i> link.<br /> + <img alt="Manage scenarios tab" src="images/webfrontend_managescenarios.gif"></img></p> + <section> + <title>Create / modify a scenario</title> + <p>To create a scenario, a name has to be specified and a XML scenario file has to be given (upload the file by pressing the corresponding <i>Browse...</i> button). Optionally the user can enter a description, upload a CSV injection file and enter a <i>bind_local</i> ip address to instruct a server to listen only to the given address instead to all available (see <code>sipp -h</code> for more details).</p> + <img alt="Create a scenario" src="images/webfrontend_createscenario.gif"></img> + <p>After you have created a scenario, you can modify it any time if you want. You can even remove a CSV file or replace the XML file. + <note>When you modify a scenario, you do not implicitly modify all tests using the scenario. Tests use copies of the scenarios to stay consistent with test runs.</note></p> + </section> + </section> + + <section> + <title>Manage tests</title> + <p>Open the <i>Manage tests</i> tab to get a list of available tests.</p> + <ul> + <li>to completely delete a test press the red <i>X</i> button</li> + <li>to modify a test, click on the corresponding table row</li> + <li>to create a new test, use the <i>create new test</i> link</li> + </ul> + <img alt="Manage scenarios tab" src="images/webfrontend_managescenarios.gif"></img> + <p>For more information about this window see section <a href="#managetests">Manage tests</a> in the User guide.</p> + <section> + <title>Create a test</title> + <p>To create a test + <ul> + <li>enter a test title into the <i>name</i> field</li> + <li>optionally enter a test description into the <i>description</i> field</li> + <li>click on the <i>save test</i> link</li> + </ul> + </p> + <img alt="Create a test" src="images/webfrontend_createtest.gif"></img> + <p>After an empty test is created, it is in its version 1. Now calls can be added. A call is an instruction to SIPp, so a test is an instruction set. There are two parties the calls can be added, the <i>A party</i> and the <i>B party</i>. The calls in a party are executed one by one like in a queue, but the two parties are executed simultaneously. With this the parties can communicate with each other.</p> + <p>Sometimes the <i>A party</i> and the <i>B party</i> should not begin the execution at the same time (e.g., the client waits for the server to start). In this case a party can be delayed using the corresponding <i>delay</i> dropdown field.</p> + <img alt="Add calls to parties" src="images/webfrontend_addcalls.gif"></img> + <p>The test screen is split in 3 areas. In the first (upper) one, the test name and description can be modified, and the entire test can be duplicated or removed. In the second (middle) area calls can be added, removed or reordered. The third (lower) area shows the test-runs that has been done with the current version.</p> + </section> + <section> + <title>Adding calls to a test</title> + <p>To add a call, use the <i>add a call</i> link of the corresponding party (see in the figure above) and get to the <i>Create new call</i> screen.</p> + <img alt="Add a call" src="images/webfrontend_addcall.gif"></img> + <p>Here the command line parameters to pass to SIPp can be set up (the corresponding parameters are stated in round brackets, e.g., <code>-timeout</code>) or (<code>-m</code>), but first + <ul> + <li>choose an <i>Executable</i> (the version of SIPp you want to use, defined in <code>config.ini.php</code>. See section <a href="#configfile">Config file</a> for more details).</li> + <li>choose a <i>Scenario</i> defined earlier in the <i>Manage scenarios</i> tab (Section <a href="#managescenarios">Manage scenarios</a>).</li> + <li>if a client scenario is used, enter a <i>Remote host</i>. This is where SIPp addresses its messages to.</li> + <li>check the <i>Monitor call</i> checkbox, if during the test execution realtime feedback of the test progress should be displayed. In that case the tester can also influence the test by pausing it, or by adjusting the packet rate (See section <h href="#runatest">Run a test</h> for more details).</li> + <li>check the <i>Log</i> checkbox, if log files (<code>-trace_err, -trace_logs, -trace_rtt, -trace_stat</code>) should be stored in the database.</li> + </ul></p> + <p>If the given configuration options are not enough, the <i>Extended parameters</i> text field can be used to pass any command line parameters to SIPp. The <i>Extended parameters</i> are not evaluated or modified in any way. It is up to the administrator to use a correct syntax. There may be some command line options that do not work, or even cause SIPp to hang (i.e. <code>-bg</code>).</p> + <p>If a parameter is specified in the form and also as <i>extended parameter</i>, the <i>extended parameter</i> has the higher priority, and overwrites the other.</p> + <p>Global parameters (applied to any call) can be defined in the <code>AVP Section</code> of the <code>config.ini.php</code>. These have the lowest priority.</p> + </section> + <section> + <title>Modify a test / create a new test version</title> + <p>Tests and calls can be modified at any time. If a test has already runs, a crucial modification of the test would mean that test information belonging to these runs is lost, and thus the run is not reproducible anymore. To avoid this, a new version is created automatically.</p> + <p>Simply switch between the versions of a test by clicking the version numbers. A version can even be deleted by using the <i>remove this version</i> link, but then all its runs are lost too.</p> + <img alt="Test versions" src="images/webfrontend_version.gif"></img> + </section> + <section> + <title>Duplicate a test</title> + <p>If a test is duplicated using the <i>duplicate test</i> link, the currently displayed version of the test is copied into version 1 of the duplicate. The new name of the duplicate is composed with the original name followed by the word <i>copy</i>. A duplicate initially has no runs.</p> + </section> + </section> + <section> + <title>System information</title> + <p>In the <i>System information</i> tab, the page is split in 3 areas. First a list of currently running SIPp instances is displayed. Then the available free disk space is stated. Finally there is a list with the versions of SIPp that are defined in the <code>config.ini.php</code> file, along with their verbose screens.</p> + <img alt="System information tab" src="images/webfrontend_sysinfo.gif"></img> + <section> + <title>Kill a hanging SIPp instance</title> + <p>An admin can try to kill an instance of SIPp by pressing the corresponding red <i>X</i> button in the list of currently running SIPp instances. Although SIPp runs that are not started through the web frontend are also in the list, they cannot be killed.</p> + </section> + </section> + <section> + <anchor id="configfile" /> + <title>Config file</title> + <p>A line in the config file with a leading ; is a comment and has no effect to the configuration.<br /> + The configuration file is divided in three sections respectively tagged with<br /> + <code>[EXECUTABLES], [AVP], and [CONFIG]</code>.</p> + <ul> + <li>In the <code>[EXECUTABLES]</code>-section SIPp executables and their versions can be specified. At least one executable is mandatory.</li> + <li>In the <code>[AVP]</code>-section global command line parameters for SIPp can be specified in form of attribute-value pairs (<code>attribute = value</code>). <br /> + I.e. most parameters of SIPp (without the leading -) will be accepted (see <code>sipp -h</code> for more details).<br /> + These parameters can be overwritten in each individual call by using the <i>Extended parameters</i> textarea in the web tool. Take care that you only use parameters that work with every version of SIPp you are using with this tool. If a attribute has no value, but is a switch, use TRUE as a value (e.g., <code>aa = TRUE</code>). If a value contains non-alphanumeric characters it needs to be enclosed in double-quotes (").<br /><br /> + Parameters not allowed are:<br /> + <code>i, m, nd, nr, t, p, r, timeout, pause_msg_ign, v, bind_local, inf, sd, sf, sn, stf, trace_msg, trace_shortmsg, trace_screen, trace_err, linebreak trace_timeout, trace_stat, trace_rtt, trace_logs</code></li> + <li>In the <code>[CONFIG]</code>-section you will find program specific parameters, like admin password or MySQL-database connection information...</li> + </ul> + <p>Refer to the config file <code>config.ini.php</code> to get more detailed information about the specific parameters.</p> + </section> + </section> + <section> + <title>User guide</title> + <anchor id="managetests" /> + <section> + <title>Manage tests</title> + <p>There is a list of available tests in the <i>Manage tests</i>. If there are many tests, it may be useful to sort the tests by clicking one of the column headings.</p> + </section> + <section> + <anchor id="runatest" /> + <title>Run a test</title> + <p>Click on a test to get a more detailed view. There choose a version and click on the <i>run this version</i> link to open the test popup.</p> + <img alt="Execute test screen" src="images/webfrontend_exec.gif"></img> + <p>Click on <i>Run test now</i> to begin testing. Both parties start to process their queues. On the left hand side of each call there is a small image showing the actual state of the call.</p> + <img alt="Call state icons" src="images/webfrontend_states.gif"></img> + <section> + <title>Key commands</title> + <p>If monitoring is turned on, the test progress can be influenced by using key commands (this is the same as in the command line). First set the focus to the corresponding monitoring screen by clicking on it. When the border of the screen turns red, use the key commands on your keyboard. + <ul> + <li><i>0-9</i> to switch between screens</li> + <li><i>+ , - , * , /</i> to adjust packet rate</li> + <li><i>q</i> to soft exit</li> + <li><i>p</i> to pause/resume execution</li> + </ul> + </p> + </section> + <section> + <title>Abort a call / test</title> + <p>Never close the test window without the test finished, because there may reside SIPp processes running on the server. If for some reason a call does not terminate by itself, there are three possibilities to finish the test anyway: + <ul> + <li>If the call has monitoring turned on, try to end the call with the key command <i>q</i> (soft exit).</li> + <li>A call that hangs can be terminated by pressing the red <i>X</i> on its right hand side.</li> + <li>The whole test can be stopped with the <i>Abort test</i> link at the top of the window.</li> + </ul> + </p> + </section> + </section> + <section> + <title>Runs</title> + <p>After a test has finished, the test window is closed automatically and the created run is displayed. The <i>exit</i> and the <i>std error</i> column may contain important information (roll the mouse over the columns for more details in a tooltip box). Click the grey eye buttons to download the log files created during the test.</p> + <img alt="Runs screen" src="images/webfrontend_runs.gif"></img> + <p>It is possible to return to this page, or to another run, any time. Just navigate to the corresponding test in the <i>Manage tests</i> tab, choose the right version and click on a run at the bottom of the page.</p> + </section> + </section> + <section> + <title>Programming guide</title> + <section> + <title>Database (ER Diagram)</title> + <img alt="Entity Relationship diagram" src="images/webfrontend_er.gif"></img> + </section> + <section> + <title>Files</title> + <ul> + <li><code>add_call.php</code> is responsible for the <i>add/modify call</i> screen. Adds/modifies calls in the database.</li> + <li><code>authentication.php</code>: checks if admin is logged in. It is included everywhere, where admin should have special permissions.</li> + <li><code>Call_Data.php</code>: class Call_Data: contains call specific data (process-id, log filenames...) of a currently running call. It has methods to store log files in the database, delete the log files and determine the exit code after execution. When a call is about to be executed, an object of this class is generated and stored in a session variable.</li> + <li><code>config.ini.php</code>: configuration file</li> + <li><code>create_run.php</code>: is called from run_progress.php via ajax. It creates a run in the database with the current timestamp.</li> + <li><code>dbHelper.php</code>: is where the SQL happens. For each table in the database, there is a corresponding class that handles database communication.</li> + <li><code>db.php</code>: generates the MySQL database connection object.</li> + <li><code>exec_call.php</code>: is called from <code>run_progress.php</code> via ajax. The basic function of this file is to build up the command line, create the XML-scenario file and the CSV-injection file in the system's temporary folder, execute the call and return its process id (pid).</li> + <li><code>garbagecollector.php</code>: removes all SIPp directories in the system's temp folder that have not been modified for a specific time (defined in <code>config.ini.php</code>). Further all SIPp processes older than a specific time get killed.</li> + <li><code>get_screen.php</code>: During execution of a call this file is requested periodically via ajax. Here the actual monitor-screen is extracted from the screen file, and returned to <code>status_screen.php</code> (if monitoring is turned on). Further this file checks if the SIPp process is still running, and if not, it returns exit-code and standard-error to <code>status_screen.php</code>.</li> + <li><code>helper.php</code>: just some useful functions.</li> + <li><code>index.php</code>: redirect to <code>tests.php</code>.</li> + <li><code>info.php</code>: represents the <i>System information</i> tab.</li> + <li><code>kill_process.php</code>: is called from <code>run_progress.php</code> via ajax, if the user wants to kill a SIPp process.</li> + <li><code>read_config.php</code>: reads the config file in the three arrays <code>$executables, $avp,</code> and <code>$config</code>. Default values are set if necessary, and there is a function <code>getConfig-Parameters</code> that assembles command line parameters from the <code>AVP</code> section.</li> + <li><code>run_detail.php</code>: represents the <i>show run</i> page.</li> + <li><code>run_progress.php</code>: represents the <i>run test</i> popup. This is where all the ajax happens. Refer to the file itself for detailed information.</li> + <li><code>scenario_detail.php</code>: represents the <i>create/modify scenario</i> screen. Inserts or updates scenario data in the database.</li> + <li><code>scenarios.php</code>: represents the <i>Manage scenarios</i> tab.</li> + <li><code>send_key.php</code>: is called via ajax from <code>status_screen.php</code> when the user presses a key on the keyboard.</li> + <li><code>status_screen.php</code>: is displayed in a iframe in <code>run_progress.php</code> during test. Here the status monitor screen of a running SIPp instance is displayed by polling it from the server frequently. Further, keyboard action is sent to <code>send_key.php</code>, that forwards it to the running SIPp instance.</li> + <li><code>stop_sipp.php</code>: has a function that tries to stop a running SIPp instance. It takes care that the pid belongs to a SIPp process.</li> + <li><code>sys_get_temp_dir.php</code>: provides functions that determine the working directory and the systems temp directory.</li> + <li><code>test_detail.php</code>: represents the <i>create/modify test</i> screen.</li> + <li><code>tests.php</code>: represents the <i>Manage tests</i> tab.</li> + <li><code>view_csv.php</code>: is for downloading CSV files (log files etc.) that are stored in the database.</li> + <li><code>view_messages.php</code>: is for downloading the file created by the command line option <code>-trace_messages</code>. The trace_messages file is not stored in the database because it may be very large, but it is left for a short time in the systems temp folder until the garbage collector removes it.</li> + <li><code>view_text.php</code>: is for downloading text files (log files etc.) that are stored in the database.</li> + <li><code>view_xml.php</code>: is for downloading XML files (scenario files) that are stored in the database.</li> + <li><code>/js/ajaxConnection.js</code>: crossbrowser function to create an ajax request object in javascript.</li> + <li><code>/js/helper.js</code>: some useful javascript functions.</li> + <li><code>/js/run.js</code>: opens a window for a test run.</li> + <li><code>/js/tooltip.js</code>: provides functions to display tooltip texts.</li> + <li><code>/navigation/pagehead.php</code>: If you want to add a new tab to the navigation, do it here.</li> + <li><code>/navigation/register.php</code>: Here the navigation of the webfrontend is created.</li> + </ul> + </section> + <section> + <title>Command flow during test process</title> + <img alt="Command flow" src="images/webfrontend_commandflow.gif"></img> + </section> + </section> + </body> +</document> Added: doc/trunk/src/documentation/resources/images/Thumbs.db =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/Thumbs.db ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_addcall.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_addcall.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_addcalls.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_addcalls.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_commandflow.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_commandflow.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_createscenario.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_createscenario.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_createtest.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_createtest.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_er.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_er.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_exec.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_exec.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_managescenarios.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_managescenarios.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_managetests.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_managetests.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_runs.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_runs.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_states.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_states.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_sysinfo.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_sysinfo.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: doc/trunk/src/documentation/resources/images/webfrontend_version.gif =================================================================== (Binary files differ) Property changes on: doc/trunk/src/documentation/resources/images/webfrontend_version.gif ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cha...@us...> - 2009-01-27 03:05:03
|
Revision: 570 http://sipp.svn.sourceforge.net/sipp/?rev=570&view=rev Author: charlespwright Date: 2009-01-27 03:04:52 +0000 (Tue, 27 Jan 2009) Log Message: ----------- Fix: Correct memory corruption reported by Artur Silveira da Cunha. Modified Paths: -------------- sipp/trunk/stat.cpp sipp/trunk/stat.hpp Modified: sipp/trunk/stat.cpp =================================================================== --- sipp/trunk/stat.cpp 2009-01-21 15:10:06 UTC (rev 569) +++ sipp/trunk/stat.cpp 2009-01-27 03:04:52 UTC (rev 570) @@ -1104,23 +1104,28 @@ int sizeOfTab, char * P_repartitionName) { - static char repartitionHeader[MAX_REPARTITION_HEADER_LENGTH]; + static char *repartitionHeader = NULL; char buffer[MAX_CHAR_BUFFER_SIZE]; + int dlen = strlen(stat_delimiter); if(tabRepartition != NULL) { + repartitionHeader = (char *)realloc(repartitionHeader, strlen(P_repartitionName) + dlen + 1); sprintf(repartitionHeader, "%s%s", P_repartitionName, stat_delimiter); for(int i=0; i<(sizeOfTab-1); i++) - { + { sprintf(buffer, "<%d%s", tabRepartition[i].borderMax, stat_delimiter); + repartitionHeader = (char *)realloc(repartitionHeader, strlen(repartitionHeader) + strlen(buffer) + 1); strcat(repartitionHeader, buffer); } sprintf(buffer, ">=%d%s", tabRepartition[sizeOfTab-1].borderMax, stat_delimiter); + repartitionHeader = (char *)realloc(repartitionHeader, strlen(repartitionHeader) + strlen(buffer) + 1); strcat(repartitionHeader, buffer); } else { - repartitionHeader[0] = '\0'; + repartitionHeader = (char *)realloc(repartitionHeader, 2); + strcpy(repartitionHeader, ""); } return(repartitionHeader); @@ -1129,23 +1134,28 @@ char* CStat::sRepartitionInfo(T_dynamicalRepartition * tabRepartition, int sizeOfTab) { - static char repartitionInfo[MAX_REPARTITION_INFO_LENGTH]; + static char *repartitionInfo; char buffer[MAX_CHAR_BUFFER_SIZE]; + int dlen = strlen(stat_delimiter); if(tabRepartition != NULL) { // if a repartition is present, this field match the repartition name + repartitionInfo = (char *)realloc(repartitionInfo, dlen + 1); sprintf(repartitionInfo, stat_delimiter); for(int i=0; i<(sizeOfTab-1); i++) { sprintf(buffer, "%lu%s", tabRepartition[i].nbInThisBorder, stat_delimiter); + repartitionInfo = (char *)realloc(repartitionInfo, strlen(repartitionInfo) + strlen(buffer) + 1); strcat(repartitionInfo, buffer); } sprintf(buffer, "%lu%s", tabRepartition[sizeOfTab-1].nbInThisBorder, stat_delimiter); + repartitionInfo = (char *)realloc(repartitionInfo, strlen(repartitionInfo) + strlen(buffer) + 1); strcat(repartitionInfo, buffer); } else { + repartitionInfo = (char *)realloc(repartitionInfo, 2); repartitionInfo[0] = '\0'; } Modified: sipp/trunk/stat.hpp =================================================================== --- sipp/trunk/stat.hpp 2009-01-21 15:10:06 UTC (rev 569) +++ sipp/trunk/stat.hpp 2009-01-27 03:04:52 UTC (rev 570) @@ -29,8 +29,6 @@ #define DEFAULT_FILE_NAME (char*)"dumpFile" #define DEFAULT_EXTENSION (char*)".csv" -#define MAX_REPARTITION_HEADER_LENGTH 1024 -#define MAX_REPARTITION_INFO_LENGTH 1024 #define MAX_CHAR_BUFFER_SIZE 1024 #include <ctime> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cha...@us...> - 2009-01-21 15:10:13
|
Revision: 569 http://sipp.svn.sourceforge.net/sipp/?rev=569&view=rev Author: charlespwright Date: 2009-01-21 15:10:06 +0000 (Wed, 21 Jan 2009) Log Message: ----------- Allow proper spelling of occurrence. Modified Paths: -------------- sipp/trunk/scenario.cpp Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2009-01-09 18:33:03 UTC (rev 568) +++ sipp/trunk/scenario.cpp 2009-01-21 15:10:06 UTC (rev 569) @@ -1380,6 +1380,9 @@ if (0 != (ptr = xp_get_value((char *)"occurence"))) { tmpAction->setOccurence (atol(ptr)); } + if (0 != (ptr = xp_get_value((char *)"occurrence"))) { + tmpAction->setOccurence (atol(ptr)); + } } else { ERROR("Unknown search_in value %s", ptr); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cha...@us...> - 2009-01-09 18:33:08
|
Revision: 568 http://sipp.svn.sourceforge.net/sipp/?rev=568&view=rev Author: charlespwright Date: 2009-01-09 18:33:03 +0000 (Fri, 09 Jan 2009) Log Message: ----------- Enh: Allow strcmp and test to compare two variables. Modified Paths: -------------- sipp/trunk/actions.cpp sipp/trunk/actions.hpp sipp/trunk/call.cpp sipp/trunk/scenario.cpp Modified: sipp/trunk/actions.cpp =================================================================== --- sipp/trunk/actions.cpp 2008-12-30 17:09:30 UTC (rev 567) +++ sipp/trunk/actions.cpp 2009-01-09 18:33:03 UTC (rev 568) @@ -66,7 +66,7 @@ bool CAction::compare(VariableTable *variableTable) { double lhs = variableTable->getVar(M_varInId)->getDouble(); - double rhs = M_doubleValue; + double rhs = M_varIn2Id ? variableTable->getVar(M_varIn2Id)->getDouble() : M_doubleValue; switch(M_comp) { case E_C_EQ: @@ -164,6 +164,7 @@ int CAction::getOccurence() { return(M_occurence); } int CAction::getVarId() { return(M_varId); } int CAction::getVarInId() { return(M_varInId); } +int CAction::getVarIn2Id() { return(M_varIn2Id); } char* CAction::getLookingChar() { return(M_lookingChar); } SendingMessage *CAction::getMessage(int n) { return(M_message[n]); } CSample* CAction::getDistribution() { return(M_distribution); } @@ -183,6 +184,8 @@ { M_varId = P_value; } void CAction::setVarInId (int P_value) { M_varInId = P_value; } +void CAction::setVarIn2Id (int P_value) +{ M_varIn2Id = P_value; } void CAction::setCaseIndep (bool P_value) { M_caseIndep = P_value; } void CAction::setOccurence (int P_value) @@ -424,6 +427,7 @@ M_action = E_AT_NO_ACTION; M_varId = 0; M_varInId = 0; + M_varIn2Id = 0; M_nbSubVarId = 0; M_maxNbSubVarId = 0; Modified: sipp/trunk/actions.hpp =================================================================== --- sipp/trunk/actions.hpp 2008-12-30 17:09:30 UTC (rev 567) +++ sipp/trunk/actions.hpp 2009-01-09 18:33:03 UTC (rev 568) @@ -119,6 +119,7 @@ bool getHeadersOnly(); int getVarId(); int getVarInId(); + int getVarIn2Id(); int getOccurence(); char* getLookingChar(); char* getRegularExpression(); @@ -134,6 +135,7 @@ void setCheckIt (bool P_value); void setVarId (int P_value); void setVarInId (int P_value); + void setVarIn2Id (int P_value); void setLookingChar (char* P_value); void setAction (CAction P_action); void setCaseIndep (bool P_action); @@ -173,6 +175,7 @@ bool M_headersOnly; int M_varId; int M_varInId; + int M_varIn2Id; int M_occurence; int M_nbSubVarId; int M_maxNbSubVarId; Modified: sipp/trunk/call.cpp =================================================================== --- sipp/trunk/call.cpp 2008-12-30 17:09:30 UTC (rev 567) +++ sipp/trunk/call.cpp 2009-01-09 18:33:03 UTC (rev 568) @@ -3661,7 +3661,12 @@ M_callVariableTable->getVar(currentAction->getVarId())->setBool(value); } else if (currentAction->getActionType() == CAction::E_AT_VAR_STRCMP) { char *rhs = M_callVariableTable->getVar(currentAction->getVarInId())->getString(); - char *lhs = currentAction->getStringValue(); + char *lhs; + if (currentAction->getVarIn2Id()) { + lhs = M_callVariableTable->getVar(currentAction->getVarIn2Id())->getString(); + } else { + lhs = currentAction->getStringValue(); + } int value = strcmp(rhs, lhs); M_callVariableTable->getVar(currentAction->getVarId())->setDouble((double)value); } else if (currentAction->getActionType() == CAction::E_AT_VAR_TRIM) { Modified: sipp/trunk/scenario.cpp =================================================================== --- sipp/trunk/scenario.cpp 2008-12-30 17:09:30 UTC (rev 567) +++ sipp/trunk/scenario.cpp 2009-01-09 18:33:03 UTC (rev 568) @@ -1487,7 +1487,14 @@ } else if(!strcmp(actionElem, "test")) { tmpAction->setVarId(xp_get_var("assign_to", "test")); tmpAction->setVarInId(xp_get_var("variable", "test")); - tmpAction->setDoubleValue(xp_get_double("value", "test")); + if (xp_get_value("value")) { + tmpAction->setDoubleValue(xp_get_double("value", "test")); + if (xp_get_value("variable2")) { + ERROR("Can not have both a value and a variable2 for test!"); + } + } else { + tmpAction->setVarIn2Id(xp_get_var("variable2", "test")); + } tmpAction->setActionType(CAction::E_AT_VAR_TEST); ptr = xp_get_string("compare", "test"); if (!strcmp(ptr, "equal")) { @@ -1538,8 +1545,15 @@ tmpAction->setActionType(CAction::E_AT_CLOSE_CON); } else if(!strcmp(actionElem, "strcmp")) { tmpAction->setVarId(xp_get_var("assign_to", "strcmp")); - tmpAction->setVarInId(xp_get_var("variable", "test")); - tmpAction->setStringValue(xp_get_string("value", "test")); + tmpAction->setVarInId(xp_get_var("variable", "strcmp")); + if (xp_get_value("value")) { + tmpAction->setStringValue(xp_get_string("value", "strcmp")); + if (xp_get_value("variable2")) { + ERROR("Can not have both a value and a variable2 for strcmp!"); + } + } else { + tmpAction->setVarIn2Id(xp_get_var("variable2", "strcmp")); + } tmpAction->setActionType(CAction::E_AT_VAR_STRCMP); } else if(!strcmp(actionElem, "trim")) { tmpAction->setVarId(xp_get_var("assign_to", "trim")); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |