THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#460 - dispatcher doesn't loadbalance correctly if one target is offline
User who did this - Daniel-Constantin Mierla (miconda)
----------
Is it the target marked as inactive? Or is is still kept as active in dispatcher list?
Haven't checked you config, but I assume you use some hashing algorithm, not round-robin.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=460#comment1596
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
A new Flyspray task has been opened. Details are below.
User who did this - Sebastian Damm (sdamm)
Attached to Project - sip-router
Summary - dispatcher doesn't loadbalance correctly if one target is offline
Task Type - Bug Report
Category - Module
Status - Unconfirmed
Assigned To -
Operating System - Linux
Severity - Medium
Priority - Normal
Reported Version - Development
Due in Version - Undecided
Due Date - Undecided
Details - We're running a dispatcher setup where a loadbalancer sends traffic to a couple of proxy servers. Now if one proxy server is offline, the users from this proxy server are sent to exactly ONE other proxy server. This way, the customers still get their service, but one server has more load than the others. What I would expect is, that the dispatcher module recalculates the target and sends it equally distributed to the remaining servers.
I have setup a test environment, took the sample kamailio.cfg and edited it as needed. Had one load balancer and four registrar servers. Then I took sipp and sent 1000 REGISTER requests to the loadbalancer. I have attached a screenshot of kamctl moni of all registrars to see how they were distributed. As you can see in the first screenshot, it is equally distributed as expected.
Then I disabled proxy4. I restarted the other registrars, then sent the same 1000 requests to the load balancer. The second screenshot shows how they were distributed. As you can see, proxy3 got all the registrations from proxy4, while proxy1 and proxy2 remained at the exact same number as before.
I have attached my sample configs as well.
One or more files have been attached.
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=460
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#459 - Dispatcher Round Robin Logic not Working with Dispatcher Table with FQDNs
User who did this - Ed James (erj01)
----------
Just to wrap up, this was the issue, the media server when addressed as LYNCMESLOADBAL2.RedwoodLync.com was rejecting the OPTIONS ping from the Kamailio and hence being marked as IP in the dispatcher table.
Thanks for your help much appreciated.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=459#comment1595
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
Module: sip-router
Branch: master
Commit: 72ddccb2aa8a7b40bbd6b0339f884f0ba3181429
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=72ddccb…
Author: Richard Good <richard.good(a)smilecoms.com>
Committer: Richard Good <richard.good(a)smilecoms.com>
Date: Mon Aug 18 13:03:14 2014 +0200
modules/ims_qos:
Use same framed-ip-address and subscription-id through Rx session
Save framed-ip-address and subscription-id for initial Rx AAR and re-use for
subsequent AARs in the same Rx session
---
modules/ims_qos/mod.c | 81 ++++++++++++++++++++++++++++++++++++++++-
modules/ims_qos/rx_aar.c | 36 +++++--------------
modules/ims_qos/rx_authdata.c | 18 ++++++++-
modules/ims_qos/rx_authdata.h | 4 ++-
4 files changed, 107 insertions(+), 32 deletions(-)
Diff: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commitdiff;h=72d…
Module: sip-router
Branch: master
Commit: 939f29361571385e4222494caab4a1b6272405c5
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=939f293…
Author: Richard Good <richard.good(a)smilecoms.com>
Committer: Richard Good <richard.good(a)smilecoms.com>
Date: Mon Aug 18 13:02:30 2014 +0200
modules/ims_charging: added support for video charging
Previously service identifier was hard coded
This change adds configurable parameter for voice service id and rating group and video service id and rating group
If INVITE SDP includes audio only we use voice parameter, if INVITE SDP includes video we use video parameters
---
modules/ims_charging/doc/ims_charging_admin.xml | 76 +++++++++++++++++++++++
modules/ims_charging/ims_ro.c | 72 ++++++++++++++++++++-
modules/ims_charging/mod.c | 14 ++++
3 files changed, 158 insertions(+), 4 deletions(-)
diff --git a/modules/ims_charging/doc/ims_charging_admin.xml b/modules/ims_charging/doc/ims_charging_admin.xml
index abd705f..a77f03d 100644
--- a/modules/ims_charging/doc/ims_charging_admin.xml
+++ b/modules/ims_charging/doc/ims_charging_admin.xml
@@ -611,6 +611,82 @@ modparam("ims_charging", "service_context_id_mnc", "42")
</programlisting>
</example>
</section>
+
+ <section>
+ <title><varname>voice_service_identifier</varname>(string)</title>
+
+ <para>This defines the service identifier to be used for charging voice.</para>
+
+ <para><emphasis>Default value is "1000".</emphasis></para>
+
+ <example>
+ <title><varname>voice_service_identifier</varname>parameter
+ usage</title>
+
+ <programlisting format="linespecific">
+...
+modparam("ims_charging", "voice_service_identifier", "1000")
+...
+ </programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title><varname>voice_rating_group</varname>(string)</title>
+
+ <para>This defines the rating group to be used for charging voice.</para>
+
+ <para><emphasis>Default value is "100".</emphasis></para>
+
+ <example>
+ <title><varname>voice_rating_group</varname>parameter
+ usage</title>
+
+ <programlisting format="linespecific">
+...
+modparam("ims_charging", "voice_rating_group", "100")
+...
+ </programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title><varname>video_service_identifier</varname>(string)</title>
+
+ <para>This defines the service identifier to be used for charging video.</para>
+
+ <para><emphasis>Default value is "1001".</emphasis></para>
+
+ <example>
+ <title><varname>video_service_identifier</varname>parameter
+ usage</title>
+
+ <programlisting format="linespecific">
+...
+modparam("ims_charging", "video_service_identifier", "1000")
+...
+ </programlisting>
+ </example>
+ </section>
+
+ <section>
+ <title><varname>video_rating_group</varname>(string)</title>
+
+ <para>This defines the rating group to be used for charging video.</para>
+
+ <para><emphasis>Default value is "200".</emphasis></para>
+
+ <example>
+ <title><varname>video_rating_group</varname>parameter
+ usage</title>
+
+ <programlisting format="linespecific">
+...
+modparam("ims_charging", "video_rating_group", "100")
+...
+ </programlisting>
+ </example>
+ </section>
<section>
<title><varname>service_context_id_mcc</varname>(string)</title>
diff --git a/modules/ims_charging/ims_ro.c b/modules/ims_charging/ims_ro.c
index ef324f1..7f0ece2 100644
--- a/modules/ims_charging/ims_ro.c
+++ b/modules/ims_charging/ims_ro.c
@@ -19,6 +19,7 @@
#include "../../parser/parse_to.h"
#include "../../lib/ims/ims_getters.h"
+#include "../../parser/sdp/sdp.h"
#include "diameter_ro.h"
#include "ims_ro.h"
@@ -51,6 +52,13 @@ extern struct tm_binds tmb;
int interim_request_credits;
+extern int voice_service_identifier;
+extern int voice_rating_group;
+extern int video_service_identifier;
+extern int video_rating_group;
+extern int active_service_identifier;
+extern int active_rating_group;
+
static int create_cca_return_code(int result);
static void resume_on_initial_ccr(int is_timeout, void *param, AAAMessage *cca, long elapsed_msecs);
static void resume_on_interim_ccr(int is_timeout, void *param, AAAMessage *cca, long elapsed_msecs);
@@ -179,7 +187,9 @@ inline int Ro_add_multiple_service_credit_Control_stop(AAAMessage *msg, int used
str used_group;
char x[4];
- unsigned int service_id = 1000; //VOICE TODO FIX as config item
+ //unsigned int service_id = 1000; //Removed these are now configurable config file params
+
+ //unsigned int rating_group = 500; //Removed these are now configurable config file params
used_list.head = 0;
used_list.tail = 0;
@@ -195,8 +205,11 @@ inline int Ro_add_multiple_service_credit_Control_stop(AAAMessage *msg, int used
Ro_add_avp_list(&mscc_list, used_group.s, used_group.len, AVP_Used_Service_Unit, AAA_AVP_FLAG_MANDATORY, 0, AVP_FREE_DATA, __FUNCTION__);
}
- set_4bytes(x, service_id);
+ set_4bytes(x, active_service_identifier);
Ro_add_avp_list(&mscc_list, x, 4, AVP_Service_Identifier, AAA_AVP_FLAG_MANDATORY, 0, AVP_DUPLICATE_DATA, __FUNCTION__);
+
+ set_4bytes(x, active_rating_group);
+ Ro_add_avp_list(&mscc_list, x, 4, AVP_Rating_Group, AAA_AVP_FLAG_MANDATORY, 0, AVP_DUPLICATE_DATA, __FUNCTION__);
used_group = cdpb.AAAGroupAVPS(mscc_list);
cdpb.AAAFreeAVPList(&mscc_list);
@@ -207,7 +220,10 @@ inline int Ro_add_multiple_service_credit_Control_stop(AAAMessage *msg, int used
inline int Ro_add_multiple_service_credit_Control(AAAMessage *msg, unsigned int requested_unit, int used_unit) {
AAA_AVP_LIST list, used_list, mscc_list;
str group, used_group;
- unsigned int service_id = 1000; //VOICE TODO FIX as config item - should be a MAP that can be identified based on SDP params
+ //unsigned int service_id = 1000; //VOICE TODO FIX as config item - should be a MAP that can be identified based on SDP params
+
+ //unsigned int rating_group = 500; //VOICE TODO FIX as config item - should be a MAP that can be identified based on SDP params
+
char x[4];
list.head = 0;
@@ -224,8 +240,11 @@ inline int Ro_add_multiple_service_credit_Control(AAAMessage *msg, unsigned int
Ro_add_avp_list(&mscc_list, group.s, group.len, AVP_Requested_Service_Unit, AAA_AVP_FLAG_MANDATORY, 0, AVP_FREE_DATA, __FUNCTION__);
- set_4bytes(x, service_id);
+ set_4bytes(x, active_service_identifier);
Ro_add_avp_list(&mscc_list, x, 4, AVP_Service_Identifier, AAA_AVP_FLAG_MANDATORY, 0, AVP_DUPLICATE_DATA, __FUNCTION__);
+
+ set_4bytes(x, active_rating_group);
+ Ro_add_avp_list(&mscc_list, x, 4, AVP_Rating_Group, AAA_AVP_FLAG_MANDATORY, 0, AVP_DUPLICATE_DATA, __FUNCTION__);
/* if we must Used-Service-Unit */
if (used_unit >= 0) {
@@ -919,6 +938,11 @@ int Ro_Send_CCR(struct sip_msg *msg, struct dlg_cell *dlg, int dir, str* charge_
int cc_event_number = 0; //According to IOT tests this should start at 0
int cc_event_type = RO_CC_START;
int free_called_asserted_identity = 0;
+
+ sdp_session_cell_t* msg_sdp_session;
+ sdp_stream_cell_t* msg_sdp_stream;
+
+ int sdp_stream_num = 0;
ssd = shm_malloc(sizeof(struct session_setup_data)); // lookup structure used to load session info from cdp callback on CCA
if (!ssd) {
@@ -987,6 +1011,46 @@ int Ro_Send_CCR(struct sip_msg *msg, struct dlg_cell *dlg, int dir, str* charge_
if (!cc_acc_session)
goto error;
+ //by default we use voice service id and rate group
+ //then we check SDP - if we find video then we use video service id and rate group
+ LM_DBG("Setting default SID to %d and RG to %d for voice",
+ voice_service_identifier, voice_rating_group);
+ active_service_identifier = voice_service_identifier;
+ active_rating_group = voice_rating_group;
+
+ //check SDP - if there is video then set default to video, if not set it to audio
+ if (parse_sdp(msg) < 0) {
+ LM_ERR("Unable to parse req SDP\n");
+ goto error;
+ }
+
+ msg_sdp_session = get_sdp_session(msg, 0);
+ if (!msg_sdp_session ) {
+ LM_ERR("Missing SDP session information from rpl\n");
+ } else {
+ for (;;) {
+ msg_sdp_stream = get_sdp_stream(msg, 0, sdp_stream_num);
+ if (!msg_sdp_stream) {
+ //LM_ERR("Missing SDP stream information\n");
+ break;
+ }
+
+ int intportA = atoi(msg_sdp_stream->port.s);
+ if(intportA != 0 && strncasecmp(msg_sdp_stream->media.s,"video",5)==0){
+ LM_DBG("This SDP has a video component and src ports not equal to 0 - so we set default SID to %d and RG to %d for video",
+ video_service_identifier, video_rating_group);
+ active_service_identifier = video_service_identifier;
+ active_rating_group = video_rating_group;
+ break;
+ }
+
+ sdp_stream_num++;
+ }
+ }
+
+ free_sdp((sdp_info_t**) (void*) &msg->body);
+
+
if (!(ccr = Ro_new_ccr(cc_acc_session, ro_ccr_data)))
goto error;
diff --git a/modules/ims_charging/mod.c b/modules/ims_charging/mod.c
index e55482f..1a60ef9 100644
--- a/modules/ims_charging/mod.c
+++ b/modules/ims_charging/mod.c
@@ -33,6 +33,16 @@ char* ro_service_context_id_release_s = "8";
static int ro_session_hash_size = 4096;
int ro_timer_buffer = 5;
int interim_request_credits = 30;
+
+int voice_service_identifier = 1000;
+int voice_rating_group = 100;
+
+int video_service_identifier = 1001;
+int video_rating_group = 200;
+
+int active_service_identifier = 1000; //current SID to be used - will be changed depending on SDP info
+int active_rating_group = 200; //current RG to be used - will be changed depending on SDP info
+
client_ro_cfg cfg = { str_init("scscf.ims.smilecoms.com"),
str_init("ims.smilecoms.com"),
str_init("ims.smilecoms.com"),
@@ -106,6 +116,10 @@ static param_export_t params[] = {
{ "service_context_id_mnc", PARAM_STRING, &ro_service_context_id_mnc_s },
{ "service_context_id_mcc", PARAM_STRING, &ro_service_context_id_mcc_s },
{ "service_context_id_release", PARAM_STRING, &ro_service_context_id_release_s},
+ { "voice_service_identifier", INT_PARAM, &voice_service_identifier },/*service id for voice*/
+ { "voice_rating_group", INT_PARAM, &voice_rating_group },/*rating group for voice*/
+ { "video_service_identifier", INT_PARAM, &video_service_identifier },/*service id for voice*/
+ { "video_rating_group", INT_PARAM, &video_rating_group },/*rating group for voice*/
{ 0, 0, 0 }
};
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#449 - CRASH: Program terminated with signal 6, Aborted.
User who did this - Nuno Miguel Reis (nmreis)
----------
Hi Daniel.
I'll compile and let you know the outcome later.
What do you mean with "Does it happen to have the sip traffic?"? I assume you are asking me if i I've the sip trace for this. Unfortunately i don't. Sorry.
I'll let you know more when i have more.
Thanks.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=449#comment1594
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#449 - CRASH: Program terminated with signal 6, Aborted.
User who did this - Daniel-Constantin Mierla (miconda)
----------
I did three commits related to this issue. Can you try to see if they cherry pick to 4.1 and then do some testing to see if there are side effects - the commit ids are:
fcf5f5b3115c0c40f4df9eb066489bb3e590c3b1
c125cf6f36aedb75b4f1e0b32dbe5bdd0a48b8b5
6fb686de57f783b3c29e5b4e11ad1509882616bb
I am running devel on some trial server as well.
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=449#comment1593
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.
THIS IS AN AUTOMATED MESSAGE, DO NOT REPLY.
The following task has a new comment added:
FS#459 - Dispatcher Round Robin Logic not Working with Dispatcher Table with FQDNs
User who did this - Ed James (erj01)
----------
OK - if I do mi ds_list then I get a dump of the dispacther table and against the entry which fails the flags field is set to IP which I believe means inactive and probing. Could the OPTIONS ping have failed resulting in this flag value ?
Also if I just log into MySQL and do a select query on the dispatcher table then all the flags come back as zero ? Do you what sets these flags ?
Thanks
----------
More information can be found at the following URL:
http://sip-router.org/tracker/index.php?do=details&task_id=459#comment1592
You are receiving this message because you have requested it from the Flyspray bugtracking system. If you did not expect this message or don't want to receive mails in future, you can change your notification settings at the URL shown above.