Klaus Feichtinger schrieb:
Hi,
I have a special question regarding a mixture of parallel and serial
forking, operated by Kamailio-3.0.0.
First of all I will give you a short background information, what the
target will be:
I have a SIP-server on place A, 3 gateways on place B and 3 gateways
on place C). These gateways are registered on SIP server (A) with
different Q-values (e.g. GW-B1=1.0, GW-C1=1.0, GW-B2=0.8, GW-C2=0.8,
GW-B3=0.6, GW-C3=0.6). The target is, that a call for a gateway MUST
be signalled on place B and C in parallel (forking) until the call is
finally established over one of the two involved gateways on place B
or C. When the prime gateway(s) (with the highest Q-value) fail (e.g.
they do not send a provisional response within a timeout or send a
negative response), the next gateway(s) should be addressed (with the
next lower Q-value), a.s.o.
The configuration works well in case that both gateways on place B
and C fail at the same time (BOTH do not send a response or BOTH send
a negative response or one does not send a response and the other one
sends a negative response). However, in case that only ONE of the two
(always in parallel) addressed gateways fails, it does not work as
expected.
What is expected?
Do you want to trigger failover to lower priority even if one the
gateways is still working fine? You can not do that with sip-router. sr
implements parallel forking according to RFC3261, this means it will not
generate a failure response as long as one of the branches is still
active, maybe sending 200 ok.
It does nothing and/or waits for an eventually
negative
response or the call setup timeout.
Finally, a call can only be established via one gateway, so either the
GW at B or C sends the 200 OK. If you always trigger failover to lower
priority gateways if one of the gateways failed, there is no benefit of
doing parallel forking at all - at least I do not see a benefit of
having redundant gateways.
regards
klaus
Configuration is done as described in the README of the TM module. It
is a mixture of the main route and a failure_route in combination
with the functions t_load_contacts() and t_next_contacts().
Does anybody have an idea how this problem could be solved or any
alternative solution for this special requirement of parallel
signalisation in any case?
Thanks in advance!
Regards, Klaus