[SR-Users] Kamailio propagates 180 and 200 OK OUT OF ORDER

Luis Rojas G. luis.rojas at sixbell.com
Wed Apr 8 22:04:10 CEST 2020


Hello, Daniel

I will try this option.

I tried the ASYNC, using async_ms_sleep, but it seems it's not allowed 
in reply_route(). I wonder why. Documentation only mentions request_route:

https://kamailio.org/docs/modules/5.3.x/modules/async.html#async.f.async_ms_sleep

if I use it in reply_route() kamailio does not even start.

  0(22147) ERROR: <core> [core/cfg.y:3402]: yyparse(): misused command 
async_ms_sleep
  0(22147) CRITICAL: <core> [core/cfg.y:3547]: yyerror_at(): parse error 
in config file /etc/kamailio/kamailio.cfg, line 221, column 23: Command 
cannot be used in the block

ERROR: bad config file (1 errors)

I wanted to introduce an artificial delay of just a few miliseconds to 
200 OK to INVITE.

it's not just a problem about 180 and 200, but several other conditions 
that will start to appear, like betwen ACK-Reinvite.

Anyone reading is the list administrator? I tried to subscribe to the 
list, bit it seems I am still not a member, so I don't receive answers 
(unless I am copied directly) and can't post immediately, only after 
moderator's approval.

Also, I can't answer all responses.

Best regards,

Luis

On 4/8/20 1:07 PM, Daniel-Constantin Mierla wrote:
>
> Hello,
>
> you have to keep in mind that Kamailio is a SIP packet router, not a 
> telephony engine. If 180 and 200 replies are part of a call is not 
> something that Kamailio recognize at its core. Its main goal is to 
> route out as fast as possible what is received, by executing the 
> configuration file script. Now, a matter of your configuration file, 
> processing of some SIP messages can take longer than processing other. 
> And the processing is done in parallel, a matter of children parameter 
> (and tcp_children, sctp_children).
>
> With that in mind, a way to try to cope better with the issue you face 
> is to set route_locks_size parameter, see:
>
>   * 
> https://www.kamailio.org/wiki/cookbooks/devel/core#route_locks_size 
> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.kamailio.org%2Fwiki%2Fcookbooks%2Fdevel%2Fcore%23route_locks_size&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624481963069&sdata=CWh4qvJwYloHLPCOFUdVXRuge3l2rvuAUDM6FBNjFMA%3D&reserved=0>
>
> Probably is what you look for.
>
> But if you want more tight constraints, like when receiving a 180 
> after a 200ok and not route it out, you have to make the logic in 
> configuration file by combining modules such as dialog or htable (as 
> already suggested).
>
> Cheers,
> Daniel
>
> On 08.04.20 16:04, Luis Rojas G. wrote:
>> Hi, Henning,
>>
>> No need to be ironic. As I mentioned on my first post, I tried 
>> stateful proxy and I observed the same behavior.
>>
>> /"I tried using stateful proxy and I obtained the same result."/
>>
>> The asynchronous sleep seems promising. I will look into it.
>>
>> Thanks,
>>
>> Luis
>>
>>
>> On 4/8/20 9:30 AM, Henning Westerholt wrote:
>>>
>>> Hi Luis,
>>>
>>> I see. Well, you want to use Kamailio as a stateless proxy, on the 
>>> other hand it should do things that are inherently stateful. 😉
>>>
>>> As mentioned, have a look to the dialog module to track the state of 
>>> dialogs that you process. This will not work in a stateless mode, 
>>> though.
>>>
>>> You can also use the htable module to just store some data about the 
>>> processed messages in a shared memory table and use this to enforce 
>>> your ordering. There is also the option to do an asynchronous sleep 
>>> (with the async) module on the message that you want to delay but 
>>> still processing other messages during it.
>>>
>>> Cheers,
>>>
>>> Henning
>>>
>>> -- 
>>>
>>> Henning Westerholt – https://skalatan.de/blog/ 
>>> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fskalatan.de%2Fblog%2F&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624481973065&sdata=ISKj4Fc0FlBemyJhLFeDaXPQjpOrjIceeXURx2OccqU%3D&reserved=0>
>>>
>>> Kamailio services – https://gilawa.com 
>>> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgilawa.com%2F&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624481983060&sdata=vsVGfGjX4ZgDN%2FyaxzSCmc5BHNa%2Buu0Y%2FFQLbW7ETOc%3D&reserved=0>
>>>
>>> *From:* Luis Rojas G. <luis.rojas at sixbell.com>
>>> *Sent:* Wednesday, April 8, 2020 3:00 PM
>>> *To:* Henning Westerholt <hw at skalatan.de>; Kamailio (SER) - Users 
>>> Mailing List <sr-users at lists.kamailio.org>
>>> *Subject:* Re: [SR-Users] Kamailio propagates 180 and 200 OK OUT OF 
>>> ORDER
>>>
>>> Hello, Henning,
>>>
>>> I am worried about this scenario, because it's a symptom of what may 
>>> happen in other cases. For instance, I've seen that this operator 
>>> usually sends re-invites immediate after sending ACK.   This may 
>>> create race conditions like 3.1.5 of RFC5407
>>>
>>> https://tools.ietf.org/html/rfc5407#page-22 
>>> <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Frfc5407%23page-22&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624481983060&sdata=FekMqBnzvOj4%2FVFnS9x0X5KdcA0Ov1gcb975iEzfWZE%3D&reserved=0>
>>>
>>> I'd understand that one happens because of packet loss, as it's in 
>>> UDP's nature, but in this case it would be artificially created by 
>>> Kamailio. if there was no problem at network level (packet loss, 
>>> packets following different path on the network and arriving out of 
>>> order), why Kamailio creates it?
>>>
>>> I'd expect that the shared memory is used precisely for this. If an 
>>> instance of kamailio receives a 200 OK, it could check on the shm 
>>> and say "hey, another instance is processing a 180 for this call. 
>>> Let's wait for it to finish" (*). I know there could still be a 
>>> problem, the instance processing the 180 undergoes a context switch 
>>> just after it receives the message, but before writing to shm, but 
>>> it would greatly reduce the chance.
>>>
>>> In our applications we use a SIP stack that always sends messages to 
>>> the application in the same order it receives them, even though is 
>>> multi-threaded and messages from the network are received by 
>>> different threads. So, they really syncronize between them. Why 
>>> Kamailio instances don't?
>>>
>>> I am evaluating kamailio to use it as a dispatcher to balance load 
>>> against our several Application Servers, to present to the operator 
>>> just a couple of entrance points to our platform (they don't want to 
>>> establish connections to each one of our servers). This operator is 
>>> very difficult to deal with. I am sure they will complain something 
>>> like "why are you sending messages out of order? Fix that". The 
>>> operator will be able to see traces and check that messages entered 
>>> the Kamailio nodes in order and left out of order. They will not 
>>> accept it.
>>>
>>> (*) Not really "wait", as it would introduce a delay in processing 
>>> all messages. it should be like putting it on a queue, continue 
>>> processing other messages, and go back to the queue later.
>>>
>>> Well, thanks for your answer.
>>>
>>> Luis
>>>
>>>
>>>
>>> On 4/8/20 3:01 AM, Henning Westerholt wrote:
>>>
>>>     Hello Luis,
>>>
>>>     as the 1xx responses are usually send unreliable (unless you use
>>>     PRACK), you should not make any assumption on the order or even
>>>     the arrival of this messages. It can also happens on a network
>>>     level, if send by UDP.
>>>
>>>     Can you elaborate why you think this re-ordering is a problem
>>>     for you?
>>>
>>>     One idea to enforce some ordering would be to use the dialog
>>>     module in combination with reply routes and the textops(x)  module.
>>>
>>>     About the shared memory question – Kamailio implement its own
>>>     memory manager (private memory and shared memory pool).
>>>
>>>     Cheers,
>>>
>>>     Henning
>>>
>>>     -- 
>>>
>>>     Henning Westerholt – https://skalatan.de/blog/
>>>     <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fskalatan.de%2Fblog%2F&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624481993053&sdata=E%2BY%2BNYI0%2FtTIOzOXEKwDkZn%2BexDCKcl2giC%2FKNecLoE%3D&reserved=0>
>>>
>>>     Kamailio services – https://gilawa.com
>>>     <https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgilawa.com%2F&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624482003051&sdata=nDoL%2BEeMl0r6Kc4gIZ0MaAWWza9Mv8gMlZkWBTCOo80%3D&reserved=0>
>>>
>>>
>>>     *From:* sr-users <sr-users-bounces at lists.kamailio.org>
>>>     <mailto:sr-users-bounces at lists.kamailio.org> *On Behalf Of *Luis
>>>     Rojas G.
>>>     *Sent:* Tuesday, April 7, 2020 10:43 PM
>>>     *To:* sr-users at lists.kamailio.org
>>>     <mailto:sr-users at lists.kamailio.org>
>>>     *Subject:* [SR-Users] Kamailio propagates 180 and 200 OK OUT OF
>>>     ORDER
>>>
>>>     Good day,
>>>
>>>     I am testing the dispatcher module, using Kamailio as stateless
>>>     proxy. I have a pool of UAC (scripts in SIPP) and a pool of UAS
>>>     (also scripts in SIPP) for the destinations. Kamailio version is
>>>     kamailio-5.3.3-4.1.x86_64.
>>>
>>>     Problem I have is, if UAS responds 180 and 200 OK to Invite
>>>     immediately, sometimes they are propagated out of order. 200 OK
>>>     before 180, like this :
>>>
>>>     UAS is 172.30.4.195:5061. UAC is 172.30.4.195:5080. Kamailio is
>>>     192.168.253.4:5070
>>>
>>>     Difference between 180 and 200 is just about 50 microseconds.
>>>
>>>     My guess is that both messages are received by different
>>>     instances of Kamailio, and then because of context switches,
>>>     even though the 180 is received before, that process ends after
>>>     the processing of 200. However, I had the idea that in order to
>>>     avoid these problems the kamailio processes synchronized with
>>>     each other using a shared memory. I tried using stateful proxy
>>>     and I obtained the same result.
>>>
>>>     By the way, anyone has any idea about how Kamailio's share
>>>     memory is implemented? It clearly does not use the typical
>>>     system calls shmget(), shmat(), because they are not shown by
>>>     ipcs command.
>>>
>>>     Before posting here I googled, but I couldn't find anything
>>>     related to this. I can't believe I am the only one who ever had
>>>     this problem, so I guess I am doing something wrong...
>>>
>>>     Please, any help. I'm really stuck on this.
>>>
>>>     Thanks.
>>>
>>>     -- 
>>>
>>> -- 
>>> Luis Rojas
>>> Software Architect
>>> Sixbell
>>> Los Leones 1200
>>> Providencia
>>> Santiago, Chile
>>> Phone: (+56-2) 22001288
>>> mailto:luis.rojas at sixbell.com
>>> http://www.sixbell.com  <https://nam02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.sixbell.com%2F&data=02%7C01%7C%7C1bde0e5c47434fa230df08d7dbdf4eb4%7Cab4a33c2b5614f798601bc921698ad08%7C0%7C0%7C637219624482003051&sdata=tGs20FsV%2FwXvEg1FSIdB7nByjdj0Xw6tVtKlYa5byyU%3D&reserved=0>
>>
>>
>> -- 
>> Luis Rojas
>> Software Architect
>> Sixbell
>> Los Leones 1200
>> Providencia
>> Santiago, Chile
>> Phone: (+56-2) 22001288
>> mailto:luis.rojas at sixbell.com
>> http://www.sixbell.com
>>
>> _______________________________________________
>> Kamailio (SER) - Users Mailing List
>> sr-users at lists.kamailio.org
>> https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users
> -- 
> Daniel-Constantin Mierla --www.asipto.com
> www.twitter.com/miconda  --www.linkedin.com/in/miconda


-- 
Luis Rojas
Software Architect
Sixbell
Los Leones 1200
Providencia
Santiago, Chile
Phone: (+56-2) 22001288
mailto:luis.rojas at sixbell.com
http://www.sixbell.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20200408/2abcc44b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.png
Type: image/png
Size: 49792 bytes
Desc: not available
URL: <http://lists.kamailio.org/pipermail/sr-users/attachments/20200408/2abcc44b/attachment.png>


More information about the sr-users mailing list