summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2013-12-03 15:13:12 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2013-12-10 11:17:42 +0100
commite2292f3aa1e9ae1faf5521a9cb108775f1ac0540 (patch)
tree6615dc935b96ac4d57e792c8e4353cc75d7bf4d8
parent3da9e4e441ff7b6fb1996f775b39d7c3432ad652 (diff)
mgcp/rtp: Only patch SSRC once after MDCX if enabled
Currently the output SSRC is always forced to be the same if SSRC patching is enabled. This patch modifies this to optionally restrict the number of SSRC changes that will be corrected. Note that the configuration only allows for the 'once' mode and 'off'. Sponsored-by: On-Waves ehf
-rw-r--r--openbsc/include/openbsc/mgcp_internal.h2
-rw-r--r--openbsc/src/libmgcp/mgcp_network.c2
-rw-r--r--openbsc/src/libmgcp/mgcp_protocol.c4
3 files changed, 6 insertions, 2 deletions
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h
index b16bd49a4..255161f45 100644
--- a/openbsc/include/openbsc/mgcp_internal.h
+++ b/openbsc/include/openbsc/mgcp_internal.h
@@ -85,7 +85,7 @@ struct mgcp_rtp_end {
char *fmtp_extra;
/* RTP patching */
- int force_constant_ssrc;
+ int force_constant_ssrc; /* -1: always, 0: don't, 1: once */
int force_constant_timing;
/*
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c
index abb48f5fa..79c9e1aba 100644
--- a/openbsc/src/libmgcp/mgcp_network.c
+++ b/openbsc/src/libmgcp/mgcp_network.c
@@ -280,6 +280,8 @@ void mgcp_patch_and_count(struct mgcp_endpoint *endp, struct mgcp_rtp_state *sta
timestamp;
state->patch = 1;
ssrc = state->orig_ssrc;
+ if (rtp_end->force_constant_ssrc != -1)
+ rtp_end->force_constant_ssrc -= 1;
LOGP(DMGCP, LOGL_NOTICE,
"SSRC patching enabled on 0x%x SSRC: %u "
diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c
index c703bec13..b8e1ecde4 100644
--- a/openbsc/src/libmgcp/mgcp_protocol.c
+++ b/openbsc/src/libmgcp/mgcp_protocol.c
@@ -619,8 +619,10 @@ void mgcp_rtp_end_config(struct mgcp_endpoint *endp, int expect_ssrc_change,
{
struct mgcp_trunk_config *tcfg = endp->tcfg;
+ int patch_ssrc = expect_ssrc_change && tcfg->force_constant_ssrc;
+
rtp->force_constant_timing = tcfg->force_constant_timing;
- rtp->force_constant_ssrc = tcfg->force_constant_ssrc;
+ rtp->force_constant_ssrc = patch_ssrc ? 1 : 0;
LOGP(DMGCP, LOGL_DEBUG,
"Configuring RTP endpoint: local port %d%s%s\n",