Files
osmo-hnodeb/doc/hnodeb.msc
Pau Espin Pedrol 7550ba3d05 Update AUDIO and GTP SAPs to support multiple conns per UE
This is needed for instance:
* AUDIO: video calls
* GTP: secondary pdp contexts

For better abstraction, now both AUDIO and GTP conns use unique ID
namespaces, and one ID is used to identify each one. Each conn relate in
turn to a UE since a context_id is passed during connection
establishment.

Related: SYS#5516
Change-Id: Ib3f60d5ba21defe5259c25e2034fc2217c4d93df
2021-12-16 13:01:12 +01:00

87 lines
3.4 KiB
Plaintext

msc {
hscale="3";
ue [label="Customer"], trx [label="Lower Layer TRX"], hnodeb [label="osmo-hnodeb"], hnbgw [label="HNBGW"], ggsn [label="GGSN"], mgw [label="MGW"];
|||;
--- [ label = "hNodeB starts up" ];
hnodeb => hnbgw [label="HNBAP HnbRegisterRequest"];
hnodeb <= hnbgw [label="HNBAP HnbRegisterResponse"];
|||;
...;
|||;
|||;
--- [ label = "TRX starts up & connects to hNodeB" ];
trx => hnodeb [label="CTL-HELLO.req(SAPI=CTL, VERSION)"];
trx <= hnodeb [label="CTL-HELLO.cnf(SAPI=CTL, VERSION)"];
trx => hnodeb [label="CTL-HELLO.req(SAPI=IUH, VERSION)"];
trx <= hnodeb [label="CTL-HELLO.cnf(SAPI=IUH, VERSION)"];
trx => hnodeb [label="CTL-HELLO.req(SAPI=GTP, VERSION)"];
trx <= hnodeb [label="CTL-HELLO.cnf(SAPI=GTP, VERSION)"];
trx => hnodeb [label="CTL-HELLO.req(SAPI=AUDIO, VERSION)"];
trx <= hnodeb [label="CTL-HELLO.cnf(SAPI=AUDIO, VERSION)"];
trx <= hnodeb [label="IUH-CONFIGURE.ind(PLMN,LAC,SAC,RAC,CI,RNC_ID from HnbRegisterResponse)"];
|||;
...;
|||;
|||;
--- [ label = "Subscriber Paging" ];
hnodeb <= hnbgw [label="RUA-InitiatingMessage(RANAP Paging)"];
trx <= hnodeb [label="IUH-UNITDATA.ind[RANAP Paging]"];
|||;
...;
|||;
|||;
--- [ label = "Subscriber Sign Up" ];
ue => trx [label="CM Service Req"];
trx => hnodeb [label="IUH-CONN_ESTABLISH.req[RANAP CM ServiceReq]"];
hnodeb => hnbgw [label="HNBAP UE Register Req(IMSI?)"];
hnodeb <= hnbgw [label="HNBAP UE Register Acc(context_id)"];
hnodeb => hnbgw [label="RUA-Connect(RANAP-GMM ServiceRequest)"];
hnodeb <= hnbgw [label="RUA-DirectTransfer(RANAP GMM ServiceAccept)"];
trx <= hnodeb [label="IUH-CONN_ESTABLISH.cnf(context_id])"];
trx <= hnodeb [label="IUH-CONN_DATA.ind[context_id, RANAP GMM ServiceAccept]"];
--- [ label = "Subscriber set up PS data:" ];
hnodeb <= hnbgw [label="RANAP RAB-Assignment Request(TEI, ADDR)"];
trx <= hnodeb [label="IUH-CONN_DATA.ind[RANAP RAB-Assignment Request(remote_ip, remote_port, remote_tei)]"];
trx => hnodeb [label="GTP-CONN_ESTABLISH.req(context_id,remote_ip,remote_port,remote_tei)"];
... [ label = "HnodeB sets up GTP-U connection" ];
trx <= hnodeb [label="GTP-CONN_ESTABLISH.cnf(context_id,gtp_conn_id,local_ip,local_port,local_tei)"];
|||;
...;
|||;
|||;
--- [ label = "PS data transmission over GTP-U:" ];
ue => trx [label="..."];
trx => hnodeb [label="GTP-CONN_DATA.req[gtp_conn_id,payload]"];
hnodeb => ggsn [label="GTP-U(remote_tei, local_addr, remote_addr, payload)"];
hnodeb <= ggsn [label="GTP-U(local_tei, remote_addr, local_addr, payload)"];
trx <= hnodeb [label="GTP-CONN_DATA.ind[gtp_conn_id,payload]"];
ue <= trx [label="..."];
|||;
...;
|||;
--- [ label = "MO/MT PS data Release:" ];
ue => trx [label="..."];
trx => hnodeb [label="IUH-CONN_DATA.req[RANAP IU Release Request]"];
hnodeb => hnbgw [label="RANAP IU Release Request"];
hnodeb <= hnbgw [label="RANAP IU Release Command"];
trx <= hnodeb [label="IUH-CONN_DATA.ind[RANAP IU Release Command]"];
...;
trx => hnodeb [label="GTP-CONN_RELEASE.req(gtp_conn_id)"];
trx => hnodeb [label="IUH-CONN_RELEASE.req[RANAP IU Release Complete]"];
hnodeb => hnbgw [label="RUA-Disconnect(RANAP IU Release Complete)"];
|||;
...;
|||;
--- [ label = "For voice call (CS): Similar to SAPI_GTP, but using SAPI_AUDIO and osmo-hnodeb sets up RTP stream" ];
|||;
...;
|||;
--- [ label = "Iuh SCTP link goes down" ];
trx <= hnodeb [label="UD socket is closed, osmo-hnodeb cleans up state and attempts reconnect. lowerlayer can re-connect and wait for next CONFIGURE.req"];
}