blob: 9a8c3607515e35ca6ba9a0158eba8ee02256f1e0 [file] [log] [blame]
Neels Hofmeyr44fcc9f2018-05-28 14:29:49 +02001msc {
2 hscale=2;
3 bts [label="MS/BTS"], bsc[label="BSC"], bsc_ts[label="BSC timeslot FSM"], bsc_lchan[label="BSC lchan FSM"];
4
5 bsc_ts abox bsc_ts [label="NOT_INITIALIZED (no timeout)"];
6
7 ...;
8 bsc note bsc_ts [label="OML and RSL may be established in any order"];
9 bts => bsc_ts [label="OML: Channel OPSTART ACK"];
10 bsc -> bsc_ts [label="RSL bootstrapped"];
11 bsc_ts abox bsc_ts [label="UNUSED (no timeout)"];
12
13 |||;
14 bts rbox bsc_lchan [label="UNUSED, onenter"];
15 bsc_ts abox bsc_ts [label="UNUSED"];
16 --- [label="GPRS enabled?"];
17 --- [label="IF: dedicated PDCH?"];
18 bsc_ts abox bsc_ts [label="PDCH (no timeout)"];
19
20 |||;
21 --- [label="IF: dynamic timeslot"];
22 bsc_ts abox bsc_ts [label="WAIT_PDCH_ACT (?s, Tnnnn)"];
23 bts <= bsc_ts [label="RSL Chan Activ of PDCH",ID="Osmocom style"];
24 bts <= bsc_ts [label="RSL PDCH Act",ID="ip.access style"];
25 ...;
26 --- [label="timeout:"];
27 bsc_ts abox bsc_ts [label="BORKEN"];
28 ---;
29 ...;
30 bts => bsc_ts [label="RSL RF Chan Activ ACK",ID="Osmocom style"];
31 bts => bsc_ts [label="RSL PDCH Act ACK",ID="ip.access style"];
32 bsc_ts abox bsc_ts [label="PDCH (no timeout)"];
33
34 --- [label="END: GPRS enabled?"];
35 ...;
36 ...;
37
38 bts rbox bsc_lchan [label="UNUSED, on event"];
39 bsc_ts abox bsc_ts [label="UNUSED"];
40 bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED (data=lchan)"];
41 bsc_ts abox bsc_ts [label="IN_USE"];
42 bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_READY"];
43 bts <= bsc_lchan [label="RSL Chan Activ (and so on)"];
44 ...;
45 bts rbox bsc_lchan [label="IN_USE, second lchan"];
46 bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED (data=lchan)"];
47 bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_READY"];
48 bts <= bsc_lchan [label="RSL Chan Activ (and so on)"];
49 ...;
50 ...;
51 bts rbox bsc_lchan [label="IN_USE, when lchan FSM releases (both regularly, or due to error)"];
52 bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_UNUSED (data=lchan)"];
53 --- [label="IF all lchan->fi->state == LCHAN_ST_UNUSED"];
54 bsc_ts abox bsc_ts [label="UNUSED"];
55 ---;
56 ...;
57 ...;
58
59
60 bts rbox bsc_lchan [label="PDCH on lchan request"];
61 bsc_ts note bsc_lchan [label="TS_EV_LCHAN_REQUESTED should only come in on
62 lchans where it makes sense, both from TS kind as well as not
63 conflicting with other users of the lchan."];
64
65 bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED"];
66 bsc_ts abox bsc_ts [label="WAIT_PDCH_DEACT (?s, Tnnnn)"];
67 bts <= bsc_ts [label="RSL RF Chan Release of PDCH",ID="Osmocom style"];
68 bts <= bsc_ts [label="RSL PDCH Deact",ID="ip.access style"];
69 ...;
70 --- [label="timeout:"];
71 bsc_ts abox bsc_ts [label="BORKEN"];
72 bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_ERROR"];
73 ---;
74 ...;
75 bts => bsc_ts [label="RSL RF Chan Release ACK",ID="Osmocom style"];
76 bts => bsc_ts [label="RSL PDCH Deact ACK",ID="ip.access style"];
77 --- [label="IF all lchan->fi->state == LCHAN_ST_UNUSED"];
78 bsc_ts note bsc_lchan [label="If the lchan FSM decided to give up in the
79 meantime, nr of active lchans might have dropped back to zero."];
80 bsc_ts abox bsc_ts [label="UNUSED"];
81 bsc_ts note bsc_ts [label="onenter at UNUSED state will trigger back to
82 PDCH mode"];
83 |||;
84 --- [label="IF at least one lchan->state != LCHAN_ST_UNUSED"];
85 bsc_ts abox bsc_ts [label="IN_USE"];
86 bsc_ts rbox bsc_ts [label="Continue at 'IN_USE' above"];
87 ...;
88 ...;
89
90 bts rbox bsc_lchan [label="on erratic event"];
91 bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_ERROR"];
92 bsc_lchan box bsc_lchan [label="release lchan"];
93 ...;
94 bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_UNUSED"];
95 bsc_ts note bsc_ts [label="log error but ignore"];
96 ...;
97
98}