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
|
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
|
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
|
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
|
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.
|
.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
|
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
|
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
|
doesn't yet know the MGW's _remote CID_, it can use an astersik (*) and provide
|
||||||
_sendCID_ later within `MDCX` messages.
|
_remote CID_ later within `MDCX` messages.
|
||||||
|
|
||||||
All subsequent `MDCX` messages sent towards an Osmux connection must contain the
|
All subsequent `MDCX` messages sent towards an Osmux connection must contain the
|
||||||
original _sendCID_ sent during `CRCX`. The same way, all `MDCX` response shall
|
original MGW's _remote CID_ sent during `CRCX`. The same way, all `MDCX` response shall
|
||||||
contain the _recvCID_ sent during `CRCX`.
|
contain the _local CID_ sent during `CRCX`.
|
||||||
|
|
||||||
The other required connection address parameters, such as IP address, port, and
|
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
|
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
|
a=ptime:20
|
||||||
----
|
----
|
||||||
|
|
||||||
.Example: response to `CRCX` containing the <<recvCID>>
|
.Example: response to `CRCX` containing the MGW's _local CID_
|
||||||
----
|
----
|
||||||
200 189 OK
|
200 189 OK
|
||||||
I: 07E41584
|
I: 07E41584
|
||||||
|
|
|
@ -14,7 +14,7 @@ msc {
|
||||||
|
|
||||||
# Allocate MGW/MSC Osmux endpoint
|
# Allocate MGW/MSC Osmux endpoint
|
||||||
m_sc -> mgw_msc [label="MGCP CRCX rtpbridge/*@mgw, X-Osmux: *"];
|
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)"];
|
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)"];
|
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 <- 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)"];
|
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
|
# Allocate MGW/MSC Osmux endpoint
|
||||||
m_sc -> mgw_msc [label="MGCP CRCX *@mgw, X-Osmux: *"];
|
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)"];
|
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)"];
|
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
|
# 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 <- 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 CRCX 1@mgw OK (MGW:1985, X-Osmux: 7)"];
|
||||||
mgw_bsc <- m_sc [label="MGCP MDCX 1@mgw (recvonly) "];
|
mgw_bsc <- m_sc [label="MGCP MDCX 1@mgw (recvonly) "];
|
||||||
mgw_bsc box mgw_bsc [label="Connect Osmux socket to remote (MSC) Osmux Port"];
|
mgw_bsc box mgw_bsc [label="Connect Osmux socket to remote (MSC) Osmux Port"];
|
||||||
|
|
|
@ -18,7 +18,7 @@ msc {
|
||||||
|
|
||||||
# NAT: MGW/MSC Osmux endpoint
|
# NAT: MGW/MSC Osmux endpoint
|
||||||
#bscnat -> bscnat [label="MGCP CRCX *@mgw, X-Osmux: *"];
|
#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)"];
|
#mgw_msc -> m_sc [label="MGCP CRCX rtpbridge/1@mgw OK (MGW:1984, X-Osmux: 5)"];
|
||||||
bsc <- bscnat [label="BSSAP ASSGN REQ (CIC:2)"];
|
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
|
# MSC configures BSC-MGW MSC-side of the endpoint through MGCP UDP forwarding
|
||||||
bscnat <- m_sc [label="MGCP CRCX 1@mgw (MSC:3000)"];
|
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 (MSC:1984, X-Osmux: 5)"];
|
||||||
mgw_bsc -> bscnat [label="MGCP CRCX 2@mgw OK (MGW:1985, X-Osmux: 7)"];
|
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 CRCX 1@mgw OK (MGW:4000)"];
|
||||||
|
|
|
@ -50,13 +50,13 @@ connections alive.
|
||||||
|
|
||||||
=== CID allocation
|
=== CID allocation
|
||||||
|
|
||||||
Each peer (BSC/MGW and MSC/MGW) allocates its own _recvCID_, and receives from
|
Each peer (BSC/MGW and MSC/MGW) allocates its own _local CID_, and receives from
|
||||||
the peer through the used GSM protocol the peer's _recvCID_, which becomes
|
its peer a _remote CID_ (aka the peer's _local CID_) through the used GSM
|
||||||
the local _sendCID_ for that connection.
|
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(localCID=Y,remoteCID=?)<-X--MSC/MGW(localCID=X,remoteCID=?)
|
||||||
BSC/MGW(recvCID=Y,sendCID=X)--Y->MSC/MGW(recvCID=X,sendCID=Y)
|
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
|
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
|
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
|
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
|
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.
|
packets.
|
||||||
|
|
||||||
However, due to some constrains from in between NATs explained in section above,
|
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
|
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
|
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.
|
way, in order to be able to identify the full tuple from it.
|
||||||
|
|
||||||
Hence, currently OsmoMGW CID allocation implementation shares CID between all
|
Hence, currently OsmoMGW CID allocation implementation shares CID between all
|
||||||
|
|
Loading…
Reference in New Issue