[sr-dev] new feature: option to remove contacts based on sip nat keepalives

Olle E. Johansson oej at edvina.net
Mon Aug 20 10:13:12 CEST 2012


20 aug 2012 kl. 10:06 skrev Daniel-Constantin Mierla:

> Hello,
> 
> over the weekend I committed the code that allows to remove contacts from location table if the device does not respond to several attempts of SIP nat keepalives (usually OPTIONS requests).
> 
> The feature works only for SIP over UDP, being the only transport for which nathelper module sends keepalives (or sip ping requests as written in some docs).
> 
> Also, the lack of keepalive reply is tracked only for location records stored in memory (so it does not work with db only mode for usrloc). This is because the keepalives are sent stateless, not using tm module, to avoid overloading of timers and shared memory when dealing with large subscriber base -- therefore the implementation is very lightweight in using resources, targeting of course scalability. Detection of replies for keepalives is done based on from tag which carries the internal unique id of the location contact (which is available from v3.3).
> 
> In order to enable this feature you have to set the keepalive_timeout parameter of nathelper module -- that's the only addition you have to add to a config that sends SIP nat keepalives. Internally, the modules store the timestamp of the last SIP keepalive reply (nathelper detects the right reply and calls usrloc API for storing the timestamp in contact structure in memory).
> 
> http://kamailio.org/docs/modules/devel/modules_k/nathelper.html#id2535244
> 
> Before sending a new keepalive to a contact, it is checking if the last keepalive reply is older than keepalive_timeout value and if yes, will lower the expires to 10 seconds (if the expires is higher). There is no special handling of keepalive reply codes, all of them will update the last keepalive timestamp.
> 
> This feature should be useful in mobile networks, to avoid stacking lot of invalid contacts which could result in lot of branches causing many retransmissions.
> 
> There is plant to go for tcp/tls as well and detect when the connection is down, but looks like no spare time in the near future. However, right now using set_forward_no_connect() will avoid trying to create new connections for natted uses whose registration connection is down.
> 
On my personal wish list is to have an event route when a registered device becomes unreachable - like a closed TCP connection for a device behind NAT or failure to response to NAT pings.

/O

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2307 bytes
Desc: not available
URL: <http://lists.sip-router.org/pipermail/sr-dev/attachments/20120820/03166305/attachment.bin>


More information about the sr-dev mailing list