Neels Hofmeyr | c4628a3 | 2018-12-07 14:47:34 +0100 | [diff] [blame] | 1 | msc { |
| 2 | hscale=2; |
| 3 | bsca [label="BSC-A"], ai[label="MSC-I (at MSC-A)"], a[label="MSC-A"], bt[label="MSC-T (at MSC-B)"], bi[label="MSC-I (at MSC-B)"], bscb[label="BSC-B"], |
| 4 | ct[label="MSC-T (at MSC-C)"], bscc[label="BSC-C"]; |
| 5 | |
| 6 | ai note bt [label="'MSC-A,I,T' are explained in 3GPP TS 49.008 '4.3 Roles of MSC-A, MSC-I and MSC-T'"]; |
| 7 | ai note ai [label="I = Internal; the MSC that does BSSMAP to the BSC (may change to a remote MSC-B after HO)"]; |
| 8 | a note a [label="A = first; the MSC that has MM control (never changes)"]; |
| 9 | bt note bi [label="B = second; the MSC that acts as BSS relay for MSC-A"]; |
| 10 | bt note bt [label="T = transitory; the MSC that a handover is going towards (may be MSC-A for inter-BSC HO, may be a remote MSC-B)"]; |
| 11 | |
| 12 | bsca => ai [label="BSSMAP Handover Required"]; |
| 13 | ai -> a [label="BSSMAP Handover Required"]; |
| 14 | |
| 15 | a rbox a [label="MSC-A routes all MSC-T messages to remote MSC-B."]; |
| 16 | |
| 17 | a => bt [label="MAP Prepare Handover"]; |
| 18 | a note bt [label="in Osmocom, MAP messages are actually sent as GSUP, to the HLR"]; |
| 19 | |
| 20 | bt rbox bt [label="MSC-B routes all MSC-A type messages back to MSC-A."]; |
| 21 | bt rbox bt [label="MSC-B generates a Handover MSISDN"]; |
| 22 | |
| 23 | bt => bscb [label="BSSMAP Handover Request"]; |
| 24 | bt <= bscb [label="BSSMAP Handover Request ACK"]; |
| 25 | a <= bt [label="MAP Prepare Handover Response"]; |
| 26 | |
| 27 | a => bt [label="establish SIP call to Handover MSISDN via external MNCC"]; |
| 28 | |
| 29 | ai <- a [label="BSSMAP Handover Command"]; |
| 30 | bsca <= ai [label="BSSMAP Handover Command"]; |
| 31 | |
| 32 | --- [label="MS sends RACH to new cell"]; |
| 33 | |
| 34 | bt <= bscb [label="BSSMAP Handover Detected"]; |
| 35 | a <= bt [label="MAP Access Signaling Request"]; |
| 36 | |
| 37 | bt <= bscb [label="BSSMAP Handover Complete"]; |
| 38 | a <= bt [label="MAP Send End Signal"]; |
| 39 | bt rbox bt [label="MSC-B drops the generated Handover MSISDN"]; |
| 40 | |
| 41 | a abox a [label="MSC-A accepts the new MSC-B and BSC"]; |
| 42 | ai note bt [label="previous MSC-I (A) gets dropped, MSC-T (B) becomes the new MSC-I"]; |
| 43 | ai rbox a [label="MSC-A performs all MSC-I tasks via MAP at remote MSC-B's MSC-I."]; |
| 44 | bt abox bi [label="MSC-I"]; |
| 45 | ai abox ai [label="discard"]; |
| 46 | bsca <= ai [label="BSSMAP Clear Command"]; |
| 47 | |
| 48 | ...; |
| 49 | ...; |
| 50 | |
| 51 | --- [label="Another inter-MSC handover"]; |
| 52 | a note bi [label="MSC-A remains in charge"]; |
| 53 | |
| 54 | bscb => bi [label="BSSMAP Handover Required"]; |
| 55 | bi => a [label="BSSMAP Handover Required"]; |
| 56 | |
| 57 | a rbox a [label="MSC-A routes all MSC-T messages to remote MSC-C."]; |
| 58 | |
| 59 | a => ct [label="MAP Prepare Handover"]; |
| 60 | ct rbox ct [label="MSC-C routes all MSC-A type messages back to MSC-A."]; |
| 61 | ct => bscc [label="BSSMAP Handover Request"]; |
| 62 | ct <= bscc [label="BSSMAP Handover Request ACK"]; |
| 63 | a <= ct [label="MAP Prepare Handover Response"]; |
| 64 | a => bi [label="MAP Prepare Handover Response"]; |
| 65 | bscb <= bi [label="BSSMAP Handover Command"]; |
| 66 | |
| 67 | --- [label="MS sends RACH to new cell"]; |
| 68 | |
| 69 | ct <= bscc [label="BSSMAP Handover Detected"]; |
| 70 | a <= ct [label="MAP Access Signaling Request"]; |
| 71 | |
| 72 | ct <= bscc [label="BSSMAP Handover Complete"]; |
| 73 | a <= ct [label="MAP Send End Signal"]; |
| 74 | |
| 75 | a abox a [label="MSC-A accepts the new MSC-C and BSC"]; |
| 76 | bi note ct [label="previous MSC-I (B) gets dropped, MSC-T (B) becomes the new MSC-I"]; |
| 77 | ai rbox a [label="MSC-A performs all MSC-I tasks via MAP at remote MSC-C's MSC-I."]; |
| 78 | ct abox ct [label="MSC-I"]; |
| 79 | bi abox bi [label="discard"]; |
| 80 | bscb <= bi [label="BSSMAP Clear Command"]; |
| 81 | |
| 82 | } |