# MO-call with Osmux enable on 3GPP AoIP using A/IP with IPA/SCCPlite with a BSC-NAT between BSC and MSC msc { hscale=2; ms [label="MS"], bts [label="OsmoBTS"], bsc[label="OsmoBSC"], mgw_bsc[label="OsmoMGW(bsc)"], bscnat[label="OsmoBSCNAT"], m_sc[label="MSC"], mgw_msc[label="OsmoMGW(msc)"]; ms box m_sc [label="We assume a SDCCH is already established"]; ...; ms -> bsc [label="DTAP CM Service Request"]; bsc -> m_sc [label="Complete Layer 3 Information DTAP CM Service Request"]; bsc <- m_sc [label="Connection Confirmed"]; # Allocate MGW/MSC RTP endpoint m_sc -> mgw_msc [label="MGCP CRCX *@mgw"]; mgw_msc box mgw_msc [label="Bind to MGW-local RTP Port (3000)\nAllocate new endpoint 1"]; mgw_msc -> m_sc [label="MGCP CRCX rtpbridge/1@mgw OK (MGW:3000)"]; bscnat <- m_sc [label="BSSAP ASSGN REQ (CIC:1)"]; # NAT: MGW/MSC Osmux endpoint #bscnat -> bscnat [label="MGCP CRCX *@mgw, X-Osmux: *"]; mgw_msc box mgw_msc [label="Bind to MGW-local Osmux Port (1984)\nAllocate new endpoint 2, MGW's local CID 5"]; #mgw_msc -> m_sc [label="MGCP CRCX rtpbridge/1@mgw OK (MGW:1984, X-Osmux: 5)"]; bsc <- bscnat [label="BSSAP ASSGN REQ (CIC:2)"]; bts <- bsc [label="RSL CHAN ACT"]; bts -> bsc [label="RSL CHAN ACT ACK"]; ms <- bsc [label="Assignment Command"]; ms -> bsc [label="Assignment Complete"]; ...; # connect BTS RTP with BSC-MGW RTP, CIC is used as MGW endpoint bts <- bsc [label="IPA CRCX"]; bts box bts [label="Bind to BTS-local RTP Port (1000)"]; bts -> bsc [label="IPA CRCX ACK (BTS:1000)"]; bsc -> mgw_bsc [label="MGCP CRCX 1@mgw (BTS:1000)"]; mgw_bsc box mgw_bsc [label="Bind to MGW-local RTP Port (2000)\nConnect to BTS:1000"]; bsc <- mgw_bsc [label="MGCP CRCX 1@mgw OK (MGW:2000)"]; bts <- bsc [label="IPA MDCX (MGW:2000)"]; bts box bts [label="Connect RTP socket to remote (MGW) RTP Port"]; bts -> bsc [label="IPA MDCX ACK"]; #bsc -> mgw_bsc [label="MGCP MDCX 1@mgw (optional)"]; #bsc <- mgw_bsc [label="MGCP MDCX 1@mgw OK (optional)"]; ...; bsc -> bscnat [label="BSSMAP ASSGN Complete"]; bscnat -> m_sc [label="BSSMAP ASSGN Complete"]; ...; # MSC configures BSC-MGW MSC-side of the endpoint through MGCP UDP forwarding bscnat <- m_sc [label="MGCP CRCX 1@mgw (MSC:3000)"]; bscnat box bscnat [label="Allocate new endpoint 2\nAllocate new MGW's local CID 5\nBind to local Osmux Port (1984)\nBind to local RTP port 4000"]; mgw_bsc <- bscnat [label="MGCP CRCX 2@mgw (MSC:1984, X-Osmux: 5)"]; mgw_bsc -> bscnat [label="MGCP CRCX 2@mgw OK (MGW:1985, X-Osmux: 7)"]; bscnat -> m_sc [label="MGCP CRCX 1@mgw OK (MGW:4000)"]; bscnat <- m_sc [label="MGCP MDCX 1@mgw (recvonly) "]; mgw_bsc <- bscnat [label="MGCP MDCX 2@mgw (recvonly) "]; mgw_bsc box mgw_bsc [label="Connect Osmux socket to remote (MSC) Osmux Port"]; mgw_bsc -> bscnat [label="MGCP MDCX 2@mgw OK"]; bscnat -> m_sc [label="MGCP MDCX 1@mgw OK"]; bscnat <= mgw_msc [label="RTP Audio BSCNAT:4000 MGW:3000"]; mgw_bsc <= bscnat [label="Osmux Audio MGW:1985 BSCNAT:1984, CID(downlink):7"]; bts <= mgw_bsc [label="RTP Audio BTS:1000 MGW:2000"]; ms <= bts [label="Um Audio (unidirectional)"]; ms <- m_sc [label="DTAP CC ALERTING"]; ...; bscnat <- m_sc [label="MGCP MDCX 1@mgw (sndrecv) "]; mgw_bsc <- bscnat [label="MGCP MDCX 2@mgw (sndrecv) "]; mgw_bsc box mgw_bsc [label="Switch to bi-directional audio"]; mgw_bsc -> bscnat [label="MGCP MDCX 2@mgw OK"]; bscnat -> m_sc [label="MGCP MDCX 1@mgw OK"]; bscnat <=> mgw_msc [label="RTP Audio BSCNAT:4000 MGW:3000"]; mgw_bsc <=> bscnat [label="Osmux Audio MGW:1985 MSC:1984, CID(uplink):5, CID(downlink):7"]; bts <=> mgw_bsc [label="RTP Audio BTS:1000 MGW:2000"]; ms <=> bts [label="Um Audio (bidirectional)"]; }