From 575420637981828b64c1292ada015d7170b89390 Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Wed, 29 Jun 2016 16:24:42 +0200 Subject: osmux: Add negotiation state so race conditions can't disable osmux Without this commit it is possible that osmux is disabled again on links with high jitter. This happens when an MGCP response without X-Osmux header is received before the NAT receives an Osmux dummy frame from the other side. Ticket: SYS#2628, SYS#2627 Sponsored-by: On-Waves ehf Change-Id: Id624b0279aee5e2412059a10296ce7896e2d4628 --- openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'openbsc/src/osmo-bsc_nat') diff --git a/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c b/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c index 9fd99677a..48847865c 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c +++ b/openbsc/src/osmo-bsc_nat/bsc_mgcp_utils.c @@ -590,7 +590,7 @@ static int bsc_mgcp_policy_cb(struct mgcp_trunk_config *tcfg, int endpoint, int */ if (mgcp_endp->osmux.allocated_cid >= 0 && mgcp_endp->osmux.state != OSMUX_STATE_ENABLED) { - mgcp_endp->osmux.state = OSMUX_STATE_ACTIVATING; + mgcp_endp->osmux.state = OSMUX_STATE_NEGOTIATING; mgcp_endp->osmux.cid = mgcp_endp->osmux.allocated_cid; } @@ -680,6 +680,7 @@ static void bsc_mgcp_osmux_confirm(struct mgcp_endpoint *endp, const char *str) LOGP(DMGCP, LOGL_NOTICE, "bsc accepted to use Osmux (cid=%u)\n", osmux_cid); + endp->osmux.state = OSMUX_STATE_ACTIVATING; return; err: osmux_release_cid(endp); @@ -747,7 +748,7 @@ void bsc_mgcp_forward(struct bsc_connection *bsc, struct msgb *msg) return; } - if (endp->osmux.state == OSMUX_STATE_ACTIVATING) + if (endp->osmux.state == OSMUX_STATE_NEGOTIATING) bsc_mgcp_osmux_confirm(endp, (const char *) msg->l2h); /* If we require osmux and it is disabled.. fail */ -- cgit v1.2.3