[SR-Users] dialog ka-timer/ka_interval results in flood op OPTIONS

Daniel Tryba daniel at pocos.nl
Mon Jun 3 14:37:42 CEST 2013


Trying to use the dialog module to implement calllimits I'm running into a 
problem when trying to use keep-alives to detect dead dialogs.

Limits work fine without keepalives. But as soon as  either
dlg_set_property("ka-dst");
or
dlg_set_property("ka-src");
are used, after the ka_interval timeout kamailio will start to send OPTIONS as 
fast as possible. There is no difference in behavior for inbound of outbound 
calls.

Older threads on this seem to end without solution. Increasing shmem/pkgmem 
makes no difference. System is running on Debian/stable with 
deb http://deb.kamailio.org/kamailio wheezy main
packages.

# kamailio -V
version: kamailio 4.0.0 (x86_64/linux) 
flags: STATS: Off, USE_IPV6, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS, 
DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, 
USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, 
USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, 
MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 4MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown 
compiled on 13:13:24 Mar 29 2013 with gcc 4.7.2


modparam("dialog","dlg_flag",4)
modparam("dialog","hash_size",4096)
modparam("dialog","enable_stats",1)
modparam("dialog","db_url",DBURL)
modparam("dialog","db_mode", 2)
modparam("dialog","db_update_period", 15)
modparam("dialog","profiles_with_value","maxchannels")
modparam("dialog","profiles_no_value", "all")
modparam("dialog","dlg_match_mode", 1)
modparam("dialog","send_bye", 1)
modparam("dialog","default_timeout", 43200)
modparam("dialog","ka_timer", 15)
modparam("dialog","ka_interval", 30)

dlm_manage() uses as:

route[DIALOG]
{
        if (is_method("CANCEL|ACK") || (has_totag() && is_method("INVITE|
BYE")))
        {
                dlg_manage();
                return;
        }

        if (is_method("INVITE") && !has_totag())
        {
                if($au==$null)
                {
                        route(MAXCALLSINBOUND);
                }
                else
                {
                        route(MAXCALLSOUTBOUND);
                }

                dlg_manage();
        }
}

route[MAXCALLSOUTBOUND]
{
        if(method=="INVITE")
        {
                if($au && $avp(src_maxchannels)>0)
                {
                        $var(maxchannels) = 0;
                        get_profile_size("maxchannels", "$au", 
"$var(maxchannels)");

                        if($var(maxchannels)>=$avp(src_maxchannels))
                        {
                                send_reply("403","Call limit reached");
                                exit;
                        }

                        set_dlg_profile("maxchannels","$au");
                        dlg_set_property("ka-src");

                        get_profile_size("maxchannels", "$au", 
"$var(maxchannels)");
                }
        }

        return;
}

MAXCALLSINBOUND is nearly the same but uses $rU instead of $au (and routes to 
voicemail/redirects if applicable).



Resulting in network traffic:

U +6.719318 10.0.32.42:5060 -> 10.0.34.226:27819
OPTIONS sip:+31880100781 at 10.0.34.226:27819 SIP/2.0.
Via: SIP/2.0/UDP 10.0.32.42;branch=z9hG4bK3548.6baca897.0.
To: sip:+31880100781 at 10.0.32.42;tag=3c64a586e73b0dc9o0.
From: sip:0880100705 at 10.0.32.42;tag=as2b14090d.
CSeq: 101 OPTIONS.
Call-ID: db688a0a-53e2d315 at localhost.
Max-Forwards: 70.
Content-Length: 0.
.

#
U +0.000041 10.0.32.42:5060 -> 10.0.34.226:27819
OPTIONS sip:+31880100781 at 10.0.34.226:27819 SIP/2.0.
Via: SIP/2.0/UDP 10.0.32.42;branch=z9hG4bK3548.7baca897.0.
To: sip:+31880100781 at 10.0.32.42;tag=3c64a586e73b0dc9o0.
From: sip:0880100705 at 10.0.32.42;tag=as2b14090d.
CSeq: 101 OPTIONS.
Call-ID: db688a0a-53e2d315 at localhost.
Max-Forwards: 70.
Content-Length: 0.
.

#
U +0.000028 10.0.32.42:5060 -> 10.0.34.226:27819
OPTIONS sip:+31880100781 at 10.0.34.226:27819 SIP/2.0.
Via: SIP/2.0/UDP 10.0.32.42;branch=z9hG4bK3548.8baca897.0.
To: sip:+31880100781 at 10.0.32.42;tag=3c64a586e73b0dc9o0.
From: sip:0880100705 at 10.0.32.42;tag=as2b14090d.
CSeq: 101 OPTIONS.
Call-ID: db688a0a-53e2d315 at localhost.
Max-Forwards: 70.
Content-Length: 0.
.

#
U +0.000026 10.0.32.42:5060 -> 10.0.34.226:27819
OPTIONS sip:+31880100781 at 10.0.34.226:27819 SIP/2.0.
Via: SIP/2.0/UDP 10.0.32.42;branch=z9hG4bK3548.9baca897.0.
To: sip:+31880100781 at 10.0.32.42;tag=3c64a586e73b0dc9o0.
From: sip:0880100705 at 10.0.32.42;tag=as2b14090d.
CSeq: 101 OPTIONS.
Call-ID: db688a0a-53e2d315 at localhost.
Max-Forwards: 70.
Content-Length: 0.
.

[6412 more OPTIONS before hanging up or phone reboots]


syslog output (another call since turning debug on will choke the machine in 
disk IO to syslog), it keeps repeating stuff like this:

14:19:56 DEBUG: topoh [topoh_mod.c:345]: the COOKIE is [xxx]
14:19:56 DEBUG: dialog [dlg_req_within.c:387]: keep-alive sent to caller
14:19:56 DEBUG: dialog [dlg_hash.c:753]: unref dlg 0x7fb4bfe3d2e0 with 1 -> 2
14:19:56 DEBUG: dialog [dlg_hash.c:588]: ref dlg 0x7fb4bfe3d2e0 with 1 -> 3
14:19:56 DEBUG: dialog [dlg_hash.c:590]: dialog id=7871 found on entry 2710
14:19:56 DEBUG: dialog [dlg_req_within.c:366]: sending BYE to caller
14:19:56 DEBUG: tm [uac.c:243]: DEBUG:tm:t_uac: next_hop=<sip:
+31880100781 at 10.0.34.226:27819>
14:19:56 DEBUG: tm [uac.c:182]: DEBUG: dlg2hash: 6504
14:19:56 DEBUG: <core> [parser/msg_parser.c:623]: SIP Request:
14:19:56 DEBUG: <core> [parser/msg_parser.c:625]:  method:  <OPTIONS>
14:19:56 DEBUG: <core> [parser/msg_parser.c:627]:  uri:     <sip:
+31880100781 at 10.0.34.226:27819>
14:19:56 DEBUG: <core> [parser/msg_parser.c:629]:  version: <SIP/2.0>
14:19:56 DEBUG: <core> [parser/parse_via.c:1284]: Found param type 232, 
<branch> = <z9hG4bK8691.df660fd1.0>; state=16
14:19:56 DEBUG: <core> [parser/parse_via.c:2672]: end of header reached, 
state=5
14:19:56 DEBUG: <core> [parser/msg_parser.c:513]: parse_headers: Via found, 
flags=2
14:19:56 DEBUG: <core> [parser/msg_parser.c:515]: parse_headers: this is the 
first via
14:19:56 DEBUG: <core> [parser/parse_to.c:176]: DEBUG: add_param: 
tag=a2b76e7ff411361o0
14:19:56 DEBUG: <core> [parser/parse_to.c:799]: end of header reached, 
state=29
14:19:56 DEBUG: <core> [parser/msg_parser.c:190]: DEBUG: get_hdr_field: <To> 
[54]; uri=[sip:+31880100781 at 10.0.32.42]  
14:19:56 DEBUG: <core> [parser/msg_parser.c:192]: DEBUG: to body [sip:
+31880100781 at 109. 235.32.42]
14:19:56 DEBUG: <core> [parser/msg_parser.c:170]: get_hdr_field: cseq <CSeq>: 
<101> <OPTIONS>
14:19:56 DEBUG: <core> [parser/msg_parser.c:204]: DEBUG: get_hdr_body : 
content_length=0
14:19:56 DEBUG: <core> [parser/msg_parser.c:106]: found end of header
14:19:56 DEBUG: <core> [parser/parse_to.c:176]: DEBUG: add_param: 
tag=as23ba5e76
14:19:56 DEBUG: <core> [parser/parse_to.c:799]: end of header reached, 
state=29

-- 

POCOS B.V. - Croy 9c - 5653 LC Eindhoven
Telefoon: 040 293 8661 - Fax: 040 293 8658
http://www.pocos.nl/   - http://www.sipo.nl/
K.v.K. Eindhoven 17097024



More information about the sr-users mailing list