[sr-dev] Problems with mhomed

Klaus Darilion klaus.mailinglists at pernau.at
Thu Dec 3 15:16:27 CET 2009


Marius Zbihlei wrote:
> As I see in sip-router and in kamailio, the mhomed implementation is 
> very very slow . For each SIP packet a
> temporary socket is created, connected to the remote host and than 
> checked to see what interface was selected
> to connect the socket(see method get_out_socket() in forward.c)
> 
> As test have shown, this implementation, albeit correct from a funtional 
> point of view, it's really too slow
> (or too expensive) to be used in medium-large production setups.

Just some ideas ....

Routing tables usually do not change that often. thus, hat about manual 
configuration? e.g.:

routing=0.0.0.0/0:eth0
routing=192.168.1.0/24:eth1
routing=192.168.2.0/24:eth1
routing=192.168.3.0/24:eth1
routing=1.2.3.0/16:eth2

or similar ....

(Idea stolen from Asterisk's externip & localnet settings)

regards
klaus

> 
> I am currently working on a patch that mitigates this problem. The way 
> the patch works is like this:
> 
> 1. Get the routing table from the kernel via NETLINK sockets(done at start)
> 2. Construct a link list of routes, each entry for one interface(either 
> real of virtual). The structure will hold
> the address of the interface and the destination (as reported by route 
> -n)(this will be a CIDR entry). Also it's
> decided if on that interface a default route has been assigned(done at 
> start)
> 3. get_out_socket() will be changed to loop thru the list described 
> above and decide based on the destination member
> of the struct describe above on what interface the packet is to be 
> routed. If no destination is matched than the
> default one is selected.(done for each packet)
> 4.A NETLINK socket will be added to the poll()ing loop so it can monitor 
> the changes in the kernel's routing table
> and update the internal structure if necessary.(done at start)(The table 
> is updated only if administration changes the
> routing table via route or ip route commands)
> 
> I have implemented the first 3 steps and preliminary tests look ok. step 
> for is required only if we want updates on
> the routing table in real time.
> 
> Limitations:
> 1. This only works for Linux, AF_INET sockets. AF_INET6 is also 
> supported but i don't know to what extent
> 2. For BSD, route sockets should replace the NETLINK sockets
> 
> What are your suggestion about this? Should this patch (when completely 
> finished) be commited?
> 
> Thanks for any suggestions!
> 
> Marius.
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> sr-dev mailing list
> sr-dev at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev




More information about the sr-dev mailing list