-
Notifications
You must be signed in to change notification settings - Fork 0
/
ims_uas.xml
286 lines (232 loc) · 8.72 KB
/
ims_uas.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
<?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 -->
<!-- -->
<!-- IMS Benchmark Calling scenario - UAS side -->
<!-- -->
<!-- Author : David Verbeiren from Intel Corporation - July 2007 -->
<!-- Xavier Simonart from Intel Corporation - July 2007 -->
<!-- Philippe Lecluse from Intel Corporation - July 2007 -->
<!-- -->
<scenario name="ims_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. -->
<!-- Most of this this could possibly be fully hidden in the internal handling of -->
<!-- REQ_USER message that triggers an instance of the scenario but since we have the -->
<!-- necessary actions ('assign_user', 'move_user'), why not use them? (at the expense -->
<!-- of marginally lower perf than hard-coded behavior...) -->
<recvRmt type="req_user">
<action>
<assign_user pool="2" scheme="rand_uni"/>
<move_user pool="3"/> <!-- 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="[call_id]"/>
<!-- We give our local call_id so the partner SIPp will include -->
<!-- it in subsequent messages to us, allowing us to then -->
<!-- find the call back efficiently -->
</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">
<!-- The imestamp, 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>
<ereg regexp="(Via.*)([[:cntrl:]][[:cntrl:]]Via:[^[:cntrl:]]*)"
search_in="msg"
check_it="true"
assign_to="1" />
<ereg regexp="(Record-Route.*)([[:cntrl:]][[:cntrl:]]Record-Route:[^[:cntrl:]]*)"
search_in="msg"
check_it="true"
assign_to="2" />
<exec int_cmd="set_start_time"/>
</action>
</recv>
<send>
<![CDATA[
SIP/2.0 183 Session Progress
[last_Via:]
[last_Record-Route:]
[last_From:]
[last_To:];tag=[pid]SIPpTag01[call_number]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [field5]
s=-
c=IN IP[media_ip_type] [field5]
t=0 0
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>
<recv request="PRACK">
</recv>
<send>
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_Record-Route:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
<recv request="UPDATE">
</recv>
<send>
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_Record-Route:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
<!-- Ringing Time -->
<pause poisson="true" mean="%RingTime"/>
<send>
<![CDATA[
SIP/2.0 180 Ringing
[$1]
[$2]
[last_From:]
[last_To:]
[last_Call-ID:]
CSeq: 10 INVITE
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
<recv request="PRACK">
</recv>
<send>
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_Record-Route:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_CSeq:]
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Length: 0
]]>
</send>
<!-- Ringing Time -->
<pause poisson="true" mean="%RingTime"/>
<send retrans="500" rtd="5">
<![CDATA[
SIP/2.0 200 OK
[$1]
[$2]
[routes]
[last_From:]
[last_To:]
[last_Call-ID:]
CSeq: 10 INVITE
Contact: <sip:[field0]@[field5]:[local_port];transport=[transport]>
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [field5]
s=-
c=IN IP[media_ip_type] [field5]
t=0 0
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>
<recv request="BYE" optional="true" next="5"/> <!-- In case it went faster than ACK (UDP) -->
<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">
</recv>
<send crlf="true" next="10">
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:]
[last_Record-Route:]
[last_Call-ID:]
[last_CSeq:]
Content-Length: 0
]]>
</send>
<label id="5"/> <!-- BYE came before ACK -->
<send crlf="true">
<![CDATA[
SIP/2.0 200 OK
[last_Via:]
[last_From:]
[last_To:]
[last_Call-ID:]
[last_Record-Route:]
[last_CSeq:]
Content-Length: 0
]]>
</send>
<recv request="ACK" optional="true" start_rtd="1"/>
<label id="10"/> <!-- END OF SCENARIO -->
<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="2"/> <!-- Done with scen -> back to 'Registered' -->
</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>