[sr-dev] [Kamailio 1.5 LCR] gw with same IP but different port is not loaded

Iñaki Baz Castillo ibc at aliax.net
Sun May 30 02:35:46 CEST 2010


Hi, kamailio 1.5.4, let's suppose the following tables for LCR:

lcr:
+----+-----------+-------------+---------+----------+
| id   l prefix   | from_uri | grp_id | priority |
+----+-----------+-------------+---------+----------+
|  1 |   NULL   | NULL     |      1  |        1 |
|  2 |   NULL   | NULL     |      2  |        2 |
+----+-----------+-------------+---------+----------+

gw:
+----+--------+---------------------+------+-----------+
| id   | grp_id | ip_addr          | port | weight |
+-----+--------+---------------------+------+-----------+
| 1   |      1  | 1.1.1.1           | 5060 |   1      |
| 2   |      1  | 2.2.2.2           | 5060 |   1      |
| 3   |      2  | 2.2.2.2           | 5062 |   1      |
+----+--------+--------+---------------------+---------+


IMHO it's clear what *should* occur when a request arrives and
load_gw() is called:

1) First the rule 1 should be executed, so gws with id 1 and 2 would
be tested (when invoking next_gw() in route and failure_route).
2) In case both gws fail them the gw 3 should be used.


However this is what occurs:

  DBG:lcr:do_load_gws: added matched_gws[0]=[3, 1, 2, 2460706]
  DBG:lcr:do_load_gws: added matched_gws[1]=[1, 1, 1, 3162440]
  DBG:lcr:add_gws_into_avps: added gw_uri_avp <1|0||33686018||5062|0|0>
  DBG:lcr:add_gws_into_avps: added gw_uri_avp <1|0||16843009||5060|0|0>


This is, just gws 1 and 2 are loaded in gw_uri_avp (or sometimes gws 1
and 3). Note that gws 2 and 3 have same IP but *different* port, so
there is no reason at all not to load gw 3.

IMHO this shouldn't be the behavior, in fact it seems buggy IMHO. I
know that same occurs in 3.0 version. Any comment?


BTW I strongly think that LCR module should be improved and I would
like to do it. Some ideas I have in mind:
- Improve the tables design by having three tables: lcr_rules,
lcr_groups and lcr_gws.
- Allow loading same gw twice in gw_uri_avp when it belongs to
different lcr_rule/lcr_groups.
- An option to enable/dissable a gw (by setting a 0 in a new "enabled" column).
- Am option to allow stopping lcr_rules, this is, if the lcr_rule is
choosen (by priority/prefix/from_uri) and the request fails, no other
gateways from other lcr_rules would be tryed.

Well, I'll detail it further soon. Regards.



-- 
Iñaki Baz Castillo
<ibc at aliax.net>



More information about the sr-dev mailing list