From cb6df95387186fab8670d17cfd8040de1b7f641e Mon Sep 17 00:00:00 2001 From: Lucian Balaceanu Date: Fri, 12 Jan 2018 13:36:34 +0200 Subject: [PATCH] rtpengine: adding aggressive_redetection param --- src/modules/rtpengine/config.c | 3 +++ src/modules/rtpengine/config.h | 1 + src/modules/rtpengine/doc/rtpengine_admin.xml | 27 +++++++++++++++++++ src/modules/rtpengine/rtpengine.c | 5 ++++ 4 files changed, 36 insertions(+) diff --git a/src/modules/rtpengine/config.c b/src/modules/rtpengine/config.c index f2aa4efc0a8..946df8a30cd 100644 --- a/src/modules/rtpengine/config.c +++ b/src/modules/rtpengine/config.c @@ -32,6 +32,7 @@ struct cfg_group_rtpengine default_rtpengine_cfg = { 60, /* default disable timeout in seconds */ + 1, /* default aggressive_redetection enabled */ 1000, /* default wait timeout in milliseconds */ MAX_RTPP_TRIED_NODES, 5, /* rtprengine retries */ @@ -42,6 +43,8 @@ void *rtpengine_cfg = &default_rtpengine_cfg; cfg_def_t rtpengine_cfg_def[] = { {"rtpengine_disable_tout", CFG_VAR_INT | CFG_ATOMIC, 0, 0, 0, 0, "The time after which rtpengine will try to communicate to an RTP proxy after it has been marked disabled automatically. "}, + {"aggressive_redetection", CFG_VAR_INT | CFG_ATOMIC, 0, 1, 0, 0, + "Determines if the sip proxy should force a query of all nodes when all RTP proxies seem unavailable."}, {"rtpengine_tout_ms", CFG_VAR_INT | CFG_ATOMIC, 0, 0, 0, 0, "The total number of nodes inside a set to be queried before giving up establishing a session"}, {"queried_nodes_limit", CFG_VAR_INT | CFG_ATOMIC, 0, MAX_RTPP_TRIED_NODES, 0, 0, diff --git a/src/modules/rtpengine/config.h b/src/modules/rtpengine/config.h index ab383bc69b0..d6c35b71ac5 100644 --- a/src/modules/rtpengine/config.h +++ b/src/modules/rtpengine/config.h @@ -28,6 +28,7 @@ struct cfg_group_rtpengine { unsigned int rtpengine_disable_tout; + unsigned int aggressive_redetection; unsigned int rtpengine_tout_ms; unsigned int queried_nodes_limit; unsigned int rtpengine_retr; diff --git a/src/modules/rtpengine/doc/rtpengine_admin.xml b/src/modules/rtpengine/doc/rtpengine_admin.xml index 4133eb93c2e..bc31168f634 100644 --- a/src/modules/rtpengine/doc/rtpengine_admin.xml +++ b/src/modules/rtpengine/doc/rtpengine_admin.xml @@ -194,6 +194,33 @@ modparam("rtpengine", "rtpengine_sock", ... modparam("rtpengine", "rtpengine_disable_tout", 20) ... + + + +
+ <varname>aggressive_redetection</varname> (integer) + + This parameter determines what happens when all potential rtpengines are found + to be unreachable. If enabled, the sip server will send pings to all rtpengines, + else no rtpengine will pe queried until its rtpengine_disable_tout timeout passes. + + + + Default value is 1. + + + + Can be set at runtime, e.g.: + + $ &sercmd; cfg.set_now_int rtpengine aggressive_redetection 0 + + + + Set <varname>aggressive_redetection</varname> parameter + +... +modparam("rtpengine", "aggressive_redetection", 0) +...
diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c index 5b829882293..6ad0c16d7eb 100644 --- a/src/modules/rtpengine/rtpengine.c +++ b/src/modules/rtpengine/rtpengine.c @@ -336,6 +336,7 @@ static param_export_t params[] = { {"rtpengine_sock", PARAM_STRING|USE_FUNC_PARAM, (void*)rtpengine_set_store }, {"rtpengine_disable_tout",INT_PARAM, &default_rtpengine_cfg.rtpengine_disable_tout }, + {"aggressive_redetection",INT_PARAM, &default_rtpengine_cfg.aggressive_redetection }, {"rtpengine_retr", INT_PARAM, &default_rtpengine_cfg.rtpengine_retr }, {"queried_nodes_limit", INT_PARAM, &default_rtpengine_cfg.queried_nodes_limit }, {"rtpengine_tout_ms", INT_PARAM, &default_rtpengine_cfg.rtpengine_tout_ms }, @@ -2610,6 +2611,10 @@ select_rtpp_node_new(str callid, str viabranch, int do_test, struct rtpp_node ** /* No proxies? Force all to be redetected, if not yet */ if (weight_sum == 0) { + if (!cfg_get(rtpengine,rtpengine_cfg,aggressive_redetection)) { + return NULL; + } + if (was_forced) { return NULL; }