osmux: Use local/remote CID terminology
This terminology is much more common and used in other protocols, like PFCP. Related: SYS#5987 Change-Id: Ia5eb833c296c504555f273a7fc3af5d746af19c0
This commit is contained in:
parent
35b5e27b02
commit
1ab6dbc62a
|
@ -19,11 +19,11 @@ their respective response messages.
|
|||
|
||||
In request messages, the value part of `X-Osmux` specifies the CID to be used by
|
||||
OsmoMGW to _send_ Osmux frames to the remote peer for that connection, also
|
||||
known as _sendCID_.
|
||||
known as the MGW's _remote CID_ or the peer's _local CID_.
|
||||
|
||||
In response messages, the value part of `X-Osmux` specifies the CID where
|
||||
OsmoMGW expect to _receive_ Osmux frames from the remote peer for that
|
||||
connection, also known as _recvCID_.
|
||||
connection, also known as the MGW's _local CID_ or the peer's _remote CID_.
|
||||
|
||||
.Example: `X-Osmux` format with a known CID 3.
|
||||
----
|
||||
|
@ -39,12 +39,12 @@ X-Osmux: *
|
|||
|
||||
If the MGCP client is willing to use Osmux for a given connection, it shall
|
||||
specify so during `CRCX` time, and not later. If at `CRCX` time the MGCP client
|
||||
doesn't yet know the _sendCID_, it can use an astersik (*) and provide
|
||||
_sendCID_ later within `MDCX` messages.
|
||||
doesn't yet know the MGW's _remote CID_, it can use an astersik (*) and provide
|
||||
_remote CID_ later within `MDCX` messages.
|
||||
|
||||
All subsequent `MDCX` messages sent towards an Osmux connection must contain the
|
||||
original _sendCID_ sent during `CRCX`. The same way, all `MDCX` response shall
|
||||
contain the _recvCID_ sent during `CRCX`.
|
||||
original MGW's _remote CID_ sent during `CRCX`. The same way, all `MDCX` response shall
|
||||
contain the _local CID_ sent during `CRCX`.
|
||||
|
||||
The other required connection address parameters, such as IP address, port, and
|
||||
codecs, are negotiated through MGCP and SDP as usual, but in this case the IP
|
||||
|
@ -72,7 +72,7 @@ a=rtpmap:112 AMR/8000/1
|
|||
a=ptime:20
|
||||
----
|
||||
|
||||
.Example: response to `CRCX` containing the <<recvCID>>
|
||||
.Example: response to `CRCX` containing the MGW's _local CID_
|
||||
----
|
||||
200 189 OK
|
||||
I: 07E41584
|
||||
|
|
|
@ -14,7 +14,7 @@ msc {
|
|||
|
||||
# Allocate MGW/MSC Osmux endpoint
|
||||
m_sc -> mgw_msc [label="MGCP CRCX rtpbridge/*@mgw, X-Osmux: *"];
|
||||
mgw_msc box mgw_msc [label="Bind to MGW-local Osmux Port (1984)\nAllocate new endpoint 1, recvCID 5"];
|
||||
mgw_msc box mgw_msc [label="Bind to MGW-local Osmux Port (1984)\nAllocate new endpoint 1, MGW's local CID 5"];
|
||||
mgw_msc -> m_sc [label="MGCP CRCX rtpbridge/1@mgw OK (MGW:1984, X-Osmux: 5)"];
|
||||
|
||||
bsc <- m_sc [label="BSSAP ASSGN REQ (3GPP AoIP, extension IE: Osmux CID 5)"];
|
||||
|
@ -37,7 +37,7 @@ msc {
|
|||
...;
|
||||
|
||||
mgw_bsc <- bsc [label="MGCP CRCX rtpbridge/2@mgw (MSC:1984, X-Osmux: 5)"];
|
||||
mgw_bsc box mgw_bsc [label="Bind to MGW-local Osmux Port (1985)\nConnect to MSC:1984\nAllocate new recvCID 7"];
|
||||
mgw_bsc box mgw_bsc [label="Bind to MGW-local Osmux Port (1985)\nConnect to MSC:1984\nAllocate new MGW's local CID 7"];
|
||||
mgw_bsc -> bsc [label="MGCP CRCX rtpbridge/2@mgw OK (MGW:1985, X-Osmux: 7)"];
|
||||
...;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ msc {
|
|||
|
||||
# Allocate MGW/MSC Osmux endpoint
|
||||
m_sc -> mgw_msc [label="MGCP CRCX *@mgw, X-Osmux: *"];
|
||||
mgw_msc box mgw_msc [label="Bind to MGW-local Osmux Port (1984)\nAllocate new endpoint 1, recvCID 5"];
|
||||
mgw_msc box mgw_msc [label="Bind to MGW-local Osmux Port (1984)\nAllocate new endpoint 1, MGW's local CID 5"];
|
||||
mgw_msc -> m_sc [label="MGCP CRCX rtpbridge/1@mgw OK (MGW:1984, X-Osmux: 5)"];
|
||||
|
||||
bsc <- m_sc [label="BSSAP ASSGN REQ (CIC:1)"];
|
||||
|
@ -39,7 +39,7 @@ msc {
|
|||
|
||||
# MSC configures BSC-MGW MSC-side of the endpoint through MGCP UDP forwarding
|
||||
mgw_bsc <- m_sc [label="MGCP CRCX 1@mgw (MSC:1984, X-Osmux: 5)"];
|
||||
mgw_bsc box mgw_bsc [label="Bind to BTS-local Osmux Port (1985)\nAllocate new recvCID 7"];
|
||||
mgw_bsc box mgw_bsc [label="Bind to BTS-local Osmux Port (1985)\nAllocate new MGW's local CID 7"];
|
||||
mgw_bsc -> m_sc [label="MGCP CRCX 1@mgw OK (MGW:1985, X-Osmux: 7)"];
|
||||
mgw_bsc <- m_sc [label="MGCP MDCX 1@mgw (recvonly) "];
|
||||
mgw_bsc box mgw_bsc [label="Connect Osmux socket to remote (MSC) Osmux Port"];
|
||||
|
|
|
@ -18,7 +18,7 @@ msc {
|
|||
|
||||
# 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, recvCID 5"];
|
||||
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)"];
|
||||
|
||||
|
@ -48,7 +48,7 @@ msc {
|
|||
|
||||
# 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 recvCID 5\nBind to local Osmux Port (1984)\nBind to local RTP port 4000"];
|
||||
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)"];
|
||||
|
|
|
@ -50,13 +50,13 @@ connections alive.
|
|||
|
||||
=== CID allocation
|
||||
|
||||
Each peer (BSC/MGW and MSC/MGW) allocates its own _recvCID_, and receives from
|
||||
the peer through the used GSM protocol the peer's _recvCID_, which becomes
|
||||
the local _sendCID_ for that connection.
|
||||
Each peer (BSC/MGW and MSC/MGW) allocates its own _local CID_, and receives from
|
||||
its peer a _remote CID_ (aka the peer's _local CID_) through the used GSM
|
||||
protocol. This _remote CID_ is then used to send Osmux frames to that peer.
|
||||
|
||||
----
|
||||
BSC/MGW(recvCID=Y,sendCID=?)<-X--MSC/MGW(recvCID=X,sendCID=?)
|
||||
BSC/MGW(recvCID=Y,sendCID=X)--Y->MSC/MGW(recvCID=X,sendCID=Y)
|
||||
BSC/MGW(localCID=Y,remoteCID=?)<-X--MSC/MGW(localCID=X,remoteCID=?)
|
||||
BSC/MGW(localCID=Y,remoteCID=X)--Y->MSC/MGW(localCID=X,remoteCID=Y)
|
||||
----
|
||||
|
||||
This way each peer is responsible for allocating and managing their own local
|
||||
|
@ -75,13 +75,13 @@ localPort>` tuple, allowing for 256 Osmux CIDs per BSC and hence call legs per
|
|||
BSC. Each of the peers could actually have more than one Osmux socket towards
|
||||
the other peer, by using a pool of ports or IP addresses, so there's really not
|
||||
limit if required as long as there's a way to infer the initially negotiated
|
||||
`<srcIP, srcPort, dstIP, dstPort, sendCID>` tuple from the received audio
|
||||
`<srcIP, srcPort, dstIP, dstPort, remoteCID>` tuple from the received audio
|
||||
packets.
|
||||
|
||||
However, due to some constrains from in between NATs explained in section above,
|
||||
BSC/MGW IP address and port are not a priory known, and could change between
|
||||
different connections coming from it. As a result, it is difficult to infer the
|
||||
entire tuple, so for now MGW needs to allocate its Osmux _recvCID_ in a clever
|
||||
entire tuple, so for now MGW needs to allocate its Osmux _local CID_ in a clever
|
||||
way, in order to be able to identify the full tuple from it.
|
||||
|
||||
Hence, currently OsmoMGW CID allocation implementation shares CID between all
|
||||
|
|
Loading…
Reference in New Issue