aboutsummaryrefslogtreecommitdiffstats
path: root/doc/timeslot.msc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/timeslot.msc')
-rw-r--r--doc/timeslot.msc98
1 files changed, 98 insertions, 0 deletions
diff --git a/doc/timeslot.msc b/doc/timeslot.msc
new file mode 100644
index 000000000..9a8c36075
--- /dev/null
+++ b/doc/timeslot.msc
@@ -0,0 +1,98 @@
+msc {
+ hscale=2;
+ bts [label="MS/BTS"], bsc[label="BSC"], bsc_ts[label="BSC timeslot FSM"], bsc_lchan[label="BSC lchan FSM"];
+
+ bsc_ts abox bsc_ts [label="NOT_INITIALIZED (no timeout)"];
+
+ ...;
+ bsc note bsc_ts [label="OML and RSL may be established in any order"];
+ bts => bsc_ts [label="OML: Channel OPSTART ACK"];
+ bsc -> bsc_ts [label="RSL bootstrapped"];
+ bsc_ts abox bsc_ts [label="UNUSED (no timeout)"];
+
+ |||;
+ bts rbox bsc_lchan [label="UNUSED, onenter"];
+ bsc_ts abox bsc_ts [label="UNUSED"];
+ --- [label="GPRS enabled?"];
+ --- [label="IF: dedicated PDCH?"];
+ bsc_ts abox bsc_ts [label="PDCH (no timeout)"];
+
+ |||;
+ --- [label="IF: dynamic timeslot"];
+ bsc_ts abox bsc_ts [label="WAIT_PDCH_ACT (?s, Tnnnn)"];
+ bts <= bsc_ts [label="RSL Chan Activ of PDCH",ID="Osmocom style"];
+ bts <= bsc_ts [label="RSL PDCH Act",ID="ip.access style"];
+ ...;
+ --- [label="timeout:"];
+ bsc_ts abox bsc_ts [label="BORKEN"];
+ ---;
+ ...;
+ bts => bsc_ts [label="RSL RF Chan Activ ACK",ID="Osmocom style"];
+ bts => bsc_ts [label="RSL PDCH Act ACK",ID="ip.access style"];
+ bsc_ts abox bsc_ts [label="PDCH (no timeout)"];
+
+ --- [label="END: GPRS enabled?"];
+ ...;
+ ...;
+
+ bts rbox bsc_lchan [label="UNUSED, on event"];
+ bsc_ts abox bsc_ts [label="UNUSED"];
+ bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED (data=lchan)"];
+ bsc_ts abox bsc_ts [label="IN_USE"];
+ bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_READY"];
+ bts <= bsc_lchan [label="RSL Chan Activ (and so on)"];
+ ...;
+ bts rbox bsc_lchan [label="IN_USE, second lchan"];
+ bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED (data=lchan)"];
+ bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_READY"];
+ bts <= bsc_lchan [label="RSL Chan Activ (and so on)"];
+ ...;
+ ...;
+ bts rbox bsc_lchan [label="IN_USE, when lchan FSM releases (both regularly, or due to error)"];
+ bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_UNUSED (data=lchan)"];
+ --- [label="IF all lchan->fi->state == LCHAN_ST_UNUSED"];
+ bsc_ts abox bsc_ts [label="UNUSED"];
+ ---;
+ ...;
+ ...;
+
+
+ bts rbox bsc_lchan [label="PDCH on lchan request"];
+ bsc_ts note bsc_lchan [label="TS_EV_LCHAN_REQUESTED should only come in on
+ lchans where it makes sense, both from TS kind as well as not
+ conflicting with other users of the lchan."];
+
+ bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_REQUESTED"];
+ bsc_ts abox bsc_ts [label="WAIT_PDCH_DEACT (?s, Tnnnn)"];
+ bts <= bsc_ts [label="RSL RF Chan Release of PDCH",ID="Osmocom style"];
+ bts <= bsc_ts [label="RSL PDCH Deact",ID="ip.access style"];
+ ...;
+ --- [label="timeout:"];
+ bsc_ts abox bsc_ts [label="BORKEN"];
+ bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_ERROR"];
+ ---;
+ ...;
+ bts => bsc_ts [label="RSL RF Chan Release ACK",ID="Osmocom style"];
+ bts => bsc_ts [label="RSL PDCH Deact ACK",ID="ip.access style"];
+ --- [label="IF all lchan->fi->state == LCHAN_ST_UNUSED"];
+ bsc_ts note bsc_lchan [label="If the lchan FSM decided to give up in the
+ meantime, nr of active lchans might have dropped back to zero."];
+ bsc_ts abox bsc_ts [label="UNUSED"];
+ bsc_ts note bsc_ts [label="onenter at UNUSED state will trigger back to
+ PDCH mode"];
+ |||;
+ --- [label="IF at least one lchan->state != LCHAN_ST_UNUSED"];
+ bsc_ts abox bsc_ts [label="IN_USE"];
+ bsc_ts rbox bsc_ts [label="Continue at 'IN_USE' above"];
+ ...;
+ ...;
+
+ bts rbox bsc_lchan [label="on erratic event"];
+ bsc_ts -> bsc_lchan [label="LCHAN_EV_TS_ERROR"];
+ bsc_lchan box bsc_lchan [label="release lchan"];
+ ...;
+ bsc_ts <- bsc_lchan [label="TS_EV_LCHAN_UNUSED"];
+ bsc_ts note bsc_ts [label="log error but ignore"];
+ ...;
+
+}